mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-28 11:41:04 +00:00
The "Compact Mode" label is more intuitive than "Verbose Mode" for users, as it directly describes the default compact view experience. This change inverts the boolean semantics (compactMode=false means show full output) and exposes the setting in the /settings dialog (showInDialog: true). - Rename ui.verboseMode → ui.compactMode with inverted default (false) - Rename VerboseModeContext → CompactModeContext (file and exports) - Rename TOGGLE_VERBOSE_MODE → TOGGLE_COMPACT_MODE in key bindings - Update all consumer components with inverted logic - Update i18n keys across 6 locales (verbose → compact) - Update VS Code settings schema - Add ui.compactMode documentation to settings.md - Fix Ctrl+O description in keyboard-shortcuts.md
87 lines
3 KiB
TypeScript
87 lines
3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { Box, Static } from 'ink';
|
|
import { HistoryItemDisplay } from './HistoryItemDisplay.js';
|
|
import { ShowMoreLines } from './ShowMoreLines.js';
|
|
import { Notifications } from './Notifications.js';
|
|
import { OverflowProvider } from '../contexts/OverflowContext.js';
|
|
import { useUIState } from '../contexts/UIStateContext.js';
|
|
import { useAppContext } from '../contexts/AppContext.js';
|
|
import { AppHeader } from './AppHeader.js';
|
|
import { DebugModeNotification } from './DebugModeNotification.js';
|
|
import { useCompactMode } from '../contexts/CompactModeContext.js';
|
|
|
|
// Limit Gemini messages to a very high number of lines to mitigate performance
|
|
// issues in the worst case if we somehow get an enormous response from Gemini.
|
|
// This threshold is arbitrary but should be high enough to never impact normal
|
|
// usage.
|
|
const MAX_GEMINI_MESSAGE_LINES = 65536;
|
|
|
|
export const MainContent = () => {
|
|
const { version } = useAppContext();
|
|
const uiState = useUIState();
|
|
const { frozenSnapshot } = useCompactMode();
|
|
const {
|
|
pendingHistoryItems,
|
|
terminalWidth,
|
|
mainAreaWidth,
|
|
staticAreaMaxItemHeight,
|
|
availableTerminalHeight,
|
|
} = uiState;
|
|
|
|
return (
|
|
<>
|
|
<Static
|
|
key={`${uiState.historyRemountKey}-${uiState.currentModel}`}
|
|
items={[
|
|
<AppHeader key="app-header" version={version} />,
|
|
<DebugModeNotification key="debug-notification" />,
|
|
<Notifications key="notifications" />,
|
|
...uiState.history.map((h) => (
|
|
<HistoryItemDisplay
|
|
terminalWidth={terminalWidth}
|
|
mainAreaWidth={mainAreaWidth}
|
|
availableTerminalHeight={staticAreaMaxItemHeight}
|
|
availableTerminalHeightGemini={MAX_GEMINI_MESSAGE_LINES}
|
|
key={h.id}
|
|
item={h}
|
|
isPending={false}
|
|
commands={uiState.slashCommands}
|
|
/>
|
|
)),
|
|
]}
|
|
>
|
|
{(item) => item}
|
|
</Static>
|
|
<OverflowProvider>
|
|
<Box flexDirection="column">
|
|
{(frozenSnapshot ?? pendingHistoryItems).map((item, i) => {
|
|
const isFrozen = frozenSnapshot !== null;
|
|
return (
|
|
<HistoryItemDisplay
|
|
key={i}
|
|
availableTerminalHeight={
|
|
uiState.constrainHeight ? availableTerminalHeight : undefined
|
|
}
|
|
terminalWidth={terminalWidth}
|
|
mainAreaWidth={mainAreaWidth}
|
|
item={{ ...item, id: 0 }}
|
|
isPending={true}
|
|
isFocused={isFrozen ? false : !uiState.isEditorDialogOpen}
|
|
activeShellPtyId={isFrozen ? undefined : uiState.activePtyId}
|
|
embeddedShellFocused={
|
|
isFrozen ? false : uiState.embeddedShellFocused
|
|
}
|
|
/>
|
|
);
|
|
})}
|
|
<ShowMoreLines constrainHeight={uiState.constrainHeight} />
|
|
</Box>
|
|
</OverflowProvider>
|
|
</>
|
|
);
|
|
};
|