はじめに
Windows PowerShell のpromptについて。
プロンプトの文字および文字色は、Prompt関数の上書きで決まる。
具体的には、PS起動読込のファイルprofile.ps1 に、Prompt関数を置き、
中身はWrite-Hostで文字列と属性を書いていく。
場所は下記、それぞれシステム全体かユーザ単位で影響。
システム全体で反映するしないとかで、ごちゃごちゃややこしいけれども、一番最後の
Microsoft.PowerShell_profile.ps1 に書けばおおむね問題なく安全。
%windir%system32WindowsPowerShellv1.0profile.ps1
%windir%system32WindowsPowerShellv1.0Microsoft.PowerShell_profile.ps1
%USERPROFILE%DocumentsWindowsPowerShellprofile.ps1
%USERPROFILE%DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
Customizing Windows PowerShell command prompt より
http://blog.dabasinskas.net/customizing-windows-powershell-command-prompt/
プロンプトの改造例
Microsoft.PowerShell_profile.ps1
function Prompt
{
$promptString = "PS " + $(Get-Location) + ">"
$isAdmin = '$'
if(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$isAdmin = '#'
}
# Custom color for Windows console
if ( $Host.Name -eq "ConsoleHost" )
{
Write-Host ("[") -nonewline -foregroundcolor DarkGray
Write-Host ($env:username) -nonewline -foregroundcolor DarkCyan
Write-Host ("@") -nonewline -foregroundcolor DarkGray
Write-Host (hostname) -NoNewline -ForegroundColor DarkGreen
Write-Host (" ") -nonewline -foregroundcolor DarkGray
write-host (shorten-path (pwd).Path) -nonewline -foregroundcolor DarkYellow
Write-Host ("]") -nonewline -foregroundcolor DarkGray
Write-Host ($isAdmin) -nonewline -foregroundcolor Magenta
}
# Default color for the rest
else
{
Write-Host $promptString -NoNewline
}
return " "
}
function shorten-path([string] $path) {
$loc = $path.Replace($HOME, '~')
# remove prefix for UNC paths
$loc = $loc -replace '^[^:]+::', ''
# make path shorter like tabs in Vim,
# handle paths starting with \ and . correctly
return ($loc -replace '\(.?)([^\])[^\]*(?=\)','$1$2')
}
※shorten-path というのはディレクトリを短縮させる関数
参考:
atmarkIT -PowerShellのプロンプト文字列をカスタマイズする-
TechNet -Windows PowerShell コンソールをカスタマイズする-
PowerShell HelpFile – about_prompts
Customizing Windows PowerShell command prompt
chooru.code
PowerShell For Fun
カラーディレクトリ
GitHib からget-ChildItemColored.psm1をcloneして、%USERPROFOLE%DocumentsWindowsPowerShellModules 下にディレクトリごとコピー
Import-Module get-ChildItemColored.psm1
lscolorとか短縮で呼びたい場合は、$profileにエイリアスを書く
notepad $profile
Set-Alias lscolor Get-ChildItemColored
参考:
code: Coreutils-style ‘ls’ for Windows Powershell Hacks by Brandon: making it up as I go along.
次に、簡単な改造からステップバイステップで進めていく。
ステップその1 プロンプトを黄色に
元ネタ、PowerShell: Change the Color of the Prompt より。
Set-ExecutionPolicy でスクリプトの実行セキュリティ・ポリシーを変更しておくこと。詳しくはココ。
- %USERPROFILE%DocumentsWindowsPowerShell
というディレクトリを作成。
※posh-gitやModuleを過去にインストールした環境では、既存の可能性あり。 - 1.にMicrosoft.PowerShell_profile.ps1 というファイルを生成。内容は下記。
Microsoft.PowerShell_profile.ps1
展開
function Prompt
{
$promptString = "PS " + $(Get-Location) + ">"
# Custom color for Windows console
if ( $Host.Name -eq "ConsoleHost" )
{
Write-Host $promptString -NoNewline -ForegroundColor Yellow
}
# Default color for the rest
else
{
Write-Host $promptString -NoNewline
}
return " "
}
(PowerShell: Change the Color of the Prompt のコードをそのまま引用。)
上手く適用されないとき。
Get-ExecutionPolicy でスクリプトの実行セキュリティ・ポリシーが変更されているか確認。
$Profile と打ってPowerShell_profile.ps1 の位置を確認。
Windows PowerShell
PS C:WindowsSystem32WindowsPowerShellv1.0> $Profile
C:((USERPROFILE))DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
Microsoft.PowerShell_profile.ps1 が想定した位置なら問題ないはず。
【 ((USERPROFILE)) は使用PCの%USERPROFILE%に見立ててください。 】
ステップその2 さらにおしゃれなプロンプトと背景を
Winterdom -My PowerShell Prompt- より
Microsoft.PowerShell_profile.ps1 のprompt関数を書き換え。
(コードは参照先からそのまま引用、先のコードはマルチラインコメントで括った。)
展開
<# マルチラインコメント
function Prompt
{
$promptString = "PS " + $(Get-Location) + ">"
# Custom color for Windows console
if ( $Host.Name -eq "ConsoleHost" )
{
Write-Host $promptString -NoNewline -ForegroundColor Yellow
}
# Default color for the rest
else
{
Write-Host $promptString -NoNewline
}
return " "
}
#>
function prompt {
# our theme
$cdelim = [ConsoleColor]::DarkCyan
$chost = [ConsoleColor]::Green
$cloc = [ConsoleColor]::Cyan
write-host "$([char]0x0A7) " -n -f $cloc
write-host ([net.dns]::GetHostName()) -n -f $chost
write-host ' {' -n -f $cdelim
write-host (shorten-path (pwd).Path) -n -f $cloc
write-host '}' -n -f $cdelim
return ' '
}
function shorten-path([string] $path) {
$loc = $path.Replace($HOME, '~')
# remove prefix for UNC paths
$loc = $loc -replace '^[^:]+::', ''
# make path shorter like tabs in Vim,
# handle paths starting with \ and . correctly
return ($loc -replace '\(.?)([^\])[^\]*(?=\)','$1$2')
}
さらにVimのカラースキームで有名なMolokaiカラースキーム風Monokai =
Windows PowerShell Monokai Console Color Scheme
も入れる。
手順
- ダウンロード
GitでcloneもしくはZipダウンロードgit clone git://github.com/ntwb/posh-monokai.git
- 展開、使うファイルは次の3つ
HKCU-Console.reg
register-console-font.reg
Call posh-monokai.ps1 - フォント Adobe Source Code Proをインストール、.ps1ファイルを書き換えればAdobe Source Code Proでなくてもよい。
- レジストリのマージ HKCU-Console.reg
- レジストリのマージ register-console-font.reg
- Call posh-monokai.ps1 を%USERPROFILE%DocumentsWindowsPowerShell にコピー
- 6.のファイルをPowerShellで実行
入れると、こんな感じ。
Windowsのコンソールとは思えぬほどおしゃれな配色に(>□<)
そしてさらにオシャレな背景・フォントにしてみる。
PowerShell + ckw とう選択肢
PowerShellとckw(正確にはckw-modらしい)という組み合わせ。
ckw.cfg
展開
!
! ckw setting
!
!Ckw*foreground: white
!Ckw*background: midnightblue
!Ckw*cursorColor: green
!Ckw*cursorImeColor: red
!Ckw*transp: 220
!Ckw*backgroundBitmap: ckw_background.bmp
Ckw*title: ckw[cmd]
!Ckw*exec: cmd.exe
Ckw*exec: powershell.exe
!Ckw*chdir: %HOMEDRIVE%%HOMEPATH%
Ckw*scrollHide: no
Ckw*scrollRight: yes
Ckw*internalBorder: 1
Ckw*lineSpace: 0
Ckw*topmost: no
Ckw*font: Terminus-ja
!Ckw*font: Source Code Pro
Ckw*fontSize: 14
Ckw*geometry: 132x32+0+0
Ckw*saveLines: 10000
!Ckw*color0: #000000
Ckw*color1: #60E9FF
Ckw*color2: #008000
Ckw*color3: #008080
Ckw*color4: #800000
Ckw*color5: #800080
Ckw*color6: #808000
!Ckw*color7: #C0C0C0
!Ckw*color8: #808080
Ckw*color9: #0000FF
Ckw*color10: #00FF00
Ckw*color11: #00FFFF
Ckw*color12: #FFA500
Ckw*color13: #FF00FF
Ckw*color14: #FFFF00
!Ckw*color15: #FFFFFF
詳細
展開
- フォントはTerminus-ja にしてみた。
- ウインドウズキー+方向キーやWinsplitRevolutionなどでウインドウの位置と大きさを瞬時に変えたとき、スクリーンのバッファが飛ぶ。
- PowerShellコマンドに限り、TABキーによる入力補完がネイティブコンソールよりも遅い。
- コピペが出来ない?右クリックでペーストは出来るようだけど・・・。ちなみに、ネイティブコンソールはAlt + Space + E → C でコピーAlt + Space + E → P でペースト。
注意点。今までのネイティブなコンソール改造と併用する場合は、先のMonokaiで変更したレジストリを一部削除する必要がある。消さないと背景が灰色のままでcfgでも変更できない。
解決法
HKEY_CURRENT_USERConsole
ここのColorTable**という名のキーを全て削除。(**は数字)
ユーザ毎のサブキーも含む。
PowerSell + ckw |
概ね問題はないのだけれど、いくつか気になることが。
バッファ位置が飛んだ様子 |
左上がPowerShell+ckw、左下がzsh + Cygwin(+mintty) 以下Cygwin、
右上と右下がPowerShell+改造ネイティブコンソール
そしてたどり着いた結論・・・
ConEmu最強伝説
(プロンプト色のカスタマイズは出来ないので各shellごとに、改造を行う必要あり。)
ConEmuの出来ること。
フォントの種類、サイズ、ウインドウの画面位置や大きさ、背景画像・背景の透過など。
ペーストもCtrl+Vで普通に出来る。しかもConEmuを介してcmd.exe、PowerShell、Cygwinのshellまで呼べちゃう。タブ開き対応。
まさにコンソールの神ツール。
背景を変えてみて遊んでみる。
Zep |
VAIO |
Eye In The Sky |
NASA |
フォントのアンチエイリアスは、「なし、内蔵、WinのClearType」 の3つの選択肢がある。内蔵アンチエイリアスは結構品質がいい。
コンソールホストを切り替えるときWinキー+W を使うんだけど、ちょっとレスポンスわるい。ここを除けば文句ない。
コンソール画面ギャラリー
Terminal emulator with split panes for Windows 7 (64 bit) -Stack Exchange-
Get a better font for PuTTY -VCRTICAL-
cnder
MobaXterm
A USABLE AND GOOD LOOKING SHELL ON WINDOWS
更新
2014/03/15 1st
2014/03/16 2nd ckwによる考察を追記
2014/03/21 3rd Monokaiの説明を更新
2014/11/16 4th ConEmuを追加