英文单词书写由空格分隔,因此双击英文单词会自动选中该单词。
只需要发音:有道 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
,所以只有英语单词才发音。
需要发音和查词:沙拉查词
效果 GIF,点击展开
沙拉查词(Saladict)是一款多语种多词典聚合查词的开源浏览器扩展,支持自动发音、添加生词及 配合 Anki 制卡。为在浏览器外使用,需按照 Saladict 教程 - 浏览器外划词 做好设置给予权限。教程帖里也介绍了其他平台借助其他工具在浏览器外使用的方法。
本话题介绍供对照参考,如有遗漏以官方教程为准:
右键扩展图标的设置
→
- 基本选项 - 启用“后台保持运行”
- 快捷查词 - 全部启用
- 发音设置 - 英文自动发音 - 朗文词典或有道词典,美式口音(朗文词典好听!)
- 权限管理 - 启用“读取剪贴板”
浏览器管理扩展的设置
→
→
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 名称了。