Oh My Posh
はPosh
というPowerShell
の短縮形が命名にはいっている事からわかるように。
元々はPowerShell
のコマンドプロンプトをいいかんじにするPowerShell
モジュールでありましたが、今現在は、PowerShell
以外のシェルについてもいい感じにするようサポートされています。
本記事ではcmdプロンプト(Clink
)をいい感じにしてみます
ドキュメント
Change your prompt | Oh My Posh
chrisant996/clink
Overview | Clink
Clinkとは?
Clink
はWindowsのシェルであるcmd.exe
にGNU Readline library
の補完、履歴、行編集を追加するプロジェクトのようです。
Oh My Posh
はcmd.exe
に対して、直接カスタムプロンプトを提供はしませんが。
Oh My Posh
とClink
は簡単に統合できるようになっています。
なおClinkはオリジナルはMartin Ridgers
さんのmridgers/clinkになるようですが、2022年現在は更新されておらず。
フォークされたchrisant996/clinkが更新されている状況のようです。
Clinkをインストールする
ZIPのポータブル版、EXEのインストーラー版があるようです。
本記事ではインストーラー版からインストールします。
デフォルト設定すべてにチェックが入っていました。(ショートカット、%CLINK_DIR%の追加、自動起動等々)
Autorun when cmd.exe starts
はcmd.exe
を起動する時に、自動でClink
を起動するようにオプションでデフォルトでチェックがついています。
cmd.exe
をスタートする時に常にClinkを開始してくれるのはよさそうですが、多少起動が遅くなると記載があるので今回はチェックオフ。
デフォルトのインストールパスのママインストール
インストール成功
インストールオプションで指定したスタートメニューにClink
が追加されました。
インストールオプションで指定したユーザー環境変数を確認すると、%CLINK_DIR%が登録されていました。
Clinkを起動してみる(スタートメニュー)
スタートメニューに登録されてClink
から選択すれば起動します。
Clink
のバージョン情報が表示されて起動してきました。
Clinkを起動してみる(コマンドプロンプトから)
ドキュメントを参照すると既存のプロセスでClink
を起動する方法が記載されていました。
既存プロセスでClink
を起動するには下記コマンドを実行します。 <install_dir>
はインストール時に選択したディレクトリ。
<install_dir>\clink inject
インストーラで環境変数CLINK_DIR
を設定するオプションにチェックしてインストールしている場合は、下記環境変数を参照する形でも問題なさそう。
cmd.exe /K "%CLINK_DIR%\clink" inject
Windows TerminalからClinkを起動できるようにする
既存のプロセス上から先程の用法でClink
を利用できるので下記のようにWindows Terminal
に設定すればOK。
Need to open clink in windows terminal ?
Autorun when cmd.exe starts
オプションを有効にしてインストールすると、cmd.exe
起動時に自動的にClink
が有効になるのでその場合は単純にcmd.exe
起動すればClink
も有効になっている気がします。
ClinkでOh My Poshを利用できるようにする
Change your prompt | Oh My Posh
Clink scripts directory
に下記設定ファイル(oh-my-posh.lua)を配置すればClink
とOh My Posh
が連携します。
load(io.popen('oh-my-posh init cmd'):read("*a"))()
Clink scripts directory
については、Clinkが起動している状態でclink info
を実行するとscripts
として表示されます。
ユーザーフォルダ配下のAppData\Local\clink
にoh-my-posh.lua
を格納しました。
Clink
を起動し直すと、Clink
のプロンプト表示がいい感じになりました。
設定するテーマを切り替える
oh-my-posh.lua
を下記のように書き換えれば、読み込むテーマを変更できました。
load(io.popen('oh-my-posh init cmd --config "<oh-my-posh_theme_path>"'):read("*a"))()
下記はOh My Posh
の標準テーマ1_shell
を設定している例。
load(io.popen('oh-my-posh init cmd --config "%POSH_THEMES_PATH%\\1_shell.omp.json"'):read("*a"))()
oh-my-posh.lua
を更新して起動しなおすと、1_shell
テーマに変更されている事を確認できます。
総評
Oh My Posh
という名前ですが、cmd.exe(Clink)
もプロンプト表示をリッチにできるのは、名前的にちょっと混乱します。