Add o/O for flipping selection

This commit is contained in:
Conrad Irwin 2023-07-28 13:54:03 -06:00
parent 3f2f3bb78d
commit e3788cc6e6
2 changed files with 17 additions and 1 deletions

View File

@ -360,6 +360,8 @@
"context": "Editor && vim_mode == visual && !VimWaiting", "context": "Editor && vim_mode == visual && !VimWaiting",
"bindings": { "bindings": {
"u": "editor::Undo", "u": "editor::Undo",
"o": "vim::OtherEnd",
"shift-o": "vim::OtherEnd",
"c": "vim::VisualChange", "c": "vim::VisualChange",
"d": "vim::VisualDelete", "d": "vim::VisualDelete",
"x": "vim::VisualDelete", "x": "vim::VisualDelete",

View File

@ -24,13 +24,15 @@ actions!(
VisualDelete, VisualDelete,
VisualChange, VisualChange,
VisualYank, VisualYank,
VisualPaste VisualPaste,
OtherEnd,
] ]
); );
pub fn init(cx: &mut AppContext) { pub fn init(cx: &mut AppContext) {
cx.add_action(toggle_visual); cx.add_action(toggle_visual);
cx.add_action(toggle_visual_line); cx.add_action(toggle_visual_line);
cx.add_action(other_end);
cx.add_action(change); cx.add_action(change);
cx.add_action(delete); cx.add_action(delete);
cx.add_action(yank); cx.add_action(yank);
@ -150,6 +152,18 @@ pub fn toggle_visual_line(
}) })
} }
pub fn other_end(_: &mut Workspace, _: &OtherEnd, cx: &mut ViewContext<Workspace>) {
Vim::update(cx, |vim, cx| {
vim.update_active_editor(cx, |editor, cx| {
editor.change_selections(None, cx, |s| {
s.move_with(|_, selection| {
selection.reversed = !selection.reversed;
})
})
})
});
}
pub fn change(_: &mut Workspace, _: &VisualChange, cx: &mut ViewContext<Workspace>) { pub fn change(_: &mut Workspace, _: &VisualChange, cx: &mut ViewContext<Workspace>) {
Vim::update(cx, |vim, cx| { Vim::update(cx, |vim, cx| {
vim.update_active_editor(cx, |editor, cx| { vim.update_active_editor(cx, |editor, cx| {