2013年1月8日火曜日

PowerShell+ckwでUnixシェルライクな環境構築

PowerShellがWindows環境では最高のシェルだと思われるのですが,非常に気になる点としてGUI周りはコマンドプロンプトから進化していないことが挙げられます.

そこで,今回はckwと組み合わせてUnixのシェルのように変更する方法について書きたいと思います.

ckwはシェルのGUIを改良する物で,powershellに限らずcmd.exeやnyaos等でも使えます.これを利用することで,文字色,背景色やウィンドウの透過率を変更したり出来るのですが,最大の利点はウィンドウの最大化が行えることだと思っています.恐ろしいことにcmd.exeやpowershellは画面幅が固定されていて,最大化しても画面幅は最大にならないようになっています.そのため,vimのようなコマンドラインベースのテキストエディタを使うときには,画面サイズを好きなように変更できなくて困ります.もう一つのメリットはコピーするときに画面端で改行されないようになることです(テキストエディタのようにコピーが出来る!何もすごいことではないのですが・・・).

私のckwの設定は以下の様にしています.

----

Ckw*foreground: #80FF80
Ckw*background: #000000
Ckw*cursorColor:     #c0c0c0
Ckw*cursorImeColor:  red

Ckw*title: ckw[cmd]
Ckw*exec: powershell.exe

Ckw*scrollHide:  no
Ckw*scrollRight: yes
Ckw*internalBorder: 1
Ckw*lineSpace: 0
Ckw*topmost: no
Ckw*transp: 235

Ckw*font: MeiryoKe_Console
Ckw*fontSize: 18

Ckw*geometry:  210x63+0+0
Ckw*saveLines: 10000
----

ここまでは,ウィンドウサイズが可変になっただけです.ここからが本番です.powershellではプロファイルを設定することによりプロンプトの表示内容や履歴の保存が可能になっています.
プロファイルの場所はpowershell上で$PROFILEと入力することで表示出来ます.

私は以下の様に設定しています.

----
#履歴の保存数を最大に設定
$MaximumHistoryCount = 32767

#履歴の設定
$HistoryFile = Join-Path (Split-Path $Profile -Parent) history.xml
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {
Get-History -count $MaximumHistoryCount | Export-Clixml $HistoryFile
}
if (Test-Path $HistoryFile) {
Import-Clixml $HistoryFile | Add-History
}

function Prompt
{
    $id = 1;
    $historyItem = Get-History -Count 1;
    if ($historyItem)
    {
        $id = $historyItem.Id + 1;
    }
Write-Host "$env:USERNAME.$env:USERDOMAIN@$env:COMPUTERNAME [" -NoNewLine -foregroundcolor DarkGreen
Write-Host "$id" -NoNewLine -foregroundcolor Cyan
Write-Host "] " -NoNewLine -foregroundcolor DarkGreen
Write-Host $(get-location) -foregroundcolor DarkYellow

return "> "
}

----

履歴の保存数は初期値が64なので最大値である32767に変更しています.残念なのはshort型の範囲でしか設定できないことですね.ここはzsh等のように全ての履歴を保存可能な値を設定できるようにして欲しいです.

履歴の設定では,終了時に履歴をxmlファイルに自動出力して,次回起動時に自動読み込みすることで,Unixシェルのヒストリ保存と同様の機能を持たせています.

プロンプトの設定では,ユーザー名,ドメイン,マシン名に加えて,履歴番号と現在のパスを1行で表示して,コマンド行は次の行になるように設定しています.素の状態だと現在のパスの直ぐ後にコマンドを入力することになるため,コマンドなのかパスなのかがわかりにくいですが,上記の様に設定することでパスとコマンドを見間違えることがないようにしています.


0 件のコメント:

コメントを投稿