2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iTermでFinderのフォルダを開きたい...!!

Last updated at Posted at 2023-05-25

iTermで現在開いているフォルダを開くぞ!

【背景】

僕の同期が、
Finderから1クリックで今のフォルダをターミナルにて開いている
のを見て羨ましかったので。
彼はどうやらAppleScriptなるものを使用して実現しているようで、
アップル純正のAutoMatorというアプリで1クリックで"ターミナルを開く機能"を実現したらしい。

ターミナルでの方法は調べるとすぐに見つかったのですが、
同じコードをiTermで動かそうとしても動かなくて色々調べました。

とりあえず自分の環境で動作するか試したい方へ

後述するコードを丸コピした後に、本ページの下の方へスクロールして、Automatorで設定するまで読み飛ばしましょう。2分で終わります。

作成したコード

M1mac: ver13.3.1
iTerm2: 3.4.19
で動作しているのを確認しており、下のコードにPC固有のコードは入っていないはずなので、
これを丸コピして動作しなければ、AppleScriptの書式が変更されているなどの原因が考えられるので、後で紹介する方法で自分で調べてみてね。(AppleScript歴5時間の奴が言ってることなので、信用しすぎないように!)
あと、ディレクトリのことを、「フォルダの場所」とか、「フォルダのパス」と表記していますので、悪しからず。

on run {input, parameters}
	-- 1 ----------------------------------------------------------
	tell application "Finder"
		set hfsPath to insertion location as Unicode text
		set currentFolder to get POSIX path of hfsPath
	end tell
	-- 2 ----------------------------------------------------------
	set command to "cd \"" & currentFolder & "\" && clear"
	-- 3 ----------------------------------------------------------	
	tell application "iTerm"
		activate
		if current window = missing value then
			create window with default profile
		else
			tell current window
				create tab with default profile
			end tell
		end if
		set _current_session to current session of current tab of current window
		tell _current_session
			delay 1
			write text command
		end tell
	end tell
	------------------------------------------------------------
end run

というわけで、コメントで番号振っときましたので少し解説します。

1. Finderで開いているフォルダの場所を取得する

tell application "Finder"
-- 1'
    set hfsPath to insertion location as Unicode text
-- 2'
	set currentFolder to get POSIX path of hfsPath
end tell

まず、

tell application "Finder"
    -- ○×△□ --
end tell

このようにtellで囲まれた部分は、「Finderに対して中に記述したコードを実行してね」という意味かと。
そして、

-- 1'
set hfsPath to insertion location as Unicode

これで、今開いているフォルダの場所を取得しているのだが、これはHFS形式という形式で、iTermやターミナルで使用できる形式ではないので、次の行

-- 2'
set currentFolder to get POSIX path of hfsPath

で、使用できる形式に変換している。


2. iTermで行いたい処理を書く(今回は手順1で取得したフォルダへ移動するコマンド)

set 変数名 to 代入するもの
で変数を設定できるので、今回は、

set command to "cd \"" & currentFolder & "\" && clear"
-- (command = "cd " + currentFolder + " && clear" みたいなイメージ)
-- (command = "cd フォルダのパス && clear"が入る)

で、後で実行するコマンドを設定しておく。

また、
iTermを開く→Finderで開いている位置に移動する
という手順を踏んでプログラムを組みたいので、

cd 手順2で取得したフォルダの場所

を実行します。
実際のコードはこれに加えて、&& clearが記述されていますが、
これは、このプログラムを実行した際に、
めも-10.jpg
このように実行したコードがモロに表示されるので、
せっかくプログラム作ったのに、『こんなコード打ちましたよ〜』って表示されるのはなんか嫌だと思い、&& clearを追加して、実行時に初めからFinderの場所が開かれたように見えるようにしました。(なので、ここは消してもらっても構いません)


3. iTermを起動し、手順2で設定した処理を実行する

-- 3 ----------------------------------------------------------	
tell application "iTerm"
	activate
	if current window = missing value then
		create window with default profile
	else
		tell current window
			create tab with default profile
		end tell
	end if
