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)もプロンプト表示をリッチにできるのは、名前的にちょっと混乱します。













