Quantcast
Channel: shirokichi's hobby life
Viewing all articles
Browse latest Browse all 215

Windows PowerShell のプロンプトに色を付けるメモ, Colorscheme for PowerShell,the Prompt color added

$
0
0

ステップその1 プロンプトを黄色に

元ネタ、PowerShell: Change the Color of the Prompt より。

Set-ExecutionPolicy でスクリプトの実行セキュリティ・ポリシーを変更しておくこと。詳しくはココ
  1. %USERPROFILE%\Documents\WindowsPowerShell というディレクトリを作成。
    posh-gitがインストールされている環境では、既に自動で掘られている可能性あり。
  2. 1.に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:\Windows\System32\WindowsPowerShell\v1.0> $Profile
C:\((USERPROFILE))\Documents\WindowsPowerShell\Microsoft.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
も入れる。

手順
  1. ダウンロード
    GitでcloneもしくはZipダウンロード
    git clone git://github.com/ntwb/posh-monokai.git
    
  2. 展開、使うファイルは次の3つ
    HKCU-Console.reg
    register-console-font.reg
    Call posh-monokai.ps1
  3. フォント Adobe Source Code Proをインストール、.ps1ファイルを書き換えればAdobe Source Code Proでなくてもよい。
  4. レジストリのマージ HKCU-Console.reg
  5. レジストリのマージ register-console-font.reg
  6. Call posh-monokai.ps1 を%USERPROFILE%\Documents\WindowsPowerShell にコピー
  7. 6.のファイルをPowerShellで実行

入れると、こんな感じ。

Windowsのコンソールとは思えぬほどおしゃれな配色に。

PCによってカラースキームが上手く適用できないことがあったのでメモ。

手動によるバックグラウンド色の変更、
手動によるフォントの変更により同様の配色設定は出来た。
手動によるフォントの変更方法はこちら
なぜPrompt関数で出来ない場合があるのかは不明、判明次第追記予定。

幾つかのマシンで試した結果。
どうもバックグラウンドとフォントの一発改造はビルトインアカウントAdministrator でないと上手く適用されないみたい。この場合、先の手動設定でも同等の仕上がりにすることは可能。

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 にしてみた。
注意点。今までのネイティブなコンソール改造と併用する場合は、先のMonokaiで変更したレジストリを一部削除する必要がある。消さないと背景が灰色のままでcfgでも変更できない。
解決法
HKEY_CURRENT_USER\Console
ここのColorTable**という名のキーを全て削除。(**は数字)
ユーザ毎のサブキーも含む。

PowerSell + ckw

概ね問題はないのだけれど、いくつか気になることが。
  1. ウインドウズキー+方向キーやWinsplitRevolutionなどでウインドウの位置と大きさを瞬時に変えたとき、スクリーンのバッファが飛ぶ。
  2. PowerShellコマンドに限り、TABキーによる入力補完がネイティブコンソールよりも遅い。
  3. コピペが出来ない?右クリックでペーストは出来るようだけど・・・。ちなみに、ネイティブコンソールはAlt + Space + E → C でコピーAlt + Space + E → P でペースト。
バッファ位置が飛んだ様子

左上がPowerShell+ckw、左下がzsh + Cygwin(+mintty) 以下Cygwin、
右上と右下がPowerShell+改造ネイティブコンソール
操作性はCygwinが一番使い易いと思った。
それではPowerShell + Cygwinはどうか?と思ったんだけど。Cygwinのシェル内からはPowerShellは呼び出せず、呼び出し途中で止まってしまった。個人的にはshellがPowerShell限定ならPowerShell+改造ネイティブコンソールでも十分だと思った。

更新

2014/03/15 1st
2014/03/16 2nd ckwによる考察を追記
2014/03/21 3rd Monokaiの説明を更新



Viewing all articles
Browse latest Browse all 215

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>