mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-09-05 19:08:17 +00:00
Add selection-clear-on-typing
Fixes #7392 Docs: > Whether to clear selected text when typing. This defaults to `true`. > This is typical behavior for most terminal emulators as well as > text input fields. If you set this to `false`, then the selected text > will not be cleared when typing. > > "Typing" is specifically defined as any non-modifier (shift, control, > alt, etc.) keypress that produces data to be sent to the application > running within the terminal (e.g. the shell). Additionally, selection > is cleared when any preedit or composition state is started (e.g. > when typing languages such as Japanese). > > If this is `false`, then the selection can still be manually > cleared by clicking once or by pressing `escape`.
This commit is contained in:
@@ -253,6 +253,7 @@ const DerivedConfig = struct {
|
||||
mouse_shift_capture: configpkg.MouseShiftCapture,
|
||||
macos_non_native_fullscreen: configpkg.NonNativeFullscreen,
|
||||
macos_option_as_alt: ?configpkg.OptionAsAlt,
|
||||
selection_clear_on_typing: bool,
|
||||
vt_kam_allowed: bool,
|
||||
window_padding_top: u32,
|
||||
window_padding_bottom: u32,
|
||||
@@ -316,6 +317,7 @@ const DerivedConfig = struct {
|
||||
.mouse_shift_capture = config.@"mouse-shift-capture",
|
||||
.macos_non_native_fullscreen = config.@"macos-non-native-fullscreen",
|
||||
.macos_option_as_alt = config.@"macos-option-as-alt",
|
||||
.selection_clear_on_typing = config.@"selection-clear-on-typing",
|
||||
.vt_kam_allowed = config.@"vt-kam-allowed",
|
||||
.window_padding_top = config.@"window-padding-y".top_left,
|
||||
.window_padding_bottom = config.@"window-padding-y".bottom_right,
|
||||
@@ -1687,7 +1689,9 @@ pub fn preeditCallback(self: *Surface, preedit_: ?[]const u8) !void {
|
||||
if (self.renderer_state.preedit != null or
|
||||
preedit_ != null)
|
||||
{
|
||||
self.setSelection(null) catch {};
|
||||
if (self.config.selection_clear_on_typing) {
|
||||
self.setSelection(null) catch {};
|
||||
}
|
||||
}
|
||||
|
||||
// We always clear our prior preedit
|
||||
@@ -1930,7 +1934,13 @@ pub fn keyCallback(
|
||||
if (!event.key.modifier()) {
|
||||
self.renderer_state.mutex.lock();
|
||||
defer self.renderer_state.mutex.unlock();
|
||||
try self.setSelection(null);
|
||||
|
||||
if (self.config.selection_clear_on_typing or
|
||||
event.key == .escape)
|
||||
{
|
||||
try self.setSelection(null);
|
||||
}
|
||||
|
||||
try self.io.terminal.scrollViewport(.{ .bottom = {} });
|
||||
try self.queueRender();
|
||||
}
|
||||
|
@@ -474,6 +474,21 @@ foreground: Color = .{ .r = 0xFF, .g = 0xFF, .b = 0xFF },
|
||||
/// selection color will vary across the selection.
|
||||
@"selection-invert-fg-bg": bool = false,
|
||||
|
||||
/// Whether to clear selected text when typing. This defaults to `true`.
|
||||
/// This is typical behavior for most terminal emulators as well as
|
||||
/// text input fields. If you set this to `false`, then the selected text
|
||||
/// will not be cleared when typing.
|
||||
///
|
||||
/// "Typing" is specifically defined as any non-modifier (shift, control,
|
||||
/// alt, etc.) keypress that produces data to be sent to the application
|
||||
/// running within the terminal (e.g. the shell). Additionally, selection
|
||||
/// is cleared when any preedit or composition state is started (e.g.
|
||||
/// when typing languages such as Japanese).
|
||||
///
|
||||
/// If this is `false`, then the selection can still be manually
|
||||
/// cleared by clicking once or by pressing `escape`.
|
||||
@"selection-clear-on-typing": bool = true,
|
||||
|
||||
/// The minimum contrast ratio between the foreground and background colors.
|
||||
/// The contrast ratio is a value between 1 and 21. A value of 1 allows for no
|
||||
/// contrast (e.g. black on black). This value is the contrast ratio as defined
|
||||
|
Reference in New Issue
Block a user