QuickAdd 文件列表双击 & 快速切换选单 以第三方应用打开 PDF 图片 文件夹

适用全部类型文件。

实例一:按住 Alt 键双击文件列表

基本配置参 QuickAdd JS & Templater JS 简介及相互修改
“QuickAdd Macro 加载 QuickAdd Capture”。

在默认应用打开双击文件,在系统文件资源管理器打开双击文件夹。

效果 GIF,点击展开

20240208

js quickadd 代码

注:Obsidian v1.6.2 似乎更改了对应元素类名,可自行尝试寻找更改为新类名,不再维护。

const uniEv = (id, item, type, func)=> { item[id] && item.removeEventListener(type, item[id]); item[id] = func; item.addEventListener(type, item[id]) }
uniEv('ev', document.querySelector('.tree-item.nav-folder.mod-root'), 'dblclick', ev=> ev.altKey && app.openWithDefaultApp(ev.target.dataset.path))

代码中 ev.altKey && 即设置为按住 Alt 键的原理。

可参 JavaScript 键盘事件,附完整键码表 修改为其他键,或自行设置更多样的触发控制。

  • 注意:双击文件位置需在名称(如图红框)外。image

  • 部分插件可能也对文件列表有 Alt + Click 快捷键,注意防冲突。

  • 也许你还看了其他 QuickAdd 帖子。如果你有基础,可自行删除重复函数,把全部需要静默加载的代码放在同 Macro 里同一个 Capture,否则就一个 Capture 一组代码分开放。配置教程第 5 步选择文档可以选同一个。

实例二:快速切换选单 & 原文选区

基本配置参 QuickAdd JS & Templater JS 简介及相互修改“QuickAdd Capture 加载内部代码”。

原文选区以正则匹配判断,见代码 , rgx = 后部分。

无选中或选中内容不匹配,弹出快速切换选单,当前活动文档始终位于第一项。
先选择文档,再选择 VSCode 打开或显示在系统文件资源管理器。
若用 VSCode 打开,当所选文档为当前活动文档时,将跳转到编辑器同一行。

选中内容匹配,以默认应用打开所选。通常用于打开文中图片。

效果

F8 是展示设置的快捷键。

20240510_110907

js quickadd 代码
const getFLD = (str, thisPath)=> app.metadataCache.getFirstLinkpathDest(str, thisPath)?.path
, pin = (arr, x)=> {
  const pin = arr.indexOf(x); if (pin > -1) { arr.splice(pin, 1); arr.unshift(x) }; return arr
}
, rgx = /^!|\[(?!\[).*?\]\(|\)$|\[\[|\]\]|\|.*/g
, suggest = arr=> this.quickAddApi.suggester(p=> p, arr)
, file = app.workspace.getActiveFile(), files = app.vault.getFiles()
, selected = String(getSelection()), { exec } = require('child_process')
, act = app.workspace.activeEditor; let line; if (act) line = act.editor.getCursor().line
if (selected.match(rgx)) {
  app.openWithDefaultApp(getFLD(selected.replace(rgx, ''), file.path))
} else {
  const path = await suggest(pin(files.map(p=> p.path), file.path)); if (!path) return
  const fullPath = app.vault.adapter.getFullPath(path), sus = ['VSCode', '所在目录']
  switch (await suggest(sus)) {
  case sus[0]: exec(`code -g "${fullPath} :${path==file.path?line+1:1}"`); break
  case sus[1]: app.showInFolder(path); break
}}

相关: