Skip to content

Commit 226d4b2

Browse files
authored
Merge pull request #110 from firai/double-duty-escape
Add settings to enable double duty `Esc` and to disable `Shift-Esc` override in Command mode
2 parents 305f9ba + 292b57f commit 226d4b2

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

schema/plugin.json

+29-3
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,25 @@
9696
"command": "vim:select-above-execute-markdown"
9797
},
9898
{
99-
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'] .jp-Notebook.jp-mod-editMode",
99+
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'][data-jp-vim-esc-to-cmd-mode='false'] .jp-Notebook.jp-mod-editMode",
100100
"keys": ["Escape"],
101101
"command": "vim:leave-insert-mode"
102102
},
103103
{
104-
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'] .jp-Notebook.jp-mod-editMode",
104+
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'][data-jp-vim-esc-to-cmd-mode='true'] .jp-Notebook.jp-mod-editMode",
105+
"keys": ["Escape"],
106+
"command": "vim:leave-current-mode"
107+
},
108+
{
109+
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'][data-jp-vim-esc-to-cmd-mode='false'] .jp-Notebook.jp-mod-editMode",
105110
"keys": ["Ctrl ["],
106111
"command": "vim:leave-insert-mode"
107112
},
113+
{
114+
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'][data-jp-vim-esc-to-cmd-mode='true'] .jp-Notebook.jp-mod-editMode",
115+
"keys": ["Ctrl ["],
116+
"command": "vim:leave-current-mode"
117+
},
108118
{
109119
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'] .jp-Notebook:focus",
110120
"keys": ["Ctrl I"],
@@ -126,7 +136,7 @@
126136
"command": "notebook:enter-command-mode"
127137
},
128138
{
129-
"selector": ".jp-Notebook.jp-mod-commandMode",
139+
"selector": ".jp-NotebookPanel[data-jp-vim-mode='true'][data-jp-vim-shift-esc-override-browser='true'] .jp-Notebook.jp-mod-commandMode",
130140
"keys": ["Shift Escape"],
131141
"command": ""
132142
},
@@ -285,6 +295,22 @@
285295
"description": "Enable/disable vim in text editors (may require a page refresh)",
286296
"default": true
287297
},
298+
"cmdModeKeys": {
299+
"type": "object",
300+
"title": "Notebook shortcut key bindings for switching from vim Normal mode to Jupyter Command mode",
301+
"properties": {
302+
"escToCmdMode": {
303+
"type": "boolean",
304+
"title": "Enable `Esc` and `Ctrl-[` leaving vim Normal mode to Jupyter Command mode",
305+
"default": true
306+
},
307+
"shiftEscOverrideBrowser": {
308+
"type": "boolean",
309+
"title": "Override `Shift-Esc` browser shortcut in Jupyter Command mode",
310+
"default": true
311+
}
312+
}
313+
},
288314
"extraKeybindings": {
289315
"type": "array",
290316
"title": "Extra Vim Keybindings",

src/index.ts

+19
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ import {
2323
IKeybinding
2424
} from './codemirrorCommands';
2525
import { addNotebookCommands } from './labCommands';
26+
import { PartialJSONObject } from '@lumino/coreutils';
2627

2728
const PLUGIN_NAME = '@axlair/jupyterlab_vim';
2829
const TOGGLE_ID = 'jupyterlab-vim:toggle';
2930
let enabled = false;
3031
let enabledInEditors = true;
32+
let escToCmdMode = true;
33+
let shiftEscOverrideBrowser = true;
3134

3235
/**
3336
* Initialization data for the jupyterlab_vim extension.
@@ -170,6 +173,18 @@ async function activateCellVim(
170173

171174
enabled = settings.get('enabled').composite === true;
172175
enabledInEditors = settings.get('enabledInEditors').composite === true;
176+
177+
const cmdModeKeys = settings.get('cmdModeKeys')
178+
.composite as PartialJSONObject;
179+
if (!cmdModeKeys) {
180+
// no-op
181+
} else {
182+
escToCmdMode = cmdModeKeys['escToCmdMode'] as boolean;
183+
shiftEscOverrideBrowser = cmdModeKeys[
184+
'shiftEscOverrideBrowser'
185+
] as boolean;
186+
}
187+
173188
app.commands.notifyCommandChanged(TOGGLE_ID);
174189

175190
cellManager.enabled = enabled;
@@ -194,6 +209,8 @@ async function activateCellVim(
194209

195210
notebookTracker.forEach(notebook => {
196211
notebook.node.dataset.jpVimMode = `${enabled}`;
212+
notebook.node.dataset.jpVimEscToCmdMode = `${escToCmdMode}`;
213+
notebook.node.dataset.jpVimShiftEscOverrideBrowser = `${shiftEscOverrideBrowser}`;
197214
});
198215
editorTracker.forEach(document => {
199216
document.node.dataset.jpVimMode = `${enabled && enabledInEditors}`;
@@ -204,6 +221,8 @@ async function activateCellVim(
204221
// make sure our css selector is added to new notebooks
205222
notebookTracker.widgetAdded.connect((sender, notebook) => {
206223
notebook.node.dataset.jpVimMode = `${enabled}`;
224+
notebook.node.dataset.jpVimEscToCmdMode = `${escToCmdMode}`;
225+
notebook.node.dataset.jpVimShiftEscOverrideBrowser = `${shiftEscOverrideBrowser}`;
207226
});
208227
editorTracker.widgetAdded.connect((sender, document) => {
209228
document.node.dataset.jpVimMode = `${enabled && enabledInEditors}`;

0 commit comments

Comments
 (0)