Skip to content

Commit 34b32db

Browse files
committed
Fix statubar logic to work with multiple editors on the same page
1 parent 6544a58 commit 34b32db

File tree

5 files changed

+70
-30
lines changed

5 files changed

+70
-30
lines changed

index.html

+21-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44
<head>
55
<title>Monaco Vim</title>
66
<style type="text/css">
7+
html, body, .container {
8+
width: 100%;
9+
height: 100%;
10+
}
11+
.container {
12+
display: flex;
13+
}
14+
.container > div {
15+
width: 100%;
16+
height: 100%;
17+
}
718
.editor {
819
width: 100%;
920
min-height: 600px;
@@ -21,8 +32,16 @@
2132
</head>
2233

2334
<body>
24-
<div class="editor" id="editor"></div>
25-
<div id="status"></div>
35+
<div class="container">
36+
<div>
37+
<div class="editor" id="editor1"></div>
38+
<div class="status" id="status1"></div>
39+
</div>
40+
<div>
41+
<div class="editor" id="editor2"></div>
42+
<div class="status" id="status2"></div>
43+
</div>
44+
</div>
2645
</body>
2746

2847
</html>

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "monaco-vim",
3-
"version": "0.0.9",
3+
"version": "0.0.10",
44
"description": "Vim keybindings for monaco-editor",
55
"main": "./lib/index.js",
66
"scripts": {

src/cm_adapter.js

+21
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ class CMAdapter {
293293
this.listeners = {};
294294
this.curOp = {};
295295
this.attached = false;
296+
this.statusBar = null;
296297
this.addLocalListeners();
297298
this.ctxInsert = this.editor.createContextKey('insertMode', true);
298299
}
@@ -1065,6 +1066,26 @@ class CMAdapter {
10651066
TypeOperations[indentRight ? 'indent' : 'outdent'](cursors.context.config, this.editor.getModel(), [sel]),
10661067
);
10671068
}
1069+
1070+
setStatusBar(statusBar) {
1071+
this.statusBar = statusBar;
1072+
}
1073+
1074+
openDialog(html, callback, options) {
1075+
if (!this.statusBar) {
1076+
return;
1077+
}
1078+
1079+
return this.statusBar.setSec(html, callback, options);
1080+
}
1081+
1082+
openNotification(html) {
1083+
if (!this.statusBar) {
1084+
return;
1085+
}
1086+
1087+
this.statusBar.showNotification(html);
1088+
}
10681089
}
10691090

10701091
export default CMAdapter;

src/demo.js

+18-11
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as monaco from 'monaco-editor';
22

33
import { initVimMode } from './';
44

5-
const editorNode = document.getElementById('editor');
6-
const statusNode = document.getElementById('status');
5+
const editorNode = document.getElementById('editor1');
6+
const statusNode = document.getElementById('status1');
77
const editor = monaco.editor.create(editorNode, {
88
value: [1, 2, 3, 4, 5, 6, 7, 8].map(t => 'import').join('\n'),
99
minimap: {
@@ -15,15 +15,22 @@ const editor = monaco.editor.create(editorNode, {
1515
scrollBeyondLastLine: false,
1616
});
1717
editor.focus();
18-
1918
const vimMode = initVimMode(editor, statusNode);
20-
window.vim = vimMode;
21-
window.editor = editor;
2219

23-
if (window.localStorage.getItem('value')) {
24-
editor.setValue(window.localStorage.getItem('value'));
25-
}
20+
const editorNode2 = document.getElementById('editor2');
21+
const statusNode2 = document.getElementById('status2');
22+
const editor2 = monaco.editor.create(editorNode2, {
23+
value: [1, 2, 3, 4, 5, 6, 7, 8].map(t => 'import').join('\n'),
24+
minimap: {
25+
enabled: false,
26+
},
27+
theme: 'vs',
28+
language: 'javascript',
29+
fontSize: 15,
30+
scrollBeyondLastLine: false,
31+
});
32+
editor.focus();
33+
const vimMode2 = initVimMode(editor2, statusNode2);
2634

27-
setInterval(() => {
28-
window.localStorage.setItem('value', editor.getValue());
29-
}, 2000)
35+
window.vimMode = vimMode;
36+
window.vimMode2 = vimMode2;

src/index.js

+9-16
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ export function initVimMode(editor, statusbarNode = null, StatusBarClass = Statu
99
return vimAdapter;
1010
}
1111

12-
const statusbar = new StatusBarClass(statusbarNode, editor);
12+
const statusBar = new StatusBarClass(statusbarNode, editor);
1313
let keyBuffer = '';
1414

1515
vimAdapter.on('vim-mode-change', (mode) => {
16-
statusbar.setMode(mode);
16+
statusBar.setMode(mode);
1717
});
1818

1919
vimAdapter.on('vim-keypress', (key) => {
@@ -22,30 +22,23 @@ export function initVimMode(editor, statusbarNode = null, StatusBarClass = Statu
2222
} else {
2323
keyBuffer += key;
2424
}
25-
statusbar.setKeyBuffer(keyBuffer);
25+
statusBar.setKeyBuffer(keyBuffer);
2626
});
2727

2828
vimAdapter.on('vim-command-done', () => {
2929
keyBuffer = '';
30-
statusbar.setKeyBuffer(keyBuffer);
30+
statusBar.setKeyBuffer(keyBuffer);
3131
});
3232

3333
vimAdapter.on('dispose', function() {
34-
statusbar.toggleVisibility(false);
35-
statusbar.closeInput();
36-
statusbar.innerHTML = '';
37-
});
38-
39-
VimMode.defineExtension('openDialog', function(html, callback, options) {
40-
return statusbar.setSec(html, callback, options);
41-
});
42-
43-
VimMode.defineExtension('openNotification', function(html) {
44-
statusbar.showNotification(html);
34+
statusBar.toggleVisibility(false);
35+
statusBar.closeInput();
36+
statusBar.innerHTML = '';
4537
});
4638

39+
statusBar.toggleVisibility(true);
40+
vimAdapter.setStatusBar(statusBar)
4741
vimAdapter.attach();
48-
statusbar.toggleVisibility(true);
4942

5043
return vimAdapter;
5144
}

0 commit comments

Comments
 (0)