Emacs key bindings for monaco-editor. Demo.
npm install monaco-emacs
import * as monaco from 'monaco-editor';
import { EmacsExtension } from 'monaco-emacs';
- Add this script in your html -
https://unpkg.com/monaco-emacs/dist/monaco-emacs.js
. - The extension will be available as
MonacoEmacs
onwindow
const monaco = window.monaco;
const { EmacsExtension } = window.MonacoEmacs;
const editorNode = document.getElementById('editor');
const statusNode = document.getElementById('statusbar');
const editor = monaco.editor.create(editor);
const emacsMode = new EmacsExtension(editor);
emacsMode.onDidMarkChange((ev: boolean) => {
statusNode.textContent = ev ? 'Mark Set!' : 'Mark Unset';
});
emacsMode.onDidChangeKey((str) => {
statusNode.textContent = str;
});
emacsMode.start();
// If you want to remove the attached bindings, call
emacsMode.dispose();
import { unregisterKey } from 'monaco-emacs';
unregisterKey('Tab');
import { getAllMappings } from 'monaco-emacs';
console.log(getAllMappings());
If you are following the official guide and integrating the AMD version of monaco-editor
, you can follow this -
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<div id="container" style="width:800px;height:600px;border:1px solid grey"></div>
<div id="status"></div>
<script src="https://unpkg.com/monaco-editor/min/vs/loader.js"></script>
<script>
require.config({
paths: {
'vs': 'https://unpkg.com/monaco-editor/min/vs',
'monaco-emacs': 'https://unpkg.com/monaco-emacs/dist/monaco-emacs',
}
});
require(['vs/editor/editor.main', 'monaco-emacs'], function(a, MonacoEmacs) {
var editor = monaco.editor.create(document.getElementById('container'), {
value: [
'function x() {',
'\tconsole.log("Hello world!");',
'}'
].join('\n'),
language: 'javascript'
});
var statusNode = document.getElementById('status');
var emacsMode = new MonacoEmacs.EmacsExtension(editor);
emacsMode.onDidMarkChange(function(ev) {
statusNode.textContent = ev ? 'Mark Set!' : 'Mark Unset';
});
emacsMode.onDidChangeKey(function(str) {
statusNode.textContent = str;
});
emacsMode.start();
// remove emacs mode by calling
// emacsMode.dispose();
});
</script>
</body>
</html>
Please report any inconsistencies or missing key bindings.