editor: Hide mouse cursor also for movements and selections (#27677)

This enables hiding mouse cursor even on cursor movements like up, down,
etc. or selections made using keyboard, etc.

Renamed existing boolean setting "hide_mouse_while_typing" to
"hide_mouse". It can have three values: `on_typing_and_movement`,
`on_typing`, `never`.

Release Notes:

- Now mouse cursor hides even when you navigate, or make selections
using keyboard in editor. This behavior can be changed by setting
`hide_mouse` to `on_typing_and_movement`, `on_typing` or `never`.
This commit is contained in:
Smit Barmase 2025-03-29 06:53:36 -07:00 committed by GitHub
parent 7fe6188f8e
commit 4970fe2d56
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 264 additions and 44 deletions

View file

@ -0,0 +1,65 @@
use std::ops::Range;
use tree_sitter::{Query, QueryMatch};
use crate::patterns::SETTINGS_ROOT_KEY_VALUE_PATTERN;
use crate::MigrationPatterns;
pub const SETTINGS_PATTERNS: MigrationPatterns = &[
(SETTINGS_ROOT_KEY_VALUE_PATTERN, replace_setting_name),
(SETTINGS_ROOT_KEY_VALUE_PATTERN, replace_setting_value),
];
fn replace_setting_value(
contents: &str,
mat: &QueryMatch,
query: &Query,
) -> Option<(Range<usize>, String)> {
let setting_capture_ix = query.capture_index_for_name("name")?;
let setting_name_range = mat
.nodes_for_capture_index(setting_capture_ix)
.next()?
.byte_range();
let setting_name = contents.get(setting_name_range.clone())?;
if setting_name != "hide_mouse_while_typing" {
return None;
}
let value_capture_ix = query.capture_index_for_name("value")?;
let value_range = mat
.nodes_for_capture_index(value_capture_ix)
.next()?
.byte_range();
let value = contents.get(value_range.clone())?;
let new_value = if value.trim() == "true" {
"\"on_typing_and_movement\""
} else if value.trim() == "false" {
"\"never\""
} else {
return None;
};
Some((value_range, new_value.to_string()))
}
fn replace_setting_name(
contents: &str,
mat: &QueryMatch,
query: &Query,
) -> Option<(Range<usize>, String)> {
let setting_capture_ix = query.capture_index_for_name("name")?;
let setting_name_range = mat
.nodes_for_capture_index(setting_capture_ix)
.next()?
.byte_range();
let setting_name = contents.get(setting_name_range.clone())?;
let new_setting_name = if setting_name == "hide_mouse_while_typing" {
"hide_mouse"
} else {
return None;
};
Some((setting_name_range, new_setting_name.to_string()))
}