Obsidian 批量命令快捷键实现
3 min read

Obsidian 批量命令快捷键实现

一种通过 js 脚本实现 Obsidian 支持批量命令绑定快捷键的方法
Obsidian 批量命令快捷键实现
photo by https://unsplash.com/photos/kt-wA0GDFq8

出于快速记录的需要,需要 Obsidian 支持一种能力:一个快捷键实现组合操作,例如 cmd(⌘) + shift(⇧) + u 实现激活弹窗(hover editor)操作然后打开 memos 记录窗口。

对这个能力进行一个抽象:实现 obsidian 支持批量命令绑定快捷键。

1. Obsidian 调试命令

以 ⌘ + ⇧ + u 实现打开弹窗然后打开 memos 操作为例,首先先看一下没有快捷键的时候是怎么实现的:

  1. ⌘ + p 打开 obsidian command palette,输入 open new hover editor 确认;
  2. ⌘ + p 打开 obsidian command palette,输入 open memos 确认;

根据上面的操作可以确认一点,obsidian 提供了我们需要 command,下面我们通过 Console 进行调试确认 command object 信息:

  1. 打开 Obsidian Console,⌥ + ⌘ + I
  2. 在 Console 中如输入调试代码:app.commands.listCommands()
  3. 根据 listCommands() 打印的 command 信息确认 command ID:
{
    "id": "obsidian-hover-editor:open-new-popover",
    "name": "Hover Editor: Open new Hover Editor"
}

{
    "id": "obsidian-memos:open-memos",
    "name": "Obsidian Memos: Open Memos",
}
  1. 在 Console 中验证 command 是否可执行,执行如下命令:
app.commands.executeCommandById("obsidian-hover-editor:open-new-popover")
app.commands.executeCommandById("obsidian-memos:open-memos")

2. QuickAdd 命令脚本

根据 QuickAdd 的文档编写批量命令的 js 脚本,如下:

'use strict'

const OPTION_1 = "Message";
const OPTION_2 = "Type";
const OPTION_3 = "Debug";
const debug = (msg) => console.log(msg);
module.exports = {
    entry: start,
    settings: {
        name: "Startup Memos Quickly for Noting",
        options: {
            [OPTION_1]: {
                type: "text",
                defaultValue: "quick memos in new pane",
            },
            [OPTION_2]: {
                type: "text",
                // show memo in popver pane if the value if "popover",
                // and other values will be the default split display.
                defaultValue: "popover",
            },
            [OPTION_3]: {
                type: "toggle",
                defaultValue: false,
            },
        },
    },
};

async function start(params, settings) {
    // debug logging
    if (settings[OPTION_3]) {
        debug(settings);
    }

    if (settings[OPTION_2] === "popover") {
        await params.app.commands.executeCommandById("obsidian-memos:show-memos-in-popover");
    } else {
        await params.app.commands.executeCommandById("workspace:split-vertical");
        await params.app.commands.executeCommandById("obsidian-memos:open-memos");
    }
    new Notice(settings[OPTION_1]);
}

3. 宏录制

  1. QuickAdd 宏管理器中增加宏(Macro Name 自定义即可)
QuickAdd New Macro
  1. 配置 Macro 执行脚本,在 User Script 中选定 js 脚本文件
QuickAdd Macro Configuration
  1. 新建 Macro Choice 之后选择新建的宏
QuickAdd New Choice
QuickAdd Choice Select Defined Macro
  1. 为 Macro Choice 增加快捷键,在 hotkey 中为 quickmemos command 绑定快捷键 ⌘ + ⇧ + u
QuickAdd Add Choice to Command
QuickAdd Command Set Keyboard Shortcut

4. 涉及插件

  1. QuickAdd
  2. Hotkeys++
  3. Obsidian Memo
  4. Hover Editor

References

  1. chhoumann/quickadd: QuickAdd for Obsidian
  2. Getting Started | QuickAdd

Public discussion

足迹