Matrix 首页推荐  

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


在日常生活中,经常需要去记录一些在不同软件中的,未来可能会用到的重要信息。一般来讲,我需要的内容应该包含以下几个部分:软件名称、时间、我选中的重要信息。

而我最初关于存储内容的软件考虑就是「备忘录」App,主要是因为其在 Apple 生态中原生的体验、优秀的多端同步机制。

于是我就在想,有没有一个自动化的流程可以去记录这些。最终我选用了 Keyboard Maestro 这款万能的工具。可以一键导入的 kmmacros 文件放在文章最底部,方便大家下载。

实现功能

过程演示
  1. 在窗口中选中一段内容
  2. 点击特定快捷键(这里我设置的是 ⌘ + ⌥ + ⇧ + C)
  3. 自动打开备忘录,并记录如下内容:
    标题为窗口名称+应用名称+保存时间
    正文为图片+选中文字+应用名称的 Tag 以方便搜索

所需工具

为了实现这个功能,你需要使用如下软件:

  • Keyboard Maestro

更多关于 Keyboard Maestro 的使用方法,可以参考以下栏目:

 

实现思路

为了实现这个功能,我们首先需要明确我们应该获得哪些信息:

  • 窗口及其 App 的名称
  • 窗口的截图
  • 选中的内容

然而 Keyboard Maestro 并不方便去获取这些内容,于是我用到了集成在 Keyboard Maestro 中的「大杀器」:Apple Script。

Apple Script 是苹果公司开发的一种脚本语言,可以用来控制运行于 macOS 上的程序,也可以写成独立运行的 Applet。它与 macOS 深度集成,可以进行很多操作。恰好,作为一个编程语言,ChatGPT 也学习了其大量的资料,因此可以很方便的让 ChatGPT 来帮我们补全程序,而我们只需要提供思路即可。

选中的内容

我们可以直接通过复制(选中的内容)指令,将选中的内容存在剪切板中。而为了不破坏系统剪切板的内容,我们将其放在 Keyboard Maestro 的自定义剪切板中。如图。

获取窗口的截图

我们可以直接调用 Keyboard Maestro 中的指令 「Screen Capture Front Window」即可。

 

获取窗口的名称及其对应软件的名称

这两个名称用 Keyboard Maestro 获取不是很方便,因此我选用了 Apple Script。

获取窗口名称的程序是:

tell application "System Events"
	set frontApp to first application process whose frontmost is true
	set frontAppName to name of frontApp
	tell process frontAppName
		set windowTitle to name of front window
	end tell
end tell

return windowTitle

获取对应软件名称的程序是:

tell application "System Events"
	set frontAppName to name of first application process whose frontmost is true
end tell

set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to " "
set textItemList to text items of frontAppName
set AppleScript's text item delimiters to ""
set frontAppNameNoSpaces to textItemList as string
set AppleScript's text item delimiters to oldDelimiters

return frontAppNameNoSpaces

随后,两个返回的变量保存在 Macros 的变量中:

产生的一些问题

在写接下来的指令时,我就按照:「新建备忘录 —— 一点一点粘贴对应的东西」这个流程来操作,就如图所示:

但当实际操作时,我发现它会在一种情况下报错:当备忘录已经打开一个新建的备忘录,但没有任何输入的内容时,就无法选中 文件——新建备忘录 ,如图所示:

这种情况就会导致程序的报错。而为了解决这个问题,我使用了 "Try … Catch …" 指令,先默认没有新建的备忘录进行操作。如果发现有新建的备忘录,那么就直接粘贴内容。解决了这个问题。

下载链接

GitHub 链接:Link

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现🚀