iTerm2のステータスバーに寿司を流す


はじめに

iTerm2ではステータスバーを追加することができます。

Preferences > Profiles > Session > Status bar enabled > Configure Status Bar

からオンにできて、バッテリーの情報やGitのブランチ名などを表示することができます。

さらにver 3.3.0 から、iTerm2を操作するインターフェースとしてPythonのAPIがサポートされるようになり、独自のステータスバーをPythonを使って開発できるようになりました。

これは寿司を流す必要がある案件です(?)。

iTerm2 Python API

Python APIを使うとPythonからiTerm2を制御したりカスタマイズすることができるようになります。
今まではAppleScriptからのみ可能でしたが、Pythonから呼び出すためのAPIが提供されるようになりました。

Status Bar APIを使うことでカスタムのステータスバーを作成することが可能なので今回はこれを使って寿司を流します。

Scriptsの作成

Scripts > Manage > New Python Script

からPython Scriptを作成します。

Scriptsの種類は

  • Full Environment
  • Long-Running Daemon

にします。
~/Library/ApplicationSupport/iTerm2/Scripts/ 配下にpyenv環境を含んだディレクトリが作成されるのでこれを編集していきます。

pyファイルの編集

SushiStatusBarという名前にしたので、下記のファイルを編集します。

~/Library/ApplicationSupport/iTerm2/Scripts/SushiStatusBar/SushiStatusBar/SushiStatusBar.py

まずはStatusBarComponentのオブジェクトを作成します。

    knobs = []
    component = iterm2.StatusBarComponent(
        short_description="Sushi Status Bar",
        detailed_description="This is my first iterm2 status bar using python api",
        knobs=knobs,
        exemplar="Sushi Emoji",
        update_cadence=0.5,
        identifier="com.github.n-someya.sushi-status-bar")

knobsはStatusBarの設定を司るクラスの配列を受け取ります。
特に何も指定しなければ、単純にStringを表示するStatusBarとなるようです。
指定することでCheckBoxやSelectBoxのようなものを作ることも可能なようです(試してはいませんが)。

update_cadenceはStatusBarの内容の更新間隔を[s]単位で指定します。

次に、StatusBarの内容を返却するFunctionを定義します。
このFunctionがupdate_cadenceごとに呼び出されるようです。

    @iterm2.StatusBarRPC
    async def coro(knobs) -> str:
        l_status_count : int = get_count()
        l_space : str = ""
        for i in range(0, l_status_count):
            l_space += " "

        return l_space + "🍣"

今回は単純に呼び出し回数をカウントして、その分だけ空白を挿入することで流れている感を出しています。

他のAPIを組み合わせることで、Keyboardイベントごとに呼び出したりもできそうです。

動作確認

~/Library/ApplicationSupport/iTerm2/Scripts/SushiStatusBar/iterm2env/versions/3.7.2/bin/python ~/Library/ApplicationSupport/iTerm2/Scripts/SushiStatusBar/SushiStatusBar/SushiStatusBar.py

で実行してみます。

すると、

Preferences > Profiles > Session > Status bar enabled > Configure Status Bar

で選べるステータスバーに、 Sushi Status Bar が増えています。

設定してみれば寿司が流れるようになるはずです!

Install

iTerm2が起動したらScriptが実行されるようにします。

mkdir ~/Library/ApplicationSupport/iTerm2/Scripts/AutoLaunch
ln -s ~/Library/ApplicationSupport/iTerm2/Scripts/SushiStatusBar/ ~/Library/ApplicationSupport/iTerm2/Scripts/AutoLaunch/SushiStatusBar

終わりに

意外と簡単にカスタムのステータスバーを作ることができました。
もう少し実用的なものも作ってみたいと思います。