-------------------------------------------------------------
	set _current_session to current session of current tab of current window
	tell _current_session
		write text command
	end tell
end tell

手順1でのtellの説明でも書きましたが、
tell application "iTerm"で囲んだ部分で、
iTermに対して中に記述したコードを実行してね」とPCに教えています。
そしてactiveと2行目で書いていますが、これはiTermを起動するという意味のコードです。
ただ、これは起動するだけのようなので、iTermが開かれていない場合、ウィンドウが作成されず何も始まりません

↓これがウィンドウね
これがウィンドウ.png
(開かれている場合は、ウィンドウが最前面に出てくるだけ)


なので、

  • ウィンドウが開かれていない場合、新たにウィンドウを作成
  • 既に開かれている場合は、アクティブになったウィンドウで新たにタブを作成
    ↓これがタブね
    これがタブね
    という処理を行います。
    どうして「アクティブなウィンドウで」と強調したのかというと、僕が、
    create tab with default profile
    を実行していた際に、
tell current window
    create tab with default profile
end tell
-- これが正解

tell current windowで囲んでいなくてタブが生成されず、
ずっと「タブが生成されないなぁ?」と困ったからです。
PC側からすると、どのウィンドウでタブを作成するのか分からないから当たり前と言えばそうなのですがね、、

そして、

-- setは変数を宣言するコード
set _current_session to current session of current tab of current window
-- _current_session = current window.current tab.current session みたいなイメージ

ウィンドウの中のタブの中のセッションというものを変数にセットする。
最後に、

tell _current_session
	delay 1
	write text command
end tell

tell _current_sessionで囲まれた部分で、
_current_sessionに対して、中に記述したコードを実行してね」とPCに教えます。

delay 1でウィンドウやタブ作成後少し待ってあげて、
write text 〇〇
の〇〇にiTermで実行したいコマンド(今回は手順2の変数"comand"にて宣言しておいたコード)を記述して終わりです。

Automatorで設定する

「以上のコードをどうやって使うねん」って話ですが、
皆さんのMacからAutomatorというアプリを開いてください。(純正なので勝手に入ってます)
おーとまた
「見つからん」って方は、
command⌘ボタンを押しながらスペースを押すと、Macの何でも検索欄が出てくるので、Automatorと検索してみるといいかもね。
automator1

↑こんな感じでアプリケーションという項目を選択し、


applescript_do
↑「AppleScriptを実行」をタブルクリックする。


codewrite

↑すると、コードが書けそうな欄が出てくるので、
さっきのコードをコピペします。


donescript

【動作確認】
実行ボタンを押したり、トンカチのボタンを押すと、コードに色がついたりします。
成功すれば、iTermが開かれて、新しくタブ又はウィンドウが生成されます。


savescript
↑お好きな名前でお好きな場所へ保存します。
フォーマットはアプリケーションのままです。
僕はアプリケーションフォルダに保存しました。


IMG_0999.jpg

Finderで保存した場所を開き、コマンドボタンを押しながら、タブバーと呼ばれる上の縁にドラッグ&ドロップすると、そこにボタンが作られるので、完成です。お疲れ様です。

アイコンを変えてみる

propaty
↑右クリックで「情報を見る」を選択する。


drop
↑小さなアイコンにドラッグ&ドロップする。
changed
アイコンが変わった。お可愛いですね。

AppleScriptの資料

スクリーンショット 2023-05-25 19.15.44.png
これを開きます。(純正なので勝手に入ってます)
スクリーンショット 2023-05-25 19.20.57.png
ファイルの新規作成とはせずに、画面上部から
ウィンドウ→ライブラリと進む。
スクリーンショット 2023-05-25 19.21.16.png
ライブラリが表示されるので、"iTerm"を探す。
多分ないので、+(プラス)ボタンを押して、
スクリーンショット 2023-05-25 19.21.43.png
アプリケーションからiTermを追加する。

追加したことによって現れたiTermを開くと、英語ですが資料が見れます。
TabとかWindowとかのキーワードだけでも探せば少しは分かります。
スクリーンショット 2023-05-25 19.22.26.png

最後に

以下が参考になったページです。
【参考URL】

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?