为什么我要做一款高效打开命令行工具?聊聊 GoToShell 的诞生

7 阅读5分钟

起因:一个重复了无数次的动作

作为开发者,我每天都要在 Finder 和终端之间来回切换。流程大概是这样的:

  1. 在 Finder 里找到项目文件夹
  2. 打开终端
  3. 手动 cd 到那个目录
  4. 或者右键点击文件夹,选择"服务" → "新建位于文件夹位置的终端窗口"

听起来不算麻烦,但当你一天要重复几十次的时候,就会觉得很烦。尤其是当你在多个项目之间切换,或者需要在不同的子目录里执行命令时。 我想要的其实很简单:在 Finder 工具栏上放个按钮,点一下就能在当前目录打开终端。就这么简单。

为什么市面上没有?

其实不是没有,是有的工具要么太老了(好几年没更新),要么功能太复杂(我只想打开个终端而已),要么就是不支持我用的终端。

我平时用 Ghostty,偶尔也会用 iTerm2。市面上的工具大多只支持系统自带的 Terminal,或者最多加个 iTerm2。对于 Warp、Alacritty、Ghostty 这些新兴终端,基本没什么支持。 既然找不到合适的,那就自己做一个吧。反正也不复杂,就是个小工具。

支持多种终端

既然要做,就做得完整一点。我列了一下市面上常见的终端:

  • Terminal(系统自带)
  • iTerm2(最流行的第三方终端)
  • Warp(最近很火的现代化终端)
  • Alacritty(性能狂魔)
  • Ghostty(我自己在用)
  • Hyper(Electron 做的)
  • Kitty(GPU 加速)
  • WezTerm(跨平台)
  • Tabby(也挺流行)
  • Black Box(GTK 的)

一共支持了 10 个。应该够用了吧。

应用会自动检测你装了哪些终端,只显示可用的选项。这样界面不会太乱,也不会让用户选到没装的终端。

一些设计上的考虑

GoToShell 其实是包含了两个 app:一个是主应用,用来配置选择哪个终端;另一个是 Helper,专门用来放在工具栏上。Helper 很简单,就是读取配置,然后打开对应的终端。

为什么不做成菜单栏应用?

有人可能会问,为什么不做成菜单栏应用,而是要放在 Finder 工具栏?

因为使用场景不一样。菜单栏应用需要先点击图标,然后选择功能。而 Finder 工具栏的按钮是一键直达的,点一下就执行,不需要二次操作。

而且,当你在 Finder 里浏览文件时,工具栏的按钮就在眼前,不需要把鼠标移到屏幕顶部。

为什么不支持自定义启动命令?

最开始我想加这个功能,比如打开终端后自动执行 git statusls -la

但后来想想,这个需求其实不强。大部分时候,我们只是想在某个目录打开终端,然后根据当时的需要执行不同的命令。如果每次都自动执行固定的命令,反而会觉得多余。

而且,不同的终端对启动命令的支持方式不一样,实现起来会很复杂。为了一个不太常用的功能增加这么多复杂度,不值得。

所以最后决定不做这个功能。保持简单,专注于核心功能。

为什么选择 AGPL-3.0 协议?

这个项目是完全开源的,代码放在 GitHub 上。

选择 AGPL-3.0 是因为我希望这个项目能一直保持开源。如果有人基于这个项目做了改进,我希望他们也能把改进分享出来,让整个社区受益。

技术栈

整个项目用 Swift 和 SwiftUI 写的,完全原生。没有用任何第三方库,就是纯粹的 macOS 开发。用原生技术,可以更好地利用 macOS 的 API,比如 NSWorkspace、AppleScript 这些。

一些数据

从开始写代码到发布第一个版本,大概花了两个周末的时间。代码量不大,主应用大概 300 行,Helper 大概 200 行。

最费时间的其实是测试各种终端,确保每个都能正常工作。还有就是写文档,README 改了好几版才满意。

应用体积很小,arm64 版本大概 3MB,x86_64 版本大概 4MB。启动速度基本是秒开,资源占用可以忽略不计。

后续计划

目前这个版本已经能满足我的日常需求了。但还有一些想法可以做:

  1. 快捷键支持:比如按 Cmd+Shift+T 就能在当前 Finder 窗口打开终端
  2. 右键菜单集成:在文件夹上右键,直接选择"在这里打开终端"
  3. 更多终端支持:如果有新的终端出现,可以继续添加
  4. 主题定制:让用户可以自定义工具栏图标

不过这些都不急,先看看用户反馈再说。

写在最后

做这个工具的初衷很简单,就是想解决自己的一个小痛点。没想到做着做着,发现还挺有意思的。

从需求分析、技术选型、代码实现、到打包发布,整个流程走下来,虽然是个小项目,但该有的环节一个都不少。

如果你也是 macOS 开发者,也经常需要在 Finder 和终端之间切换,不妨试试 GoToShell。项目完全开源,代码在 GitHub 上,欢迎提 issue 或 PR。

项目地址:github.com/covoyage/Go… 下载地址:github.com/covoyage/Go…