mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-09-05 19:08:17 +00:00
feat: add selection-clear-on-copy
configuration option (#8462)
Addresses issue: Add selection-clear-on-copy configuration #8407 Added configuration option `selection-clear-on-copy` that matches with the `selection-clear-on-typing` option. And `copy-on-select` is ignored when `selection-clear-on-copy` is true regardless of whether `copy-on-select` is set to true or clipboard. Also `.copy_to_clipboard` binding action was refactored to use `copySelectionToClipboards` for consistent behavior. > Consulted with Copilot (Claude Sonnet 4) to understand the control flow of copy operations and help write the docs. Solution was authored and implemented by me.
This commit is contained in:
@@ -258,6 +258,7 @@ const DerivedConfig = struct {
|
||||
mouse_shift_capture: configpkg.MouseShiftCapture,
|
||||
macos_non_native_fullscreen: configpkg.NonNativeFullscreen,
|
||||
macos_option_as_alt: ?configpkg.OptionAsAlt,
|
||||
selection_clear_on_copy: bool,
|
||||
selection_clear_on_typing: bool,
|
||||
vt_kam_allowed: bool,
|
||||
wait_after_command: bool,
|
||||
@@ -327,6 +328,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_copy = config.@"selection-clear-on-copy",
|
||||
.selection_clear_on_typing = config.@"selection-clear-on-typing",
|
||||
.vt_kam_allowed = config.@"vt-kam-allowed",
|
||||
.wait_after_command = config.@"wait-after-command",
|
||||
@@ -4544,6 +4546,17 @@ pub fn performBindingAction(self: *Surface, action: input.Binding.Action) !bool
|
||||
return true;
|
||||
};
|
||||
|
||||
// Clear the selection if configured to do so.
|
||||
if (self.config.selection_clear_on_copy) {
|
||||
if (self.setSelection(null)) {
|
||||
self.queueRender() catch |err| {
|
||||
log.warn("failed to queue render after clear selection err={}", .{err});
|
||||
};
|
||||
} else |err| {
|
||||
log.warn("failed to clear selection after copy err={}", .{err});
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -654,6 +654,18 @@ foreground: Color = .{ .r = 0xFF, .g = 0xFF, .b = 0xFF },
|
||||
/// Available since: 1.2.0
|
||||
@"selection-clear-on-typing": bool = true,
|
||||
|
||||
/// Whether to clear selected text after copying. This defaults to `false`.
|
||||
///
|
||||
/// When set to `true`, the selection will be automatically cleared after
|
||||
/// any copy operation that invokes the `copy_to_clipboard` keyboard binding.
|
||||
/// Importantly, this will not clear the selection if the copy operation
|
||||
/// was invoked via `copy-on-select`.
|
||||
///
|
||||
/// When set to `false`, the selection remains visible after copying, allowing
|
||||
/// to see what was copied and potentially perform additional operations
|
||||
/// on the same selection.
|
||||
@"selection-clear-on-copy": bool = false,
|
||||
|
||||
/// 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