vim: Maintain block cursor for navigating/non-modifying operators (#21502)
The cursor shape now only changes to underline for operators that modify text (like: delete, change, yank) while maintaining block shape for navigation operators (like: find, till). This better matches Vim/Nvim's behavior where the cursor only changes shape when an operator that will modify text is pending. Release Notes: - vim: Improved cursor shape behavior to better match Vim
This commit is contained in:
parent
901dbedf8d
commit
85c3aec6e7
1 changed files with 16 additions and 3 deletions
|
@ -626,10 +626,23 @@ impl Vim {
|
|||
pub fn cursor_shape(&self) -> CursorShape {
|
||||
match self.mode {
|
||||
Mode::Normal => {
|
||||
if self.operator_stack.is_empty() {
|
||||
CursorShape::Block
|
||||
if let Some(operator) = self.operator_stack.last() {
|
||||
match operator {
|
||||
// Navigation operators -> Block cursor
|
||||
Operator::FindForward { .. }
|
||||
| Operator::FindBackward { .. }
|
||||
| Operator::Mark
|
||||
| Operator::Jump { .. }
|
||||
| Operator::Register
|
||||
| Operator::RecordRegister
|
||||
| Operator::ReplayRegister => CursorShape::Block,
|
||||
|
||||
// All other operators -> Underline cursor
|
||||
_ => CursorShape::Underline,
|
||||
}
|
||||
} else {
|
||||
CursorShape::Underline
|
||||
// No operator active -> Block cursor
|
||||
CursorShape::Block
|
||||
}
|
||||
}
|
||||
Mode::Replace => CursorShape::Underline,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue