integrated vscode bindings

This commit is contained in:
Dsm0
2023-11-01 17:14:22 -04:00
parent 248757ac3f
commit d4c12dcef4
4 changed files with 347 additions and 207 deletions
+23 -1
View File
@@ -1,8 +1,11 @@
import { autocompletion } from '@codemirror/autocomplete';
import { selectAll } from '@codemirror/commands';
import { Prec } from '@codemirror/state';
import { javascript, javascriptLanguage } from '@codemirror/lang-javascript';
import { EditorView } from '@codemirror/view';
import { ViewPlugin, EditorView, keymap } from '@codemirror/view';
import { emacs } from '@replit/codemirror-emacs';
import { vim } from '@replit/codemirror-vim';
import { vscodeKeymap } from '@replit/codemirror-vscode-keymap';
import _CodeMirror from '@uiw/react-codemirror';
import React, { useCallback, useMemo } from 'react';
import strudelTheme from '../themes/strudel-theme';
@@ -61,11 +64,28 @@ export default function CodeMirror({
[onSelectionChange],
);
const vscodePlugin = ViewPlugin.fromClass(
class {
constructor(view) {}
},
{
provide: (plugin) => {
return Prec.highest(keymap.of([
...vscodeKeymap
,
]));
},
},
);
const vscodeExtension = (options) => [vscodePlugin].concat(options ?? []);
const extensions = useMemo(() => {
let _extensions = [...staticExtensions];
let bindings = {
vim,
emacs,
vscodeExtension,
};
if (bindings[keybindings]) {
@@ -78,6 +98,8 @@ export default function CodeMirror({
_extensions.push(autocompletion({ override: [] }));
}
_extensions.push([keymap.of({})]);
if (isLineWrappingEnabled) {
_extensions.push(EditorView.lineWrapping);
}