缘起

Quicker 是一个 windows 平台上的捷径工具。和大部分捷径工具一样,用户可以在面板上添加常用的快捷操作,然后点击按钮执行。

介绍这个工具的文章有很多,我也是在少数派吃到的安利,因此功能方面不再赘述。

试用期间,我发现它可以读取光标已选中的文字内容,而我日常工作中有大量「选中 - 复制 - 在某个网站搜索」的操作。于是想到,如果可以用 Quicker 的快捷动作实现「划词搜索」,必能节省大量打开网站的操作时间。

Quicker 共享库里已有很多现成的划词搜索或翻译动作,但我想搜索的内容大多不在此列,所以选择了 DIY。

需求分析

确定目标后,就可以开始设计制作快捷动作了。首先,得搞清自己的实际需求。脑补了一下使用场景:

过去,我的搜索步骤是「划词 - Ctrl+C - 打开新标签页 - 点开网站书签 - 点击搜索框 - Ctrl-V - 回车」。

Ugh!搜索岂是如此不便之物!我想要的感觉明明是——

「划词 - 鼠标中键 - 点击按钮」!

继续分析下去,这个动作的流程是:

  1. 获取选中内容
  2. 对选中内容进行字符串操作,和网站的搜索路径(如 https://www.google.com/search?q=)拼合成有效的 URL
  3. 打开该 URL

不过,还有一种可能性,就是我突然想查找某个关键词,但面前无词可划。所以这个动作应该提供一个输入机制。因此调整第一步为:

  1. 获取选中内容,如果选中内容为空,那么弹窗提示输入关键词

差不多就这样了,接下来是实际制作的部分。

动作编辑

第一步,是在任意空格上单击右键,并选择「新建组合动作」:

新建组合动作

可以看到如下界面:

动作编辑器界面

从左边的工具箱里拖动模块进步骤列表就可以制作动作了。

右边的变量窗口里已经有了两个默认变量,一个是 context,默认的文本变量,另一个是 img,默认的图片变量。

我们先创建两个新变量:

  • input,文本类型,用于保存关键字
  • selected,布尔类型,用于判断获取文本是否成功

然后拖进模块「获取选中的文字」:

获取选中的文字


注意这一模块有两个输出,或者说返回值,其一是「内容」,即被选中的文字;其二是「是否成功」。我们把结果分别输出到刚才的两个变量里。

接下来,判断是否成功读取了选中文本。拖入「如果…否则…结束」模块,并在「否则」后面添加用户输入模块:

如果…否则…结束

这一步结束后,input 变量内应该有我们所需的关键词了。如果用户什么都不输入,暂时不做处理。

下一步,是要把关键词附加到搜索路径后面。这里有个难点:如果用户输入的是一个短语,中间有空格,直接附加会得到错误的结果。所以,必须把关键词拆成一个列表,循环附加在搜索路径后,并在其间添加相应的连接符,如 +&20 等,因网站而异。

我们再创建两个变量:

  • list,列表类型,用于存储拆分后的关键词
  • path,文本类型,用于存储搜索路径

拖入模块「拆分文本为列表」,并对 path 赋值:

拆分文本为列表

为了做循环处理,得再创建一个变量:

  • temp,文本类型,用于临时存储每个循环从列表里读取到的单个词语

然后,拖入循环模块「每个」:

循环

这样,列表中的每个词都会被依次读进 temp 中。

在循环里加入模块「组合成文本」:

组合成文本

上图中,「格式化字符串」的作用是把下面提供的最多五个参数按一定格式衔接起来。每次循环时,我们依次衔接:

  • 已经拼好的路径 path
  • 当前词 temp
  • 分隔符(此处是 +)

然后输出回 path,也就是把新拼好的路径提供给下一个循环。

最后,拖入「打开网址」:

全部流程

动作就完成了。

扩展

以上这个结合「划词搜索」和「输入搜索」的快捷动作,亲测十分好用,并可以扩展到大部分我常用的搜索内容上,如:

  • Wiktionary,维基词典,同时搜索多个语种的词语及其词源
  • Behind the Name,用于查询名字背后的故事
  • ZLibrary,免费电子书库
  • Jisho,(我认为)最好的网络英日辞典

所以我保存了一份模板,每次需要做一个新的搜索按钮时,就复制粘贴到新的格子上,更改名称、地址、分隔符、提示语、图标等即可。

已公开动作:Wiktionary | Jisho

至于搜索模板本身,因未通过审核,暂不能分享。但制作思路已备详于此,自制或修改一个,应非难事。