在网上冲浪时,我们常常能看到一个页面里面有许多超链接(Hyperlink),这些链接虽然以文本的形式呈现在界面上,但可以使浏览者在单击后可跳转至另一个页面,它们往往有与其他文本不同的颜色,带有下划线。当鼠标放上去的时候,箭头形态的指针光标将变为手型,此时整个超链接都会被选中。

图片来源:维基百科 Hyperlink

少数派的读者对上述描述应该不算陌生。我们每天都在点击大量的链接,这些链接使写作者不再需要将链接完全嵌在文本中,而是以原文本的面貌呈现出来,让文本的连贯性和统一性得到极大提升。可是,如果阅读者想要从超链接的原文本中选出一部分词语和文段的话,就成为了一个问题。

当光标放在一般文本上时会变成工字型,此时用户能够很轻松地选中文本然后复制,如此获取网页文本。但是当光标置于超链接之上时,手型光标无法选择文本,如果按住鼠标拖动,则会形成一个灰色的链接,说明此时鼠标选中的是作为整体的链接,而非链接中的原文本。

当按住链接拖动时,通常情况下无法选中链接内的文本

在我的日常使用体验中也是如此,我常常在搜索界面上的超链接内看到了想要使用的文本,并不想打开页面后再复制标题,而是直觉般地用鼠标去划选,却屡屡碰壁。因此,我在今年 7 月初写作了 Cactus 这一免费软件,希望能够为这一需求创造便利。大家可以从我的 GitHub 项目中阅读其指南并下载。

如何从链接里选取文本?

那么,我们该如何从链接里选取文本呢?现在比较普遍的方法是安装浏览器扩展,例如比较经典的 Select Like A Boss,在各类浏览器中都有扩展。当我在写 Cactus 时,Select Like A Boss 还没有发布「2023 Jul 42」版本,那时几乎没有可用的工具。而当该版本在 7 月下旬发布后,一些功能得到修复,可在选中链接并水平移动时选取其中的文本,选中上下拖动则默认为拖动链接。但我发现它依然有一些局限。

Chrome Web Store 中的 Select Like A Boss

我在使用过程中遇到了这样一些问题。例如,它在 Safari 上时而可用,时而不可用;有时它选中了我想要的内容,有时选得不那么精准;有时还没选完,光标指针就变成了箭头形,松手后依然打开了链接;有时则是水平移动和上下移动识别发生错误,本想选中文本,结果又拖着链接动了。或许是因为发布时间太久远,这个插件似乎不能在所有类型的超链接上使用,例如,我发现,谷歌搜索界面上的结果就无法顺利选取。

然而这其中最令人感到有需求的,还是在跨浏览器情景下的使用。我日常需要交替使用 Chrome 和 Safari,但在不同内核的浏览器上,这一插件的表现并不一致。因此在使用时,使用的连贯性和联通感少了许多。

另外,除了插件之外,一些浏览器也支持使用快捷键选中链接中的文本。比如,在 Chrome 中,按住 Alt 键,或者 Option 键(在mac 上),虽然也能选择,但选完了还是会打开链接、弹出新页面。类似地,Safari 也不支持这样的方式。

于是,我开始思考,有没有非浏览器插件的办法,能让用户在浏览页面时更加轻松地选择链接中的文本?

探索浏览器中的右键

既然光标能够一次性触发链接所占的全部文本,那么如果右键点击链接的话,不就是将这一部分全选了吗?

我发现这一特性不仅在 Chrome 中适用,在其他内核的浏览器中也是相同的。只不过有些页面上右键一次会选择更多的文本,超出超链接所占的文本。例如,在 Google 搜索页面上,将光标置于链接上,右键复制,蓝色区域将覆盖链接和上方的网址。若是如此,我计划使这个软件将复制所得的文本呈现出来,让这些文本可以进一步地被用户自由地裁选。

在 Google 搜索界面,右键选择链接将覆盖所选标题和上方的网址

发现这一共性之后,我开始了头脑风暴:或许我们可以设计出一个连续动作,当它被触发时,先右击光标所在位置的链接,将选中部分复制到剪贴板,最后再显示在用户的光标旁,供用户选取其中一部分复制,或者复制全部。如此,便诞生了 Cactus。

如何让这一切连起来?

我使用了一组 Apple Script 来实现这个目标。如 UI 图示,Cactus 的显示窗口上有三个按钮,左数第一个是复制全部文本,第二个是复制部分文字,最后是关闭按钮。Cactus 可以复制一个链接中的全部文本,但更关键的是,用户可以自由地选取这个链接中间的部分文字。当看到一个超链接文本的中部有我们需要的文字,但苦于无法获取它的时候,用户可在文本框内选中这部分文字,然后点击「Copy selected」按钮即可。

Cactus 的应用界面

Cactus 还能在文本框中对这部分文字加以修改。有时,我们对刚刚获取到的文字需要进行快速简单的加工,例如增添一些语气词,或者将其填补完整、成为一句完整的话,这时,Cactus 就相当于一个实时的剪贴板编辑器,用户可以随心所欲地增删文字,然后点击「Copy all」按钮,刚刚修改过的文本就全部复制到剪贴板了。

在触发 Cactus 的方式上,我区分了两种情况。

第一种情况是,用户可以设定延迟时间,用户开始计时后,将光标移动到对应的链接上,等计时结束,Cactus 自动触发,右击鼠标位置的链接、复制,并在光标所在位置弹出窗口,显示链接中包含的文本。

第二种情况则相反,用户可以将计时定为 0,先把光标移动到链接上,然后通过使用 Alfred 或者 BetterTouchTool 等工具来触发 Cactus。

如果用户电脑已有 Alfred,即可安装此指令使用(Cactus Keyword to Script.alfredworkflow),通过 Alfred 间接设置全局快捷键。用户还可使用此通用的 Applescript 脚本(Show Cactus.applescript),在其支持 Apple Script 的启动器中设置惯用的触发方式。

此外,用户还可以用 MTMR、BetterTouchTool 等客制化 Touch Bar 软件自定义 Touch Bar 按键,一键触发。以下是适用于 MTMR 的配置。用户将其复制粘贴在配置文件中,Touch Bar 上就形成一个静态按钮,用户用手按一下就能触发 Cactus 了。

{
    "type": "staticButton",
    "align": "right",
    "title": “Button",
    "bordered": true,
    "width": 44,
    "action": "appleScript",
    "actionAppleScript": {
      "filePath": “[YOUR PATH TO Show Cactus.applescript]",
    },
}
红色方框内就是据上面代码编译得出的按钮,按一下即可触发

最后

Cactus 的图标是一颗手型的仙人掌,手型呼应光标的形状,选择仙人掌则是因为仙人掌小巧可爱,却浑身是刺,叫人可欲不可及。

Cactus 的图标设计

Cactus 的原理真的是非常简单,简单到可谓是“笨办法”,没有难以理解的代码,也没有上手难度。如果正在阅读的你有兴趣的话,欢迎访问我的GitHub 项目地址,阅读更详细的指南。若 Cactus 帮助了你的日常工作的话,希望您不吝赐一颗星星。如果你想看到更多记录与想法,也欢迎订阅我的微信公众号「夜行人的笔记」。