在 Obsidian 点读英文单词

英文单词书写由空格分隔,因此双击英文单词会自动选中该单词。

只需要发音:有道 API + QuickAdd

得益于 DataviewJS 打字背诵练习 发现的有道 API。

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

js quickadd 代码
document.ondblclick = ()=> {
  const str = String(getSelection()), audio = document.createElement('audio'); if (!str) return
  audio.src = `https://dict.youdao.com/dictvoice?le=en&audio=${str}`; audio.autoplay = 1
}
  • 首次重启 Ob 后,为 document 添加双击监听。
  • HTML <audio> 标签指定 autoplay 自动发音。
  • 指定有道 API 语种为 en,所以只有英语单词才发音。

需要发音和查词:沙拉查词

image

效果 GIF,点击展开

20240506_230450

沙拉查词(Saladict)是一款多语种多词典聚合查词的开源浏览器扩展,支持自动发音、添加生词及 配合 Anki 制卡。为在浏览器外使用,需按照 Saladict 教程 - 浏览器外划词 做好设置给予权限。教程帖里也介绍了其他平台借助其他工具在浏览器外使用的方法。

本话题介绍供对照参考,如有遗漏以官方教程为准:

右键扩展图标的设置

imageimage

  • 基本选项 - 启用“后台保持运行”
  • 快捷查词 - 全部启用
  • 发音设置 - 英文自动发音 - 朗文词典或有道词典,美式口音(朗文词典好听!)
  • 权限管理 - 启用“读取剪贴板”
浏览器管理扩展的设置

imageimage
image

AutoHotKey(AHK)是一款创建热键的脚本语言和 Windows 开源软件,楼主使用 v1 版本。

总的来说,你需要复制功能函数部分的代码,然后再选择或自定义设置热键部分的代码。

下载安装 AHK v1.1,依序粘贴代码到一个 .txt,将后缀改为 .ahk,双击用 AHK 运行,脚本就会开始监听了。

你可以为这个脚本创建快捷方式,将快捷方式移动到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,实现开机自启。

功能函数部分
act(exe) {
  WinGet, Process, ProcessName, A
  if (Process == exe)   ; 当前活动进程名是否为...
    return 1
}
obSaladict() {
  if !act("Obsidian.exe")
    return
  prev := ClipboardAll  ; 剪贴板内容附给变量 prev
  Clipboard :=          ; 清空剪贴板
  Send ^c               ; 模拟 Ctrl+C 复制
  ClipWait              ; 等待剪贴板出现内容
  RegExMatch(Clipboard, "[a-zA-Z]+", m)
  if m {                ; 匹配正则 /[a-zA-Z]+/
    Clipboard := m      ; 首个匹配值写入剪贴板
    Send !+t            ; 模拟 Alt+Shift+t
  }                     ; 即楼主查词全局快捷键
  Clipboard := prev     ; 恢复剪贴板内容
  prev :=               ; 释放 prev
}
  • 代码完成的部分:模拟复制键 - 模拟浏览器调用沙拉查词的全局快捷键。
    沙拉查词扩展完成的部分:读取剪贴板 - 在独立窗口搜索剪贴板内容。
  • 清空和恢复操作使查词不会污染剪贴板。
  • 因为是在 Obsidian 点读,控制了只会在 Obsidian 起效。
  • 因为是点读英文单词,用正则控制仅内容包含英文时起效。

设置热键部分就比较灵活了。先试试最普通的 AHK 设置:

#C::obSaladict()

现在,你可以划选或双击选中单词,再按下 Win + C 键,代码执行,就完成了发音和查词。

当然,这样可能不够点读。让我们实现一个普通的双击:

双击的代码
last := 0
~LButton::
curr := A_TickCount
if (curr - last <= 300) ; 两次热键间隔毫秒
  obSaladict()
last := curr
Return
  • ~LButton~ 表不覆盖原始功能,组合键中只要有一个就都会起作用。这里保留了左键功能,比如点击等功能。

现在,只需左键双击一个英文单词就会执行代码了。

当然,双击容易误触,我们可以将 ~LButton 改为 ^~LButton,表示按住 Ctrl 双击。按住 Alt 和 Shift 双击有多选功能,不建议设置。

如果你和楼主一样异端,希望用 Meta 键(也就是 Win 键)来控制:

Meta 键的代码
~LWin::
if GetKeyState("LButton", "P") ; 左键处于按下状态
  obSaladict()
if act("vivaldi.exe")||act("Obsidian.exe")
  Send {Blind}{vkE8}      ; 阻止 LWin 键默认行为
Return           ; 不影响 Win+A Win+Tab 等组合键
  • 从上往下,第一个 if 实现类似沙拉查词“放开鼠标之前按住选择的按键显示词典面板”设置勾选“Meta”时的效果。双击第二下按住左键不松开按下左 Win 键,也实现了点读。
  • 第二个 if 使得在 Vivaldi 浏览器和 Obsidian 单击 Win 键不会执行默认行为,即不打开左下角的开始菜单,这是异端的部分。
  • 启动了 .ahk 文件后,系统托盘右键选择“Windows Spy”会打开 AHK 自带的窗口检测工具,鼠标点到哪个窗口,就能在首栏 ahk_exe 处查看到 .exe 名称了。

    image

    image

拓展:利用autohotkey一鍵查單字及作成筆記

虽然我看不懂 ,但我用欧路词典也很方便查词,几乎无延迟

1 个赞

彩蛋:日语五十音点读及笔顺

因为在“DataviewJS 打字背诵练习”储备了数据,单纯进行数据的充分利用。
可前往帖子“DataviewJS 的传参与复用”蓝奏云链接,选择“打字示例库”,执行库内“程序执行档.md”从上往下第二个代码块。若阅读本帖有疑问,可先阅读“DataviewJS 的传参与复用”。

20240508_110726

  • 所有假名单击自动发音。
  • 清音单击额外显示笔顺。除点击其他假名自动清除外,可单击笔顺 GIF 立即清除。
  • 存在拗音组合的假名单击在右下显示小假名,点击小假名自动发各自对应的组合音。

对了,用 DataviewJS 生成有交互的表不可以偷懒用 dv.paragraph() + Markdown 表格文本,渲染出来交互没了。

大佬这是怎么做到的

mac apple搜索欧路词典 然后里面有个鼠标取词功能 鼠标移动到有英文的地方秒识别