Drafts

@cm3 の草稿置場 / 少々Wikiっぽく使っているので中身は適宜追記修正されます。

cmder導入

コマンドプロンプトの代替を定期的に探してしまう。UTF-8なことをしている時とか、おしゃれ病にかかったときとか。存在は知ってたが、かなり使えるようになってきたので、cmder(mini)を導入した。

Explorerと統合

f:id:cm3ak:20150413151555p:plain

  • カレントディレクトリを Cmder.exe のあるディレクトリに。
  • .\cmder.exe /REGISTER ALLを実行

すると好きなディレクトリで簡便にCmderを立ち上げることができるようになる。

f:id:cm3ak:20150413151810p:plain

エイリアスの設定

cmder\config\aliasinit.bat から読み込まれているので、そこを変更。

miniでインストールしたこともあって

e.=explorer .
gl=git log --oneline --all --graph --decorate  $*
ls=ls --color $*

を削除し、

ls=dir /B $*
pwd=cd
mv=move $*
clear=cls
f=fossil $*

を設定した。

スタートアップ時にUTF-8に切り替え

上で起動時に読み込んでいるinit.batの末尾に

chcp 65001
cls

を書き込んでおくと、起動時にUTF-8で起動できる。しかし、これによって

>>> sys.stdin.encoding
'cp65001'
>>> sys.stdout.encoding
'cp65001'
>>> sys.stderr.encoding
'cp65001'

と設定されてしまいこれらを使うプログラムがLookupError: unknown encoding: cp65001というエラーを吐いてしまうので、

PYTHONIOENCODING=utf-8

も足しておくとよい(参考:Windows cmd encoding change causes Python crash - Stack Overflow)。

f:id:cm3ak:20150410200044p:plain

タイ語もちゃんと表示される^^

SSH クライアントは PuTTY のまま

登録し直すのが面倒というのもあるが、ファイルの交換についてはWinSCPみたいなソフトが便利で、それと連携しているのでPuTTYが便利というのが大きな理由。plink.exeをssh.exeにリネームしてパスを通しておけば、sshコマンドも使えるようになるが、putty plink.exe disabled history - Google グループにあるように上ボタンとかで履歴が効かないので不便。だから、普通にputtyを使っている。-load オプションを使えば登録しておいたセッションをロードできる。

PuTTYのカラースキーマをcmderに合わせる

Monokaiというテーマがcmderのデフォルトになっており、それにPuTTYを合わせるには

Monokai style theme for PuTTY; colors copied from ST2's theme

にあるのをコピーして HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\monokaiの最後のところを自分の保存しているセッション名にして保存したレジストリ情報を結合すればよい。名前の中の*なら%2Aになるなどの差異はあるので注意。

僕は好みで

"FontHeight"=dword:0000000b
"Font"="MeiryoKe_Gothic"
"Colour3"="0,0,0"
"Colour2"="0,0,0"

の4カ所だけ変更して使っている。

バッチファイルを Cmder で実行する方法

:: Add init batch file if there is "init.bat" in current directory
@if exist %CD%\init.bat (
    call %CD%\init.bat
)

:: Add init batch file via EXEC_BAT environmental variable
@if defined EXEC_BAT (
    call %EXEC_BAT%
)

これを cmder\vendor\init.bat 内に記述。

実行ファイルのカレントディレクトリに init.bat という名前で置くか、

set "EXEC_BAT=.\\pyenv3\\Scripts\\activate.bat"
start "" "C:\Users\User\programs\cmder\Cmder.exe"

のようにしてcmderを立ち上げるときに環境変数経由で実行するバッチファイルを指定してあげると読み込める。例示しているように vitrualenv とか使っている時に便利。

ちなみに activate.bat の

set "PROMPT=$P:$_$G$S"

コメントアウトしておくと cmder のプロンプトを書き換えられずに済むので良い。

引数付でも実行できる。例えば、fui.bat

@echo off

set p=%~1%
cd "%DROPBOX%\projects\"
set EXEC_BAT="fui-sub.bat" %p%
start "" "C:\Users\User\programs\cmder\Cmder.exe"

と書いておいて、EXEC_BATで呼び出しているfui-sub.bat

@echo off

set p=%~1%
cd "%DROPBOX%\projects\%p%\"
echo opening %p% fossil ui page...
fossil ui

って書いておけば、引数は受け継がれ、cmder を使って fossil ui が実行される。

参考:

バッチファイルを Cmder で実行する方法は分からない→上記の通り分かった

コマンドラインオプションに関するドキュメントは無く、/STARTで開くディレクトリを指定するものと、上の「Explorerと統合」での/REGISTERそれを無効化する/UNREGISTERしかオプションは受け付けていないらしい。レジストリいじって、バッチファイルを関連付けるアプリ自体をcmderに置き換えてしまうことはできるが、別にいつもそうしたいわけでもなく。ConEmuは /cmd オプションでバッチファイルを指定できるので vender ディレクトリに入っている ConEmu を使うという手もあるが、そこまでして見た目にこだわるのも面倒なので諦めた。

また、起動時じゃなくてCmder立ち上げてからバッチファイルを実行してみたが、インタラクティブな設計にしていると、--color was unexpected at this time.というエラーでクラッシュ。そういう場面では素直にコマンドプロンプトを使い続けよう。

参考:

CLCL にショートカットもどきを登録

bliker/cmderのREADMEにもっと素晴らしい方法が書かれていた(上の「Explorerと統合」)

クリップボード拡張にCLCLを使っているが、そこに

start "" "C:\Users\User\programs\cmder\Cmder.exe"

みたいなバッチファイルを登録しておくと、新しいプロジェクトを始めるときにそこをカレントディレクトリにしたcmderが立ち上がる。ショートカットやバッチファイルの作業ディレクトリをカレントディレクトリとして引き継ぐには、Startupのコマンドからデフォルトの-new_console:d:%USERPROFILE%オプションを外しておく必要がある。

cmd /k "%ConEmuDir%\..\init.bat"

f:id:cm3ak:20150410200820p:plain