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

View File

@ -33,12 +33,17 @@
"homepage": "https://github.com/tidalcycles/strudel#readme", "homepage": "https://github.com/tidalcycles/strudel#readme",
"dependencies": { "dependencies": {
"@codemirror/autocomplete": "^6.6.0", "@codemirror/autocomplete": "^6.6.0",
"@codemirror/commands": "^6.0.0",
"@codemirror/lang-javascript": "^6.1.7", "@codemirror/lang-javascript": "^6.1.7",
"@codemirror/language": "^6.0.0",
"@codemirror/lint": "^6.0.0",
"@codemirror/search": "^6.0.0",
"@codemirror/state": "^6.2.0", "@codemirror/state": "^6.2.0",
"@codemirror/view": "^6.10.0", "@codemirror/view": "^6.10.0",
"@lezer/highlight": "^1.1.4", "@lezer/highlight": "^1.1.4",
"@replit/codemirror-emacs": "^6.0.1", "@replit/codemirror-emacs": "^6.0.1",
"@replit/codemirror-vim": "^6.0.14", "@replit/codemirror-vim": "^6.0.14",
"@replit/codemirror-vscode-keymap": "^6.0.2",
"@strudel.cycles/core": "workspace:*", "@strudel.cycles/core": "workspace:*",
"@strudel.cycles/transpiler": "workspace:*", "@strudel.cycles/transpiler": "workspace:*",
"@strudel.cycles/webaudio": "workspace:*", "@strudel.cycles/webaudio": "workspace:*",

View File

@ -1,8 +1,11 @@
import { autocompletion } from '@codemirror/autocomplete'; import { autocompletion } from '@codemirror/autocomplete';
import { selectAll } from '@codemirror/commands';
import { Prec } from '@codemirror/state';
import { javascript, javascriptLanguage } from '@codemirror/lang-javascript'; 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 { emacs } from '@replit/codemirror-emacs';
import { vim } from '@replit/codemirror-vim'; import { vim } from '@replit/codemirror-vim';
import { vscodeKeymap } from '@replit/codemirror-vscode-keymap';
import _CodeMirror from '@uiw/react-codemirror'; import _CodeMirror from '@uiw/react-codemirror';
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import strudelTheme from '../themes/strudel-theme'; import strudelTheme from '../themes/strudel-theme';
@ -61,11 +64,28 @@ export default function CodeMirror({
[onSelectionChange], [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(() => { const extensions = useMemo(() => {
let _extensions = [...staticExtensions]; let _extensions = [...staticExtensions];
let bindings = { let bindings = {
vim, vim,
emacs, emacs,
vscodeExtension,
}; };
if (bindings[keybindings]) { if (bindings[keybindings]) {
@ -78,6 +98,8 @@ export default function CodeMirror({
_extensions.push(autocompletion({ override: [] })); _extensions.push(autocompletion({ override: [] }));
} }
_extensions.push([keymap.of({})]);
if (isLineWrappingEnabled) { if (isLineWrappingEnabled) {
_extensions.push(EditorView.lineWrapping); _extensions.push(EditorView.lineWrapping);
} }

523
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -436,7 +436,7 @@ function SettingsTab({ scheduler }) {
<ButtonGroup <ButtonGroup
value={keybindings} value={keybindings}
onChange={(keybindings) => settingsMap.setKey('keybindings', keybindings)} onChange={(keybindings) => settingsMap.setKey('keybindings', keybindings)}
items={{ codemirror: 'Codemirror', vim: 'Vim', emacs: 'Emacs' }} items={{ codemirror: 'Codemirror', vim: 'Vim', emacs: 'Emacs', vscodeExtension: 'VSCode' }}
></ButtonGroup> ></ButtonGroup>
</FormItem> </FormItem>
<FormItem label="Panel Position"> <FormItem label="Panel Position">