Restore bracketed paste mode after external editor exit (#13606)

This commit is contained in:
Tommaso Sciortino
2025-11-21 13:20:37 -08:00
committed by GitHub
parent 9f9a2fa844
commit 1e715d1e5c
4 changed files with 30 additions and 6 deletions

View File

@@ -62,6 +62,10 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
write: vi.fn(),
},
})),
enableMouseEvents: vi.fn(),
disableMouseEvents: vi.fn(),
enterAlternateScreen: vi.fn(),
disableLineWrapping: vi.fn(),
};
});

View File

@@ -116,6 +116,7 @@ import { isWorkspaceTrusted } from '../config/trustedFolders.js';
import { useAlternateBuffer } from './hooks/useAlternateBuffer.js';
import { useSettings } from './contexts/SettingsContext.js';
import { enableSupportedProtocol } from './utils/kittyProtocolDetector.js';
import { enableBracketedPaste } from './utils/bracketedPaste.js';
const WARNING_PROMPT_DURATION_MS = 1000;
const QUEUE_ERROR_DISPLAY_DURATION_MS = 3000;
@@ -387,6 +388,7 @@ export const AppContainer = (props: AppContainerProps) => {
disableLineWrapping();
app.rerender();
}
enableBracketedPaste();
enableSupportedProtocol();
refreshStatic();
}, [refreshStatic, isAlternateBuffer, app, config]);

View File

@@ -5,10 +5,10 @@
*/
import { useEffect } from 'react';
import { writeToStdout } from '@google/gemini-cli-core';
const ENABLE_BRACKETED_PASTE = '\x1b[?2004h';
const DISABLE_BRACKETED_PASTE = '\x1b[?2004l';
import {
disableBracketedPaste,
enableBracketedPaste,
} from '../utils/bracketedPaste.js';
/**
* Enables and disables bracketed paste mode in the terminal.
@@ -18,11 +18,11 @@ const DISABLE_BRACKETED_PASTE = '\x1b[?2004l';
*/
export const useBracketedPaste = () => {
const cleanup = () => {
writeToStdout(DISABLE_BRACKETED_PASTE);
disableBracketedPaste();
};
useEffect(() => {
writeToStdout(ENABLE_BRACKETED_PASTE);
enableBracketedPaste();
process.on('exit', cleanup);
process.on('SIGINT', cleanup);

View File

@@ -0,0 +1,18 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { writeToStdout } from '@google/gemini-cli-core';
const ENABLE_BRACKETED_PASTE = '\x1b[?2004h';
const DISABLE_BRACKETED_PASTE = '\x1b[?2004l';
export const enableBracketedPaste = () => {
writeToStdout(ENABLE_BRACKETED_PASTE);
};
export const disableBracketedPaste = () => {
writeToStdout(DISABLE_BRACKETED_PASTE);
};