mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-13 15:40:57 -07:00
feat(cli): truncate shell output in UI history and improve active shell display (#17438)
This commit is contained in:
@@ -9,16 +9,19 @@ import type React from 'react';
|
||||
import { useKeypress } from '../hooks/useKeypress.js';
|
||||
import { ShellExecutionService } from '@google/gemini-cli-core';
|
||||
import { keyToAnsi, type Key } from '../hooks/keyToAnsi.js';
|
||||
import { ACTIVE_SHELL_MAX_LINES } from '../constants.js';
|
||||
import { Command, keyMatchers } from '../keyMatchers.js';
|
||||
|
||||
export interface ShellInputPromptProps {
|
||||
activeShellPtyId: number | null;
|
||||
focus?: boolean;
|
||||
scrollPageSize?: number;
|
||||
}
|
||||
|
||||
export const ShellInputPrompt: React.FC<ShellInputPromptProps> = ({
|
||||
activeShellPtyId,
|
||||
focus = true,
|
||||
scrollPageSize = ACTIVE_SHELL_MAX_LINES,
|
||||
}) => {
|
||||
const handleShellInputSubmit = useCallback(
|
||||
(input: string) => {
|
||||
@@ -34,26 +37,33 @@ export const ShellInputPrompt: React.FC<ShellInputPromptProps> = ({
|
||||
if (!focus || !activeShellPtyId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allow background shell toggle to bubble up
|
||||
if (keyMatchers[Command.TOGGLE_BACKGROUND_SHELL](key)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allow unfocus to bubble up
|
||||
// Allow Shift+Tab to bubble up for focus navigation
|
||||
if (keyMatchers[Command.UNFOCUS_SHELL_INPUT](key)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (key.ctrl && key.shift && key.name === 'up') {
|
||||
if (keyMatchers[Command.SCROLL_UP](key)) {
|
||||
ShellExecutionService.scrollPty(activeShellPtyId, -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (key.ctrl && key.shift && key.name === 'down') {
|
||||
if (keyMatchers[Command.SCROLL_DOWN](key)) {
|
||||
ShellExecutionService.scrollPty(activeShellPtyId, 1);
|
||||
return true;
|
||||
}
|
||||
// TODO: Check pty service actually scrolls (request)[https://github.com/google-gemini/gemini-cli/pull/17438/changes/c9fdaf8967da0036bfef43592fcab5a69537df35#r2776479023].
|
||||
if (keyMatchers[Command.PAGE_UP](key)) {
|
||||
ShellExecutionService.scrollPty(activeShellPtyId, -scrollPageSize);
|
||||
return true;
|
||||
}
|
||||
if (keyMatchers[Command.PAGE_DOWN](key)) {
|
||||
ShellExecutionService.scrollPty(activeShellPtyId, scrollPageSize);
|
||||
return true;
|
||||
}
|
||||
|
||||
const ansiSequence = keyToAnsi(key);
|
||||
if (ansiSequence) {
|
||||
@@ -63,7 +73,7 @@ export const ShellInputPrompt: React.FC<ShellInputPromptProps> = ({
|
||||
|
||||
return false;
|
||||
},
|
||||
[focus, handleShellInputSubmit, activeShellPtyId],
|
||||
[focus, handleShellInputSubmit, activeShellPtyId, scrollPageSize],
|
||||
);
|
||||
|
||||
useKeypress(handleInput, { isActive: focus });
|
||||
|
||||
Reference in New Issue
Block a user