From c04f43d9362012d7bbc9e240e2a6dc68a780e29b Mon Sep 17 00:00:00 2001 From: Kenichi Nakamura Date: Wed, 23 Aug 2023 11:34:02 -0700 Subject: [PATCH] Fix editor escape in Vim visual mode (#2178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jonatan Kłosko --- assets/js/hooks/cell_editor/live_editor.js | 27 ++++++++++++++-------- assets/js/hooks/session.js | 4 ++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/assets/js/hooks/cell_editor/live_editor.js b/assets/js/hooks/cell_editor/live_editor.js index 66d953e1e..dd171d088 100644 --- a/assets/js/hooks/cell_editor/live_editor.js +++ b/assets/js/hooks/cell_editor/live_editor.js @@ -371,16 +371,7 @@ class LiveEditor { this._initializeWidgets(); // Set the editor mode - if (settings.editor_mode == "emacs") { - this.emacsMode = new EmacsExtension(this.editor); - this.emacsMode.start(); - unregisterKey("Tab"); - } else if (settings.editor_mode == "vim") { - this.vimMode = initVimMode(this.editor); - this.vimMode.on("vim-mode-change", ({ mode: mode }) => { - this.editor.getDomNode().setAttribute("data-vim-mode", mode); - }); - } + this._setEditorMode(settings.editor_mode); } /** @@ -646,6 +637,22 @@ class LiveEditor { ); }); } + + /** + * Sets Monaco editor mode via monaco-emacs or monaco-vim packages. + */ + _setEditorMode(editorMode) { + if (editorMode == "emacs") { + this.emacsMode = new EmacsExtension(this.editor); + this.emacsMode.start(); + unregisterKey("Tab"); + } else if (editorMode == "vim") { + this.vimMode = initVimMode(this.editor); + this.vimMode.on("vim-mode-change", ({ mode: mode }) => { + this.editor.getDomNode().setAttribute("data-vim-mode", mode); + }); + } + } } function completionItemsToSuggestions(items, settings) { diff --git a/assets/js/hooks/session.js b/assets/js/hooks/session.js index 636ec341e..34b41b991 100644 --- a/assets/js/hooks/session.js +++ b/assets/js/hooks/session.js @@ -469,8 +469,8 @@ const Session = { return true; } - // Vim insert mode - if (editor.dataset.vimMode == "insert") { + // Vim insert or visual mode + if (["insert", "visual"].includes(editor.dataset.vimMode)) { return true; }