赞扬AutoHotKey

2020-05-13 02:09:08

人们认为我所有的开发都是在Windows机器上进行的,这很奇怪。在更广泛的开发世界里,这绝对是二等公民的体验,Windows确实有很多令人沮丧的问题,但它仍然是我最喜欢的操作系统。这只有一个原因:AutoHotKey。

AHK是一个将击键映射到脚本的引擎。我不会说它特别优雅,而且它充满了大量的冗余和怪癖。即使是它的粉丝也承认这种语言有多难听。但它与整个Windows系统挂钩,使我的工作流程更容易扩充。它给了我对计算机的更大程度的控制,这比我用其他操作系统所能达到的程度要大得多。

以下是我编写的一些脚本的简短列表,大致按复杂性升序排列。1个。

让我们从一个简单的开始。我用龙的声音来写文字,因为我说散文的速度比打字快得多。我的麦克风非常灵敏,经常能听到键盘的声音,所以我需要一种打开和关闭听写的方法。我想将切换按钮映射到向左轻击鼠标滚轮,但Dragon只支持键盘快捷键。因此,我用AutoHotKey将两者粘合在一起:

车轮左转本身就是一条捷径。右侧的::是实际的命令。在这种情况下,它所做的就是发送一个数字键盘+按键,这恰好是Dragon中的“切换听写”热键。这是一件很小的事情,我只花了大约一分钟的时间就写完了,而且让使用龙变得更加愉快。我使用的AutoHotKey大多是这样的:在没有API的东西上附加一个粗糙的API。

我为工作编写了很多数学符号,比如∀x∈S:p(X)⇒q(X)。在历史上,人们使用LaTeX或Mathjax这样的渲染引擎来编写这些字符,这些引擎既笨重又不便于移植。我不能在电子邮件中随意添加乳胶。替代这些方法的另一种方法是编写Unicode。但是Unicode符号不在标准键盘上,有很多字符要写。大多数时候,我看到人们只是复制和粘贴他们想要的字符,一次一个字符。

AutoHotKey允许您定义在键入某些字符串时触发的热字符串。虽然这可以是任何类型的命令,但它最常用于将短字符串替换为长得多的字符串。

我还可以使用它将字符串映射到复杂的Unicode字符。下面是我当前的热字符串列表的示例:2

现在,如果我在S:;Diamond(f[x];geq0)中键入;a x;,我会得到∀x∈S:◇(f[x]≥0)。这比复制和粘贴方便多了。

这个博客正在降价。降价链接的语法是[标题](Url)。如果我必须同时从其他地方复制标题和URL,这真的很烦人。然后,我需要在源文本和标记文本之间进行两次往返,一次是复制每个部分。输入AutoHotKey:

#!c::;win+alt+c ctmp:=剪贴板;剪贴板上当前的内容:=";";发送^c;复制到剪贴板剪贴板ClipWait,2;等待剪贴板更改剪贴板:=";[";。剪贴板。";](";。CTMP。";)";return;结束多行命令。

如果剪贴板上有url,而标题是选定的文本,我按了win+alt+c,那么剪贴板就会被[title](Url)替换。这可能看起来是一个很小的负担,但它使添加链接变得如此、如此之好。

Alt+Tab很烦人,因为你必须在视觉上确认你使用的是正确的应用程序。您不能在这里使用肌肉记忆,因为堆栈取决于您最近的窗口。作为Vim的铁杆用户,任何妨碍肌肉记忆的东西都是不好的,应该避免。让我们用AutoHotKey编写一个更好的窗口切换器。

AHK允许您根据窗口标题、.exe名称或进程ID创建窗口组。我可以为每个应用程序创建单独的窗口组,然后创建专门在该窗口组之间循环的热键:

现在,无论我在哪里,按Right talt+1都会立即切换到Firefox。如果我已经在Firefox中,它会循环显示活动窗口。一个窗口可以属于多个组,因此我可以使用一个特殊的“研讨会”键在讲稿、幻灯片和IDE之间循环。对于我最常用的每个应用程序,包括Neovim、TLA+工具箱和终端,我都有一个单独的窗口组。

如果您在计算器已经打开时按下计算器按钮,它只会打开第二个计算器。为什么会有人想要这样?

所以我让它打开了弗林克。如果Frink已经打开,它会将其激活。如果它已经处于活动状态,它会将其最小化。更好的用户体验。3个。

TOGGLE_APP(app,location){if WinExist(App){if!WinActive(App){WinActivate}Else{WinMinimize}}Else if location!=";";{run,%location%}}Launch_App2::togling_app(";Frink";,";\path\to\frink.jar";)。

SCI-Hub是一项允许您免费访问研究论文的服务。这不合法,但买报纸超级贵,每张50美元。这不是我能负担得起的,而且我认为整个行业都是邪恶的。

正常情况下,要使用sci-Hub,您必须复制被阻止的纸质url,转到sci-Hub,将链接粘贴到网站上的表单中,然后单击Go。这比花50美元买一份报纸方便多了,但还是很烦人。如果我试图浏览十几份报纸,那么每次这样做都会打断我的流畅。

幸运的是,SCI-Hub使用标准格式的链接,因此我可以自动执行整个过程。此脚本在sci-Hub中重新打开当前论文:

;仅在Firefox#IfWinActive ahk_exe Firefox中启用热键。EXE;Right Alt+Right Ctrl+s>;!^s::;等待两个控制键都被解除KeyWait,RControl KeyWait,Ralt;转到url栏SendEvent,^l;Add Prefix,Go SendInput,{Left}sci-Hub。TW/{回车}返回。

我发现在添加了这个之后,我读到了更多的科学论文。“一个热键”和“四个步骤”之间的不同之处让我更有可能感到烦恼。

我为Internet Archive设置了类似的设置,在那里我只需按一个热键就可以重新加载存档中的当前页面。这对于做任何类型的历史研究都很方便。

我不认为AutoHotKey或Windows在这方面有什么特别之处。我本可以让类似的东西在Mac或Linux上运行。但是当我尝试的时候,我发现要难得多。我不得不深入研究操作系统是如何工作的。我记得我花了两天的时间试图让∈Sign在linux上运行,最终不得不阅读关于扫描码是如何工作的。最后,我认为增加的便利性根本不值得付出额外的努力。而这只是一个系统。如果我想添加我的窗口切换器,我必须了解窗口管理是如何工作的。

真正吸引人的是AutoHotKey让一切都变得很方便。这些脚本中的每一个都只花了我几分钟的时间来编写,不需要深入研究Windows的内部结构。当给我的电脑添加费用很容易的时候,我更有可能添加它们。使用AutoHotKey让我感觉可以自定义我的机器。我的脚本使计算机更接近我的需要。

缺点是它相当脆弱。我不得不调整延迟,有时还要重新组织我的计算机,以防止我的脚本被破坏。我尽可能地禁用了所有动画,以最大限度地减少不确定性。如果你不是技术专家,我希望使用AutoHotKey更容易,这样我就可以给我的朋友提供脚本来帮助他们。但即使有这些问题,它仍然是我最喜欢的程序之一,也是我更喜欢在Windows上工作而不是其他操作系统的原因。

免责声明,我没有花那么多时间学习AHK的最佳实践,我相信我的所有剧本都可以做得更好。[返回]。

O表示我们在热弦之后没有空间。这对于像时态逻辑这样的东西来说很好,在-P中没有空格。[RETURN]。

您可以通过摆弄注册表键来获得相同的结果,但这样我就不得不摆弄注册表键了。这是不可移植的;我可以将这个脚本复制到一台新机器上,然后立即让它正常工作。[返回]