Configure Highlight settings on yank vim (#21479)

Release Notes:

- Add settings / config variables to control `highlight_on_yank` or
`highlight_on_copy`

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
Vedant Matanhelia 2024-12-04 21:53:31 +05:30 committed by GitHub
parent 207eb51df1
commit 5948ea217b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 10 additions and 3 deletions

View file

@ -1129,6 +1129,7 @@
"use_system_clipboard": "always", "use_system_clipboard": "always",
"use_multiline_find": false, "use_multiline_find": false,
"use_smartcase_find": false, "use_smartcase_find": false,
"highlight_on_yank_duration": 200,
"custom_digraphs": {} "custom_digraphs": {}
}, },
// The server to connect to. If the environment variable // The server to connect to. If the environment variable

View file

@ -4,13 +4,14 @@ use crate::{
motion::Motion, motion::Motion,
object::Object, object::Object,
state::{Mode, Register}, state::{Mode, Register},
Vim, Vim, VimSettings,
}; };
use collections::HashMap; use collections::HashMap;
use editor::{ClipboardSelection, Editor}; use editor::{ClipboardSelection, Editor};
use gpui::ViewContext; use gpui::ViewContext;
use language::Point; use language::Point;
use multi_buffer::MultiBufferRow; use multi_buffer::MultiBufferRow;
use settings::Settings;
struct HighlightOnYank; struct HighlightOnYank;
@ -195,7 +196,8 @@ impl Vim {
) )
}); });
if !is_yank || self.mode == Mode::Visual { let highlight_duration = VimSettings::get_global(cx).highlight_on_yank_duration;
if !is_yank || self.mode == Mode::Visual || highlight_duration == 0 {
return; return;
} }
@ -206,7 +208,7 @@ impl Vim {
); );
cx.spawn(|this, mut cx| async move { cx.spawn(|this, mut cx| async move {
cx.background_executor() cx.background_executor()
.timer(Duration::from_millis(200)) .timer(Duration::from_millis(highlight_duration))
.await; .await;
this.update(&mut cx, |editor, cx| { this.update(&mut cx, |editor, cx| {
editor.clear_background_highlights::<HighlightOnYank>(cx) editor.clear_background_highlights::<HighlightOnYank>(cx)

View file

@ -1199,6 +1199,7 @@ struct VimSettings {
pub use_multiline_find: bool, pub use_multiline_find: bool,
pub use_smartcase_find: bool, pub use_smartcase_find: bool,
pub custom_digraphs: HashMap<String, Arc<str>>, pub custom_digraphs: HashMap<String, Arc<str>>,
pub highlight_on_yank_duration: u64,
} }
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
@ -1208,6 +1209,7 @@ struct VimSettingsContent {
pub use_multiline_find: Option<bool>, pub use_multiline_find: Option<bool>,
pub use_smartcase_find: Option<bool>, pub use_smartcase_find: Option<bool>,
pub custom_digraphs: Option<HashMap<String, Arc<str>>>, pub custom_digraphs: Option<HashMap<String, Arc<str>>>,
pub highlight_on_yank_duration: Option<u64>,
} }
impl Settings for VimSettings { impl Settings for VimSettings {

View file

@ -438,6 +438,7 @@ You can change the following settings to modify vim mode's behavior:
| use_smartcase_find | If `true`, `f` and `t` motions are case-insensitive when the target letter is lowercase. | false | | use_smartcase_find | If `true`, `f` and `t` motions are case-insensitive when the target letter is lowercase. | false |
| toggle_relative_line_numbers | If `true`, line numbers are relative in normal mode and absolute in insert mode, giving you the best of both options. | false | | toggle_relative_line_numbers | If `true`, line numbers are relative in normal mode and absolute in insert mode, giving you the best of both options. | false |
| custom_digraphs | An object that allows you to add custom digraphs. Read below for an example. | {} | | custom_digraphs | An object that allows you to add custom digraphs. Read below for an example. | {} |
| highlight_on_yank_duration | The duration of the highlight animation(in ms). Set to `0` to disable | 200 |
Here's an example of adding a digraph for the zombie emoji. This allows you to type `ctrl-k f z` to insert a zombie emoji. You can add as many digraphs as you like. Here's an example of adding a digraph for the zombie emoji. This allows you to type `ctrl-k f z` to insert a zombie emoji. You can add as many digraphs as you like.
@ -460,6 +461,7 @@ Here's an example of these settings changed:
"use_multiline_find": true, "use_multiline_find": true,
"use_smartcase_find": true, "use_smartcase_find": true,
"toggle_relative_line_numbers": true, "toggle_relative_line_numbers": true,
"highlight_on_yank_duration": 50,
"custom_digraphs": { "custom_digraphs": {
"fz": "🧟‍♀️" "fz": "🧟‍♀️"
} }