Add feature to display commands for vim mode (#10349)

Release Notes:

- Added the current operator stack to the Vim status bar at the bottom
of the editor. #4447

This commit introduces a new feature that displays the current partial
command in the vim mode, similar to the behavior in Vim plugin. This
helps users keep track of the commands they're entering.
This commit is contained in:
Hans 2024-04-12 12:39:57 +08:00 committed by GitHub
parent 98533079e4
commit f2d61f3ea5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View file

@ -6,6 +6,7 @@ use crate::{state::Mode, Vim};
/// The ModeIndicator displays the current mode in the status bar.
pub struct ModeIndicator {
pub(crate) mode: Option<Mode>,
pub(crate) operators: String,
_subscription: Subscription,
}
@ -15,6 +16,7 @@ impl ModeIndicator {
let _subscription = cx.observe_global::<Vim>(|this, cx| this.update_mode(cx));
let mut this = Self {
mode: None,
operators: "".to_string(),
_subscription,
};
this.update_mode(cx);
@ -29,10 +31,20 @@ impl ModeIndicator {
if vim.enabled {
self.mode = Some(vim.state().mode);
self.operators = self.current_operators_description(&vim);
} else {
self.mode = None;
}
}
fn current_operators_description(&self, vim: &Vim) -> String {
vim.state()
.operator_stack
.iter()
.map(|item| item.id())
.collect::<Vec<_>>()
.join("")
}
}
impl Render for ModeIndicator {
@ -41,7 +53,7 @@ impl Render for ModeIndicator {
return div().into_any();
};
Label::new(format!("-- {} --", mode))
Label::new(format!("{} -- {} --", self.operators, mode))
.size(LabelSize::Small)
.into_any_element()
}