インストールが自由な環境では、WSLで動作させるLinux環境を使って、modern-unixなコマンドを使ったり(記事)アイコンや記号をフォントに格納したグリフフォントをインストールしてエッジの効いたカスタマイズが可能だ(記事)。

親に見つからないように布団で隠れながら、何度も徹夜した中学生のころのMSXゲーム経験のためか、コンソールに輝くグラフィカルなインタフェースは不思議と魅かれる。
一方、インストールが自由に行えないWindows PC環境でもPowerShell環境(PowerShell 7)のプロファイル(notepad $PROFILE)のカスタマイズで随分いろいろできることを確認。灼熱のPC環境で涼しい色合いを工夫していた(記事)ところ、グリフフォントのような"映え"が欲しいと考えた。
○"emoji"をPowerShellのプロンプトに反映させる

インストールせずにグラフィカルなターミナルをするには?と模索したところで試したいのが"絵文字"の存在である。Unicodeで定義されており、ブラウザやテキストエディタ環境で使える。PowerShellのプロンプトに設定しておけば、似たような感じになるのではないかと閃いた。

昨年末に公開されたUnicodeのEmoji 17.0サイトを開くと、絵文字が並ぶ。ここから、適当な見栄えを見繕ってコードではなく絵の部分(Browser)をコピーしてPowerShellプロファイルのPrompt関数として貼り付けてみる。ここでは、"computer"の区切りにあるNo1246(U+1F4BB)のをコピーする。

PowerShellを開いて、notepad $PROFILEと入力して開くプロファイルに

function prompt {
"> "
}

と記して、.$PROFILEで変更を反映させる。すると、

コピペだけでプロンプトに設定できるというのは、手軽でありながら結構、面白いのではないだろうか。
○目的にった絵文字を追加すある

プロンプトに情報を組み込むカスタマイズを行ってきた筆者は、現在以下のようなprompt関数だ。目的にあった絵文字を見繕ってコピペしてみよう。


function prompt {

# リアルタイム取得
$C = (Get-Location).Path
$U = $env:USERNAME
$F = (ls).Count
$T = (Get-Date -Format "HH:mm")
$D = (Get-Date -Format "yyyy/MM/dd")
$Temp = Get-Content "C:\Users\●●●\Desktop\log.txt" -Tail 1
$Forcast = Get-Content "C:\Users\●●●\Desktop\temp.txt" -Tail 1

# リアルタイム記号列
$Realtime = "File:$F / $C / U:$U / T:$T / D:$D / 気温:$Temp / 週間予報:$Forcast"

# SetPrompt で設定した固定パート
$Fixed = $global:PromptText

# 合成して返す
return "`e[38;5;39m$Fixed $Realtime > "

}

$C = (Get-Location).Pathは、現在の場所を表すため No1246(U+1F4BB)。$U = $env:USERNAMEはユーザー名を表すので人の顔でいいだろう。ここでは NO 113(+1F921 )のピエロ。$F = (ls).Countは現行ディレクトリにおけるファイル数なので No1324 (U+1F5C2)。$Tには⌚ No998 (U+231A )、$Dには No1326(U+1F4C6)。$Tempには No1039(U+1F321)の温度計、天気予報には No1051(U+1F324)☂ No1063(U+2602)と適当に選んで以下のように設定してみる。

function prompt {

# リアルタイム取得
$C = (Get-Location).Path
$U = $env:USERNAME
$F = (ls).Count
$T = (Get-Date -Format "HH:mm")
$D = (Get-Date -Format "yyyy/MM/dd")
$Temp = Get-Content "C:\Users\●●●\Desktop\log.txt" -Tail 1
$Forcast = Get-Content "C:\Users\●●●\Desktop\temp.txt" -Tail 1

# リアルタイム記号列
$Realtime = " File:$F / :$C / :$U / ⌚ :$T / :$D / 気温:$Temp / ☂ 週間予報:$Forcast"

# SetPrompt で設定した固定パート
$Fixed = $global:PromptText

# 合成して返す
return "`e[38;5;39m$Fixed $Realtime > "

}

これを実行(.$PROFILE)すると

.
編集部おすすめ