Editor provider

This commit is contained in:
2023-05-29 18:12:23 -06:00
parent 5f5c63bdbc
commit 9d6c6432f0
4 changed files with 93 additions and 6 deletions

View File

@@ -9,8 +9,24 @@
"homepage": "",
"categories": [],
"extensionPack": [],
"dependencies": {
"monaco-editor": "^0.38.0"
},
"publisher": "",
"contributes": {},
"contributes": {
"customEditors": [
{
"selector": [
{
"filenamePattern": "tct.txt"
}
],
"priority": "default",
"viewType": "tct.splitView",
"displayName": "TCT Split View"
}
]
},
"engines": {
"vscode": "^1.4.0"
},
@@ -19,8 +35,5 @@
},
"version": "0.0.0",
"activationEvents": [],
"displayName": "",
"dependencies": {
"monaco-editor": "^0.38.0"
}
}
"displayName": ""
}

View File

@@ -0,0 +1,10 @@
import kiss.Prelude;
import kiss.List;
import vscode.*;
import js.lib.Promise;
import sys.io.File;
using StringTools;
@:build(kiss.Kiss.build())
class EditorProvider {}

View File

@@ -0,0 +1,60 @@
(loadFrom "kiss-vscode-api" "src/Util.kiss")
// Based on https://github.com/microsoft/vscode-extension-samples/blob/main/custom-editor-sample/src/catScratchEditor.ts
(function register [context]
(set Prelude.printStr ->s (infoMessage s))
(let [provider (new EditorProvider context)]
(Vscode.window.registerCustomEditorProvider "tct.splitView" provider)))
(defNew [&prop :ExtensionContext context])
(method :Promise<Void> resolveCustomTextEditor [:TextDocument document :WebviewPanel webviewPanel :CancellationToken _token]
(set webviewPanel.webview.options (object enableScripts true))
(set webviewPanel.webview.html (htmlForWebview webviewPanel.webview))
(webviewPanel.webview.onDidReceiveMessage
->:Void [e]
null)
(webviewPanel.onDidChangeViewState
->e {
(unless e.webviewPanel.visible null)
})
null)
(method :String htmlForWebview [:Webview webview]
(let [monacoDir
(Uri.joinPath (Uri.parse this.context.extensionUri) "node_modules" "monaco-editor" "min" "vs")
requireConfigDir
(webview.asWebviewUri monacoDir)
cssUri
(webview.asWebviewUri (Uri.joinPath monacoDir "editor" "editor.main.css"))
monacoLoaderUri
(webview.asWebviewUri (Uri.joinPath monacoDir "loader.js"))
monacoEditorNlsUri
(webview.asWebviewUri (Uri.joinPath monacoDir "editor" "editor.main.nls.js"))
monacoEditorUri
(webview.asWebviewUri (Uri.joinPath monacoDir "editor" "editor.main.js"))
editorScriptUri
(webview.asWebviewUri (Uri.joinPath (Uri.parse this.context.extensionUri) "bin" "editor.js"))]
"<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\">
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
<link
rel=\"stylesheet\"
data-name=\"vs/editor/editor.main\"
href=\"${cssUri}\" />
</head>
<body>
<script src=\"${editorScriptUri}\"></script>
<script>
var require = { paths: { vs: \"${requireConfigDir}\" } };
</script>
<script src=\"${monacoLoaderUri}\"></script>
<script src=\"${monacoEditorNlsUri}\"></script>
<script src=\"${monacoEditorUri}\"></script>
</body>
</html>"))

View File

@@ -4,6 +4,10 @@
@(:expose "activate")
(function activate [:ExtensionContext context]
(printThroughInfoMessage)
(context.subscriptions.push
(EditorProvider.register context))
// Add your extension's commands here with (defCommand <...>):
// (defCommand context exampleCommand "An example command for your extension" "C-; C-1" [] (doSomething))