fix(plugins): rebind insert (#3692)

* fix(tab): recover from closing a pane outside the viewport

* remap insert in plugin manager

* fix(plugins): remap insert key

* style(fmt): rustfmt
This commit is contained in:
Aram Drevekenin 2024-10-23 17:34:41 +02:00 committed by GitHub
parent 82ccc4844e
commit b71be135c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 58 additions and 37 deletions

View file

@ -85,7 +85,7 @@ impl PresetsScreen {
self.reset_selected_index(); self.reset_selected_index();
} }
should_render = true; should_render = true;
} else if key.bare_key == BareKey::Insert && key.has_no_modifiers() { } else if key.bare_key == BareKey::Char('s') && key.has_modifiers(&[KeyModifier::Ctrl]) {
if let Some(selected_index) = self.take_selected_index() { if let Some(selected_index) = self.take_selected_index() {
let write_to_disk = true; let write_to_disk = true;
self.reconfigure(selected_index, write_to_disk); self.reconfigure(selected_index, write_to_disk);
@ -788,16 +788,16 @@ impl PresetsScreen {
} }
} }
fn render_help_text_main(&self, rows: usize, cols: usize) { fn render_help_text_main(&self, rows: usize, cols: usize) {
let full_help_text = "Help: <↓↑> - navigate, <ENTER> - apply, <INS> - apply & save, <l> - leaders, <ESC> - close"; let full_help_text = "Help: <↓↑> - navigate, <ENTER> - apply, <Ctrl s> - apply & save, <l> - leaders, <ESC> - close";
let short_help_text = "Help: <↓↑> / <ENTER> / <INS> / <l> / <ESC>"; let short_help_text = "Help: <↓↑> / <ENTER> / <Ctrl s> / <l> / <ESC>";
if cols >= full_help_text.chars().count() { if cols >= full_help_text.chars().count() {
print_text_with_coordinates( print_text_with_coordinates(
Text::new(full_help_text) Text::new(full_help_text)
.color_range(2, 6..10) .color_range(2, 6..10)
.color_range(2, 23..30) .color_range(2, 23..30)
.color_range(2, 40..45) .color_range(2, 40..48)
.color_range(2, 62..65) .color_range(2, 65..68)
.color_range(2, 77..82), .color_range(2, 80..85),
0, 0,
rows, rows,
None, None,
@ -808,9 +808,9 @@ impl PresetsScreen {
Text::new(short_help_text) Text::new(short_help_text)
.color_range(2, 6..10) .color_range(2, 6..10)
.color_range(2, 13..20) .color_range(2, 13..20)
.color_range(2, 23..28) .color_range(2, 23..31)
.color_range(2, 31..34) .color_range(2, 34..37)
.color_range(2, 37..42), .color_range(2, 40..45),
0, 0,
rows, rows,
None, None,

View file

@ -558,10 +558,11 @@ impl RebindLeadersScreen {
if self.is_rebinding_for_presets { if self.is_rebinding_for_presets {
return self.render_help_text_for_presets_rebinding(rows, cols); return self.render_help_text_for_presets_rebinding(rows, cols);
} }
let help_text_long = "Help: <←↓↑→> - navigate, <SPACE> - select, <ENTER> - apply, <INSERT> - save, <Ctrl c> - reset, <ESC> - close"; let help_text_long = "Help: <←↓↑→> - navigate, <SPACE> - select, <ENTER> - apply, <Ctrl s> - save, <Ctrl c> - reset, <ESC> - close";
let help_text_medium = "Help: <←↓↑→/SPACE> - navigate/select, <ENTER/INS> - apply/save, <Ctrl c> - reset, <ESC> - close"; let help_text_medium = "Help: <←↓↑→/SPACE> - navigate/select, <ENTER/Ctrl s> - apply/save, <Ctrl c> - reset, <ESC> - close";
let help_text_short = "Help: <←↓↑→>/<SPACE>/<ENTER> select/<INS> save/<Ctrl c> reset/<ESC>"; let help_text_short =
let help_text_minimum = "<←↓↑→>/<SPACE>/<ENTER>/<INS>/<Ctrl c>/<ESC>"; "Help: <←↓↑→>/<SPACE>/<ENTER> select/<Ctrl s> save/<Ctrl c> reset/<ESC>";
let help_text_minimum = "<←↓↑→>/<SPACE>/<ENTER>/<Ctrl s>/<Ctrl c>/<ESC>";
if cols >= help_text_long.chars().count() { if cols >= help_text_long.chars().count() {
print_text_with_coordinates( print_text_with_coordinates(
Text::new(help_text_long) Text::new(help_text_long)
@ -580,9 +581,9 @@ impl RebindLeadersScreen {
print_text_with_coordinates( print_text_with_coordinates(
Text::new(help_text_medium) Text::new(help_text_medium)
.color_range(2, 6..=17) .color_range(2, 6..=17)
.color_range(2, 38..=48) .color_range(2, 38..=51)
.color_range(2, 64..=72) .color_range(2, 67..=75)
.color_range(2, 82..=86), .color_range(2, 85..=89),
0, 0,
rows, rows,
None, None,
@ -594,9 +595,9 @@ impl RebindLeadersScreen {
.color_range(2, 6..=11) .color_range(2, 6..=11)
.color_range(2, 13..=19) .color_range(2, 13..=19)
.color_range(2, 21..=27) .color_range(2, 21..=27)
.color_range(2, 36..=40) .color_range(2, 36..=43)
.color_range(2, 47..=54) .color_range(2, 50..=57)
.color_range(2, 62..=66), .color_range(2, 65..=69),
0, 0,
rows, rows,
None, None,
@ -608,9 +609,9 @@ impl RebindLeadersScreen {
.color_range(2, ..=5) .color_range(2, ..=5)
.color_range(2, 7..=13) .color_range(2, 7..=13)
.color_range(2, 15..=21) .color_range(2, 15..=21)
.color_range(2, 23..=27) .color_range(2, 23..=30)
.color_range(2, 29..=36) .color_range(2, 32..=39)
.color_range(2, 38..=42), .color_range(2, 41..=45),
0, 0,
rows, rows,
None, None,
@ -1194,8 +1195,8 @@ impl RebindLeadersScreen {
self.is_rebinding_for_presets = is_rebinding_for_presets; self.is_rebinding_for_presets = is_rebinding_for_presets;
} }
fn handle_unlock_first_key(&mut self, key: KeyWithModifier) -> bool { fn handle_unlock_first_key(&mut self, key: KeyWithModifier) -> bool {
if key.bare_key == BareKey::Insert if key.bare_key == BareKey::Char('s')
&& key.has_no_modifiers() && key.has_modifiers(&[KeyModifier::Ctrl])
&& !self.is_rebinding_for_presets && !self.is_rebinding_for_presets
{ {
let write_to_disk = true; let write_to_disk = true;

View file

@ -841,29 +841,33 @@ impl State {
tab_line tab_line
} }
pub fn render_help(&self, y: usize, cols: usize) { pub fn render_help(&self, y: usize, cols: usize) {
let full_text = "Help: <←↓↑→> - Navigate/Expand, <ENTER> - focus, <TAB> - Reload, <Del> - Close, <INSERT> - New"; let full_text = "Help: <←↓↑→> - Navigate/Expand, <ENTER> - focus, <TAB> - Reload, <Del> - Close, <Ctrl a> - New, <ESC> - Exit";
let middle_text = let middle_text =
"Help: <←↓↑→/ENTER> - Navigate, <TAB> - Reload, <Del> - Close, <INSERT> - New"; "Help: <←↓↑→/ENTER> - Navigate, <TAB> - Reload, <Del> - Close, <Ctrl a> - New, <ESC> - Exit";
let short_text = "<←↓↑→/ENTER/TAB/Del> - Navigate/Expand/Reload/Close, <INSERT> - New"; let short_text =
"<←↓↑→/ENTER/TAB/Del> - Navigate/Expand/Reload/Close, <Ctrl a> - New, <ESC> - Exit";
if cols >= full_text.chars().count() { if cols >= full_text.chars().count() {
let text = Text::new(full_text) let text = Text::new(full_text)
.color_range(3, 5..=11) .color_range(3, 5..=11)
.color_range(3, 32..=38) .color_range(3, 32..=38)
.color_range(3, 49..=53) .color_range(3, 49..=53)
.color_range(3, 65..=69) .color_range(3, 65..=69)
.color_range(3, 80..=87); .color_range(3, 80..=87)
.color_range(3, 96..=100);
print_text_with_coordinates(text, 0, y, Some(cols), None); print_text_with_coordinates(text, 0, y, Some(cols), None);
} else if cols >= middle_text.chars().count() { } else if cols >= middle_text.chars().count() {
let text = Text::new(middle_text) let text = Text::new(middle_text)
.color_range(3, 6..=17) .color_range(3, 6..=17)
.color_range(3, 31..=35) .color_range(3, 31..=35)
.color_range(3, 47..=51) .color_range(3, 47..=51)
.color_range(3, 62..=69); .color_range(3, 62..=69)
.color_range(3, 78..=82);
print_text_with_coordinates(text, 0, y, Some(cols), None); print_text_with_coordinates(text, 0, y, Some(cols), None);
} else { } else {
let text = Text::new(short_text) let text = Text::new(short_text)
.color_range(3, ..=21) .color_range(3, ..=21)
.color_range(3, 53..=60); .color_range(3, 53..=60)
.color_range(3, 69..=73);
print_text_with_coordinates(text, 0, y, Some(cols), None); print_text_with_coordinates(text, 0, y, Some(cols), None);
} }
} }
@ -989,7 +993,7 @@ impl State {
BareKey::Tab if key.has_no_modifiers() => { BareKey::Tab if key.has_no_modifiers() => {
self.reload_selected(); self.reload_selected();
}, },
BareKey::Insert if key.has_no_modifiers() => { BareKey::Char('a') if key.has_modifiers(&[KeyModifier::Ctrl]) => {
self.new_plugin_screen = Some(Default::default()); self.new_plugin_screen = Some(Default::default());
should_render = true; should_render = true;
}, },
@ -997,9 +1001,13 @@ impl State {
self.close_selected(); self.close_selected();
}, },
BareKey::Esc if key.has_no_modifiers() => { BareKey::Esc if key.has_no_modifiers() => {
if !self.search_term.is_empty() {
self.search_term.clear(); self.search_term.clear();
self.update_search_term(); self.update_search_term();
should_render = true; should_render = true;
} else {
close_self();
}
}, },
_ => {}, _ => {},
} }

View file

@ -9,6 +9,12 @@ pub struct ActivePanes {
os_api: Box<dyn ServerOsApi>, os_api: Box<dyn ServerOsApi>,
} }
impl std::fmt::Debug for ActivePanes {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self.active_panes)
}
}
impl ActivePanes { impl ActivePanes {
pub fn new(os_api: &Box<dyn ServerOsApi>) -> Self { pub fn new(os_api: &Box<dyn ServerOsApi>) -> Self {
let os_api = os_api.clone(); let os_api = os_api.clone();

View file

@ -1569,9 +1569,15 @@ impl TiledPanes {
closed_pane closed_pane
} else { } else {
let closed_pane = self.panes.remove(&pane_id); let closed_pane = self.panes.remove(&pane_id);
if closed_pane
.as_ref()
.map(|p| p.selectable())
.unwrap_or(false)
{
// this is a bit of a roundabout way to say: this is the last pane and so the tab // this is a bit of a roundabout way to say: this is the last pane and so the tab
// should be destroyed // should be destroyed
self.active_panes.clear(&mut self.panes); self.active_panes.clear(&mut self.panes);
}
closed_pane closed_pane
} }
} }