Major mini editor refactoring (#225)
Replaces most editing components with CM components, enabling vim mode and completions everywhere Fixes #205 Fixes #221 Fixes #222 Fixes #223
This commit is contained in:
+7
-52
@@ -3,29 +3,6 @@ import { EditorView, Transaction } from "../deps.ts";
|
||||
import { SysCallMapping } from "../../plugos/system.ts";
|
||||
import { FilterOption } from "../../common/types.ts";
|
||||
|
||||
type SyntaxNode = {
|
||||
name: string;
|
||||
text: string;
|
||||
from: number;
|
||||
to: number;
|
||||
};
|
||||
|
||||
function ensureAnchor(expr: any, start: boolean) {
|
||||
let _a;
|
||||
const { source } = expr;
|
||||
const addStart = start && source[0] != "^",
|
||||
addEnd = source[source.length - 1] != "$";
|
||||
if (!addStart && !addEnd) return expr;
|
||||
return new RegExp(
|
||||
`${addStart ? "^" : ""}(?:${source})${addEnd ? "$" : ""}`,
|
||||
(_a = expr.flags) !== null && _a !== void 0
|
||||
? _a
|
||||
: expr.ignoreCase
|
||||
? "i"
|
||||
: "",
|
||||
);
|
||||
}
|
||||
|
||||
export function editorSyscalls(editor: Editor): SysCallMapping {
|
||||
const syscalls: SysCallMapping = {
|
||||
"editor.getCurrentPage": (): string => {
|
||||
@@ -155,26 +132,6 @@ export function editorSyscalls(editor: Editor): SysCallMapping {
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
"editor.matchBefore": (
|
||||
_ctx,
|
||||
regexp: string,
|
||||
): { from: number; to: number; text: string } | null => {
|
||||
const editorState = editor.editorView!.state;
|
||||
const selection = editorState.selection.main;
|
||||
const from = selection.from;
|
||||
if (selection.empty) {
|
||||
const line = editorState.doc.lineAt(from);
|
||||
const start = Math.max(line.from, from - 250);
|
||||
const str = line.text.slice(start - line.from, from - line.from);
|
||||
const found = str.search(ensureAnchor(new RegExp(regexp), false));
|
||||
// console.log("Line", line, start, str, new RegExp(regexp), found);
|
||||
return found < 0
|
||||
? null
|
||||
: { from: start + found, to: from, text: str.slice(found) };
|
||||
}
|
||||
return null;
|
||||
},
|
||||
"editor.dispatch": (_ctx, change: Transaction) => {
|
||||
editor.editorView!.dispatch(change);
|
||||
},
|
||||
@@ -191,18 +148,16 @@ export function editorSyscalls(editor: Editor): SysCallMapping {
|
||||
): boolean => {
|
||||
return confirm(message);
|
||||
},
|
||||
"editor.enableReadOnlyMode": (_ctx, enabled: boolean) => {
|
||||
"editor.getUiOption": (_ctx, key: string): any => {
|
||||
return (editor.viewState.uiOptions as any)[key];
|
||||
},
|
||||
"editor.setUiOption": (_ctx, key: string, value: any) => {
|
||||
editor.viewDispatch({
|
||||
type: "set-editor-ro",
|
||||
enabled,
|
||||
type: "set-ui-option",
|
||||
key,
|
||||
value,
|
||||
});
|
||||
},
|
||||
"editor.getVimEnabled": (): boolean => {
|
||||
return editor.enableVimMode;
|
||||
},
|
||||
"editor.setVimEnabled": (_ctx, enabled: boolean) => {
|
||||
editor.setVimMode(enabled);
|
||||
},
|
||||
};
|
||||
|
||||
return syscalls;
|
||||
|
||||
Reference in New Issue
Block a user