Help us understand the problem. What is going on with this article?

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が提供されるようになりました。

https://iterm2.com/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 が増えています。

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

SushiStatusBar.gif

Install

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

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

終わりに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away