Featured image of post 在 Finder 中用 iTerm 打开当前目录

在 Finder 中用 iTerm 打开当前目录

需求

  在使用 Mac 的过程中,在终端打开当前目录是一个常见的需求。之前可以通过 xtraFinder 等 Finder 的扩展实现这个需求,但在 macOS 10.12 之后,这类扩展程序只能在禁用系统文件保护的情况下才能使用。
  作为一个强迫症患者,无法忍受禁用系统文件保护带来的风险,但又十分需要这个功能,怎么办?

方案

  于是我开始研究如何使用系统提供的方案来实现需求,经过不懈的努力,找到了很多过期资料,虽然在新版系统上已经无法使用,但是给了我一个思路。
  尝试过多个方案,使用 Automator 配合 AppleScript 的解决方案,应该是目前的最优解决方案。
  基本步骤是:

  1. 获取 Finder 当前文件夹的路径。
  2. 激活 iTerm2。
  3. 如没有窗口则创建窗口。
  4. 当前 Tab 正在使用则创建新 Tab。
  5. 在 Tab 会话中输入 cd 命令并执行。

  为了搞清楚 iTerm2 可调用的函数和属性,在 AppleScript 脚本编辑器里,打开 iTerm2 的字典研究了好一阵。

实现

  下面是 AppleScript 的代码,简单的几行,相信大家都能看得懂。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
on run {input, parameters}
	tell application "Finder"
		set currDir to quoted form of (POSIX path of (folder of the front window as alias))
	end tell

	tell application "iTerm"
		activate

		if not (exists current window) then
			create window with default profile
		end if

		tell current window
			if not (is processing of current session) then
				create tab with default profile
			end if

			tell current session
				write text "cd " & currDir & " && clear"
			end tell
		end tell
	end tell
end run

  如果使用的是 zsh,可使用 cdf 进入 Finder 的当前目录,则脚本可简化为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
on run {input, parameters}
	tell application "iTerm"
		activate

		if not (exists current window) then
			create window with default profile
		end if

		tell current window
			if not (is processing of current session) then
				create tab with default profile
			end if

			tell current session
				write text "cdf && clear"
			end tell
		end tell
	end tell
end run

  在实现方式上,有两种方案:

  1. 右键菜单方式
  2. Finder 工具栏图标方式

  实际使用时,Finder 工具栏图标方式的易用性感觉要更高一些,下面分别讲一下两种方式如何实现。
  

右键菜单方式

  在 xtraFinder 等插件中,一般是将打开终端功能集成到右键菜单中的,这也是最直观的调用方式。

  1. 启动 Automator,新建文稿,并选择 服务,点击选取。

  建立服务   2. 将 “服务收到选定的” 改为 文件夹,将 “位于” 改为 Finder.app
  3. 选择 资源库实用工具 里的 运行 AppleScript,双击添加,并贴入上面的代码。

  添加代码   4. 点击 运行,测试一下脚本是否可以正常运行。
  5. 按 Cmd + S 保存服务,命名可设定为 “在 iTerm 打开” 或者其他自定义名称。

  现在,在 Finder 中的文件夹上点击右键,服务菜单中应该已经有刚刚保存的服务了。
  右键菜单

Finder 工具栏图标方式

  在实际使用中,发现右键菜单方式使用起来不太方便。因为服务菜单一般有较多项目,是折叠起来的,需要两次点击才能完成操作。   而 Finder 工具栏图标方式能很好的解决这个矛盾,下面看看怎么实现这种方式。

  1. 启动 Automator,新建文稿,并选择 应用程序,点击选取。
  2. 选择 资源库实用工具 里的 运行 AppleScript,双击添加,并贴入上面的代码。
  3. 点击 运行,测试一下脚本是否可以正常运行。
  4. 按 Cmd + S 保存应用程序,命名可设定为 “在 iTerm 打开” 或者其他自定义名称。
  5. 在 Finder 中找到保存的应用程序位置,按住 Option + Cmd 组合键,将应用程序拖到 Finder 工具栏上。

  现在,点击 Finder 工具栏中应用程序图标,就可以在 iTerm 中打开当前目录了。
  工具栏图标

结语 

  其实 Mac 上有很多功能强大的工具,就比如 Automator,大多数主流的应用程序也都提供了 AppleScript 支持,仔细研究一下发现能做相当多的事情。
  通过一些简单的编码,使用系统提供的功能完成了需求,也不需要对破坏系统的安全策略,还是很有成就感的。