Support creating a slashCommand as a command shortcut

pull/951/head
Zef Hemel 2024-07-14 19:57:06 +02:00
parent a9ed194fa1
commit e050c7a4cf
4 changed files with 41 additions and 5 deletions

View File

@ -16,10 +16,15 @@ export type Notification = {
export type PanelMode = number;
export type Shortcut = {
// Command we're creating the shortcut for
command: string;
// (Re)bind to keyboard shortcut
key?: string;
mac?: string;
// Bind to slash command
slashCommand?: string;
// Tweak priority in command palette
priority?: number;
command: string;
};
export type ActionButton = {

View File

@ -249,6 +249,9 @@ export class Client {
type: "settings-loaded",
settings: this.settings,
});
this.clientSystem.slashCommandHook.buildAllCommands(
this.clientSystem.system,
);
}
private async initSync() {

View File

@ -13,6 +13,7 @@ import {
} from "../../plug-api/types.ts";
import { safeRun } from "$lib/async.ts";
import { SlashCommandDef, SlashCommandHookT } from "$lib/manifest.ts";
import { parseCommand } from "$common/command.ts";
export type AppSlashCommand = {
slashCommand: SlashCommandDef;
@ -49,6 +50,26 @@ export class SlashCommandHook implements Hook<SlashCommandHookT> {
});
}
}
if (this.editor.settings?.shortcuts) {
// Add slash commands for shortcuts that configure them
for (const shortcut of this.editor.settings.shortcuts) {
if (shortcut.slashCommand) {
const parsedCommand = parseCommand(shortcut.command);
this.slashCommands.set(shortcut.slashCommand, {
slashCommand: {
name: shortcut.slashCommand,
description: parsedCommand.alias || parsedCommand.name,
},
run: () => {
return this.editor.runCommandByName(
parsedCommand.name,
parsedCommand.args,
);
},
});
}
}
}
}
// Completer for CodeMirror

View File

@ -1,5 +1,5 @@
#meta
/ind
This page contains settings for configuring SilverBullet and its Plugs. Changing any of these will go into effect immediately in most cases except `indexPage` which requires a page reload.
```yaml
@ -41,12 +41,19 @@ actionButtons:
# description: "Go to the previous page"
# mobile: true # Only show on mobile devices, set to false to show only on desktop
# Override keyboard shortcuts and command priority
# Create keyboard or slash command shortcuts for commands
shortcuts:
- command: "Navigate: Center Cursor" # But a command name is also supported
# Map a key to a command
- command: "{[Navigate: Center Cursor]}"
key: "Alt-x"
# Map a slash command (e.g. `/indent`) to a command
- command: "{[Outline: Move Right]}"
slashCommand: "indent"
- command: "{[Outline: Move Left]}"
slashCommand: "outdent"
# Bump a command's priority in the command palette
- command: "{[Upload: File]}"
priority: 1 # Make sure this appears at the top of the list in the command palette
priority: 1
# Page decorations
pageDecorations: