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

适用全部类型文件。

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

效果 GIF

20240208

注: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))

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

原文选区以正则匹配判断,见变量 rgx

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

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

效果 GIF

F8 是展示设置的快捷键。

20240510_110907

注:老代码了,请更多参考思路。

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