Wox插件开发:查单词

又开始尝试摆脱鼠标了,于是重新用回了Wox,用来做一些基本的查询还是很方便的。因为有医学单词查询的需求,想到了湘雅专业词典。可惜官网不提供API,不过好在用Wox手撸一个建议爬虫还是可以做到的,mcd8的网页还是很规整的,非常适合快速构建提取流程。

直接说核心代码,首先是query模块,这里要注意的点包括关键词的预处理,JSON中特殊字符串的处理和规避,以及特殊情况下的If判断避免报错等等。贴上单词释义相关的loop代码

1
2
3
4
5
6
7
8
9
10
11
12
13
for i in words.find_all('div','block'):
content = self.getText(i.find('div', 'content'))
results.append({
"Title": "{}".format(self.getText(i.find('div', 'dict'))),
"SubTitle": "{}".format(content),
"IcoPath": "Images/detail.png",
"ContextData": "demo",
"JsonRPCAction": {
'method': 'addToClipBoard',
'parameters': ["{}".format(content.replace('\n', '//'))], #换行是JSON语法的保留符号
'dontHideAfterAction': True
}
})

另外还想实现右键复制到剪切板的功能,在网上搜到了解决方案

1
2
def addToClipBoard(self, text):
subprocess.run("clip", universal_newlines=True, input=text, creationflags=0x08000000)

这里的creationflags是为了阻止复制时弹出命令行窗口。

总体来说还是比较简单,当然还可以有更多的需求,比如相关词汇点击可持续搜索词条等等。目前的功能已经够用,也懒得研究Wox的API,所以先这样吧。用Python做扩展的好处是简单,相比C#与Wox本体的耦合度较差,如果要高级功能或者用着更舒服只有上C#这条路了(大坑)。

4.14更新
记录一个坑:如果搜索框因为失去焦点被隐藏,下次通过自定义快捷键呼出时,光标的焦点不在输入框里。通过搜索issue并没有找到解决方案,目前的方式是关闭设置中的失去焦点时自动隐藏Wox,每次通过Esc关闭搜索框,再次呼出时焦点就正常了。