diff --git a/README.md b/README.md
index 38eb7f4..6f15fd4 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,8 @@ This page provides an overview of functionality you might like to look at the [O
Various convenience functions are provided:
+* `functions()` - List the convenience functions and methods provided
+
* `source(f:string)` - Open the markdown file called f and execute the code in it
* `command(s:string)` - Run a command
* `newCommand(function name_with_underscores { ...)` - Create a new command with name "new name" which runs the function new_name
diff --git a/fuzzy.ts b/fuzzy.ts
index 3ea088d..02e1b5c 100644
--- a/fuzzy.ts
+++ b/fuzzy.ts
@@ -42,5 +42,4 @@ class FuzzySelector extends FuzzySuggestModal {
this.reject(e)
}
}
-
}
diff --git a/main.ts b/main.ts
index 81cf692..c1b7a84 100644
--- a/main.ts
+++ b/main.ts
@@ -27,6 +27,7 @@ export default class ReplPlugin extends Plugin {
scope: Scope
history: History
initLoaded: boolean = false
+ function_docs: Array = []
runInCodeBlock(el: HTMLElement, input: string) {
this.updateScopeApp()
@@ -91,8 +92,13 @@ export default class ReplPlugin extends Plugin {
}
-
-
+ addToScopeWithDoc(name: string, obj: any, doc: string) {
+ this.scope.add(name, obj)
+ let full_doc = `${name} -- ${doc}`
+ if (this.function_docs.indexOf(full_doc) == -1) {
+ this.function_docs.push(full_doc)
+ }
+ }
updateScopeApp() {
let path = this.app.workspace.getLeaf().view.path
@@ -103,51 +109,176 @@ export default class ReplPlugin extends Plugin {
let vaultPath = this.app.vault.adapter.basePath
this.scope.add("vaultPath", vaultPath)
- this.scope.add("dir", dir)
- this.scope.add("fuzzyDir", fuzzyDir.bind(null, this.app))
- this.scope.add("clipboardGet", clipboardGet)
- this.scope.add("clipboardPut", clipboardPut)
+ this.addToScopeWithDoc(
+ "functions", functions.bind(null, this, this.app),
+ "Search convenience functions and variables provided by Plugin REPL"
+ )
+ this.addToScopeWithDoc(
+ "dir", dir,
+ "Return a list of the attributes of the Object"
+ )
+ this.addToScopeWithDoc(
+ "fuzzyDir", fuzzyDir.bind(null, this.app),
+ "Popup a fuzzy search listing the attributes of an Object"
+ )
+ this.addToScopeWithDoc(
+ "clipboardGet", clipboardGet,
+ "Get the contents of the clipboard"
- this.scope.add("renameFile", renameFile.bind(null, this.app))
- this.scope.add("replRequire", replRequire.bind(null, vaultPath))
+ )
+ this.addToScopeWithDoc(
+ "clipboardPut", clipboardPut,
+ "Put a string in the clipboard"
+ )
- this.scope.add("renameCurrent", renameFile.bind(null, this.app, path))
+ this.addToScopeWithDoc(
+ "renameFile", renameFile.bind(null, this.app),
+ "(a:string, b: string) Move the markdown note called a to b"
+ )
+ this.addToScopeWithDoc(
+ "replRequire", replRequire.bind(null, vaultPath),
+ "Import the JavaScript module installed with plugin-import-module."
+ )
- this.scope.add("openSetting", openSetting.bind(null, this.app))
- this.scope.add("runProc", runProc)
- this.scope.add("newCommand", this.makeNewCommand())
- this.scope.add("source", this.makeSource(this.app))
- this.scope.add("plugin", plugin.bind(null, this.app))
- this.scope.add("promptString", promptString.bind(null, this.app))
- this.scope.add("command", command.bind(null, this.app))
- this.scope.add("readFile", readFile.bind(null, this.app))
- this.scope.add("writeFile", writeFile.bind(null, this.app))
- this.scope.add("appendToFile", appendToFile.bind(null, this.app))
+ this.addToScopeWithDoc(
+ "renameCurrent", renameFile.bind(null, this.app, path),
+ "Change the note title."
+ )
- this.scope.add("getDv", getDv.bind(null, this.app))
- this.scope.add("message", message)
- this.scope.add("openFile", openFile.bind(null, this.app))
- this.scope.add("fuzzySelect", fuzzySelect.bind(null, this.app))
- this.scope.add("openUrl", openUrl)
+ this.addToScopeWithDoc(
+ "openSetting", openSetting.bind(null, this.app),
+ "Open a setting tab with the name. (See the names in settings for possible values)"
+
+ )
+ this.addToScopeWithDoc(
+ "runProc", runProc,
+ "(s: string) or (['prog', 'arg1', 'args2']) run a program and return its output"
+ )
+ this.addToScopeWithDoc(
+ "newCommand", this.makeNewCommand(),
+ "Given a function called command_name_with_underscores create a new command that runs this function"
+ )
+ this.addToScopeWithDoc(
+ "source", this.makeSource(this.app),
+ "(note_name:string) load (import / require) the note with title note_name and execute it with plugin repl"
+ )
+ this.addToScopeWithDoc(
+ "plugin", plugin.bind(null, this.app),
+ "(id: string) Return the plugin object for the plugin with id (see app.plugins.plugins) to get names ")
+ this.addToScopeWithDoc(
+ "promptString", promptString.bind(null, this.app),
+ "(prompt?: string) Read a string from a popup window "
+ )
+ this.addToScopeWithDoc(
+ "command", command.bind(null, this.app),
+ "(name: string) Run the command called string (Call commands for a list)"
+
+ )
+ this.addToScopeWithDoc(
+ "readFile", readFile.bind(null, this.app),
+ "(title: string) Read the contents of the file with the title name"
+
+ )
+ this.addToScopeWithDoc(
+ "writeFile", writeFile.bind(null, this.app),
+ "(title: string, contents: string) Write the contents to the file with a title"
+ )
+ this.addToScopeWithDoc(
+ "appendToFile", appendToFile.bind(null, this.app),
+ "(title: string, content: string) Add the content to the note with a titel"
+ )
+
+ this.addToScopeWithDoc(
+ "getDv", getDv.bind(null, this.app),
+ "Get hold of the dataview object for querying pages"
+
+ )
+ this.addToScopeWithDoc(
+ "message", message,
+ "(msg: string) Popup a message with a notification message msg"
+ )
+ this.addToScopeWithDoc(
+ "openFile", openFile.bind(null, this.app),
+ "(title: string) Open the file with title string in Obsidian"
+ )
+ this.addToScopeWithDoc(
+ "fuzzySelect", fuzzySelect.bind(null, this.app),
+ "(options: Array, prompt?: string) Select from options with fuzzy search"
+
+ )
+ this.addToScopeWithDoc(
+ "openUrl", openUrl,
+ "(url: string) Open this url in a browser "
+ )
}
updateScopeEditor(editor: Editor, view: MarkdownView) {
- this.scope.add("popup", popup.bind(null, this.app, editor))
- this.scope.add("endOfLine", endOfLine.bind(null, editor))
- this.scope.add("lineNumber", lineNumber.bind(null, editor))
- this.scope.add("bufferString", bufferString.bind(null, editor))
- this.scope.add("point", point.bind(null, editor))
- this.scope.add("mark", mark.bind(null, editor))
- this.scope.add("insert", insert.bind(null, editor))
- this.scope.add("kill", kill.bind(null, editor))
- this.scope.add("lineAtPoint", lineAtPoint.bind(null, editor))
- this.scope.add("wordAtPoint", wordAtPoint.bind(null, editor))
- this.scope.add("pointMin", pointMin)
- this.scope.add("pointMax", pointMax.bind(null, editor))
- this.scope.add("selection", selection.bind(null, editor))
- this.scope.add("forwardChar", forwardChar.bind(null, editor))
- this.scope.add("editor", editor)
- this.scope.add("view", view)
+ this.addToScopeWithDoc(
+ "popup", popup.bind(null, this.app, editor),
+ "(message: string) Open a popup showing a message"
+ )
+ this.addToScopeWithDoc(
+ "endOfLine", endOfLine.bind(null, editor),
+ "Go the end of the line"
+ )
+ this.addToScopeWithDoc(
+ "lineNumber", lineNumber.bind(null, editor),
+ "Return the current line number"
+ )
+ this.addToScopeWithDoc(
+ "bufferString", bufferString.bind(null, editor),
+ "Return the content of the buffer. If you provide (start, end) cursor positions return the string between start end"
+ )
+ this.addToScopeWithDoc(
+ "point", point.bind(null, editor),
+ "Return the current cursor position"
+ )
+ this.addToScopeWithDoc(
+ "mark", mark.bind(null, editor),
+ "Return the cursor at the beginning of the current selection"
+ )
+ this.addToScopeWithDoc(
+ "insert", insert.bind(null, editor),
+ "(s: string) Insert a string at the current point"
+ )
+ this.addToScopeWithDoc(
+ "kill", kill.bind(null, editor),
+ "(start: Position, end: Position) Delete the region between start and end"
+ )
+ this.addToScopeWithDoc(
+ "lineAtPoint", lineAtPoint.bind(null, editor),
+ "Return the content of the line where the cursor is. Optionally takes a cursor position as an argument"
+ )
+ this.addToScopeWithDoc(
+ "wordAtPoint", wordAtPoint.bind(null, editor),
+ "Returns the word where the cursor is. Optionally takes a cursor position as an argument"
+
+ )
+ this.addToScopeWithDoc(
+ "pointMin", pointMin,
+ "Returns the cursor position at the beginning of the note"
+ )
+ this.addToScopeWithDoc(
+ "pointMax", pointMax.bind(null, editor),
+ "Returns the cursor positoin at the beginning of the note"
+ )
+ this.addToScopeWithDoc(
+ "selection", selection.bind(null, editor),
+ "Returns the text of the selection."
+ )
+ this.addToScopeWithDoc(
+ "forwardChar", forwardChar.bind(null, editor),
+ "(count?: number) Move count (or 1) character forward"
+
+ )
+ this.addToScopeWithDoc(
+ "editor", editor,
+ "The editor object for the note. (See Obsidian api)"
+ )
+ this.addToScopeWithDoc(
+ "view", view,
+ "The view for the current not (See Obsidian api)"
+ )
}
makeNewCommand() {
@@ -445,9 +576,9 @@ async function renameFile(app: App, current: string, target: string) {
}
function replRequire(vaultPath: string, name: string) {
- let modPath = vaultPath + "/plugin-repl-imports/imports_bundled.js"
+ const modPath = vaultPath + "/plugin-repl-imports/imports_bundled.js"
delete window.require.cache[modPath]
- let mod = window.require(modPath)
+ const mod = window.require(modPath)
return mod.packages[name]
}
@@ -460,3 +591,7 @@ function renderCodeBlock(plugin: ReplPlugin, source: string, el: HTMLElement, ct
el.appendText(e.stack)
}
}
+
+function functions(plugin: ReplPlugin, app: App) {
+ fuzzySelect(app, plugin.function_docs)
+}