PowerShellをモテプロンプトに変える
ターミナル画面の住人としては、bashやPowerShell、cmdのデフォルトのプロンプト設定であまり嬉しくないことがあります。パスが深くなるに連れて、パス文字列で横幅を占有されて、コマンドラインが改行されてしまうことです。単なる見た目の話しではあるのですが、暇が過ぎたので直すことにしました。
理想はKali Linuxのターミナル
zshのデフォルトなのか、Kali Linuxのデフォルトなのか、Debian系Distroのデフォルトなのかわかりませんが、こんな感じ(↓)にしたい、と思いまして。前からこれ良いなと思っていたのでこれを機会に。
これを書くまでは、Kali Linuxのプロンプトの文頭(?)に罫線が出ているのを忘れていたのですが、スクショを撮ろうと思ってターミナル開いてみたら、これもやりたい!ということで、~/.zshrcの中を少し覗いてみました。罫線と言うのは、↓こういうやつです。IMEで「罫線」と入力して候補を出してみるとわかりますが、色々出せるわけです。
┌──
└─
.zshrcの中を見る
.zshrcの中を覗いてみました。
そのまんまやんけ!全角文字だなー、嫌な予感するなー、ということでやってみると、案の定文字化けを示す意味不明な漢字の羅列…。PowerShellのプロンプトを変えるには、C:\Windows\SYSTEM32\WindowsPowershell\v1.0にprofile1.ps1というスクリプトを置けば良いわけですが、それがこれです(後でなおします)。
function Get-PromptString {
$ps = "$";
if(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltinRole] "Administrator")){
$ps = "#";
}
$cwd = $pwd.Path;
return "┌──[$cwd]`n└─$ps ";
}
Set-Alias -Name:"prompt" -Value:"Get-PromptString" -Description:"" -Option:"None"
これは以下の2つのページを参考に書いたものです。1つ目は、改行コードのエスケープ方法を教えてもらったページ、2つ目は、このスクリプトのベースになったページ。お二方、ありがとうございます。
ベースはこれで良いわけですが、文字化けして逆にモテないプロンプトに…。これは駄目だ!というわけで。調べてみますとこんなページが。
症状も見事にここに書いてある通り。書いてある通りに直してみました。1つはスクリプトにUTF-8の設定を追加すること、もうひとつはコンパネでちょっと設定を変更すること。直したスクリプトは以下の通りです。
function Get-PromptString {
$ps = "$";
if(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltinRole] "Administrator")){
$ps = "#";
}
$cwd = $pwd.Path;
return "┌──[$cwd]`n└─$ps ";
}
$OutputEncoding = [Text.UTF8Encoding]::UTF8
Set-Alias -Name:"prompt" -Value:"Get-PromptString" -Description:"" -Option:"None"
エンコーディングを追加しました。
これだけでは直らないので、設定も変えてみた所、モテプロンプトの出来上がり!
きっと色も変えられるのだと思いますが、それはまた別のお話しとして。