mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-15 16:41:11 -07:00
Always enable bracketed paste (#16179)
This commit is contained in:
committed by
GitHub
parent
aa480e5fbb
commit
88f1ec8d0a
@@ -266,46 +266,4 @@ describe('TerminalCapabilityManager', () => {
|
||||
expect(manager.isModifyOtherKeysEnabled()).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('bracketed paste detection', () => {
|
||||
it('should detect bracketed paste support (mode set)', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Simulate bracketed paste response: \x1b[?2004;1$y
|
||||
stdin.emit('data', Buffer.from('\x1b[?2004;1$y'));
|
||||
// Complete detection with DA1
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.isBracketedPasteSupported()).toBe(true);
|
||||
expect(manager.isBracketedPasteEnabled()).toBe(true);
|
||||
});
|
||||
|
||||
it('should detect bracketed paste support (mode reset)', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Simulate bracketed paste response: \x1b[?2004;2$y
|
||||
stdin.emit('data', Buffer.from('\x1b[?2004;2$y'));
|
||||
// Complete detection with DA1
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.isBracketedPasteSupported()).toBe(true);
|
||||
expect(manager.isBracketedPasteEnabled()).toBe(true);
|
||||
});
|
||||
|
||||
it('should not enable bracketed paste if not supported', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Complete detection with DA1 only
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.isBracketedPasteSupported()).toBe(false);
|
||||
expect(manager.isBracketedPasteEnabled()).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -25,7 +25,6 @@ export class TerminalCapabilityManager {
|
||||
private static readonly TERMINAL_NAME_QUERY = '\x1b[>q';
|
||||
private static readonly DEVICE_ATTRIBUTES_QUERY = '\x1b[c';
|
||||
private static readonly MODIFY_OTHER_KEYS_QUERY = '\x1b[>4;?m';
|
||||
private static readonly BRACKETED_PASTE_QUERY = '\x1b[?2004$p';
|
||||
|
||||
// Kitty keyboard flags: CSI ? flags u
|
||||
// eslint-disable-next-line no-control-regex
|
||||
@@ -43,10 +42,6 @@ export class TerminalCapabilityManager {
|
||||
// modifyOtherKeys response: CSI > 4 ; level m
|
||||
// eslint-disable-next-line no-control-regex
|
||||
private static readonly MODIFY_OTHER_KEYS_REGEX = /\x1b\[>4;(\d+)m/;
|
||||
// DECRQM response for bracketed paste: CSI ? 2004 ; Ps $ y
|
||||
// Ps = 1 (set), 2 (reset), 3 (permanently set), 4 (permanently reset)
|
||||
// eslint-disable-next-line no-control-regex
|
||||
private static readonly BRACKETED_PASTE_REGEX = /\x1b\[\?2004;([1-4])\$y/;
|
||||
|
||||
private terminalBackgroundColor: TerminalBackgroundColor;
|
||||
private kittySupported = false;
|
||||
@@ -55,7 +50,6 @@ export class TerminalCapabilityManager {
|
||||
private terminalName: string | undefined;
|
||||
private modifyOtherKeysSupported = false;
|
||||
private modifyOtherKeysEnabled = false;
|
||||
private bracketedPasteSupported = false;
|
||||
private bracketedPasteEnabled = false;
|
||||
|
||||
private constructor() {}
|
||||
@@ -107,7 +101,6 @@ export class TerminalCapabilityManager {
|
||||
let deviceAttributesReceived = false;
|
||||
let bgReceived = false;
|
||||
let modifyOtherKeysReceived = false;
|
||||
let bracketedPasteReceived = false;
|
||||
// eslint-disable-next-line prefer-const
|
||||
let timeoutId: NodeJS.Timeout;
|
||||
|
||||
@@ -172,17 +165,6 @@ export class TerminalCapabilityManager {
|
||||
}
|
||||
}
|
||||
|
||||
// check for bracketed paste support
|
||||
if (!bracketedPasteReceived) {
|
||||
const match = buffer.match(
|
||||
TerminalCapabilityManager.BRACKETED_PASTE_REGEX,
|
||||
);
|
||||
if (match) {
|
||||
bracketedPasteReceived = true;
|
||||
this.bracketedPasteSupported = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for Terminal Name/Version response.
|
||||
if (!terminalNameReceived) {
|
||||
const match = buffer.match(
|
||||
@@ -219,7 +201,6 @@ export class TerminalCapabilityManager {
|
||||
TerminalCapabilityManager.OSC_11_QUERY +
|
||||
TerminalCapabilityManager.TERMINAL_NAME_QUERY +
|
||||
TerminalCapabilityManager.MODIFY_OTHER_KEYS_QUERY +
|
||||
TerminalCapabilityManager.BRACKETED_PASTE_QUERY +
|
||||
TerminalCapabilityManager.DEVICE_ATTRIBUTES_QUERY,
|
||||
);
|
||||
} catch (e) {
|
||||
@@ -238,10 +219,9 @@ export class TerminalCapabilityManager {
|
||||
enableModifyOtherKeys();
|
||||
this.modifyOtherKeysEnabled = true;
|
||||
}
|
||||
if (this.bracketedPasteSupported) {
|
||||
enableBracketedPasteMode();
|
||||
this.bracketedPasteEnabled = true;
|
||||
}
|
||||
// Always enable bracketed paste since it'll be ignored if unsupported.
|
||||
enableBracketedPasteMode();
|
||||
this.bracketedPasteEnabled = true;
|
||||
} catch (e) {
|
||||
debugLogger.warn('Failed to enable keyboard protocols:', e);
|
||||
}
|
||||
@@ -259,10 +239,6 @@ export class TerminalCapabilityManager {
|
||||
return this.kittyEnabled;
|
||||
}
|
||||
|
||||
isBracketedPasteSupported(): boolean {
|
||||
return this.bracketedPasteSupported;
|
||||
}
|
||||
|
||||
isBracketedPasteEnabled(): boolean {
|
||||
return this.bracketedPasteEnabled;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user