コマンドプロンプトでの入力補完。

管理者モードのコマンドプロンプトでプロンプトを変える。AutoRun の設定をするときに regedit を開いたわけですが、HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorキーには他に CompletionChar というキーがあります。うちではこの値は 0x40 になっています。

この CompletionChar はファイル名の補完機能の設定で、たとえばカレントディレクトリにabc.txtcde.txtxyz.txtがあったとき、a<TAB>と押せば abc.txt が補完され、x<TAB>と押せば xyz.txt が補完されます。

キーにはこのCompletionCharの他に、PathCompletionCharというのもあります。どちらもデフォルト値は 0x09 (TAB) に設定されているようです。が、自分のところでは両方ともに 0x40 です。なんで 0x40 なのかわかりません。上記のページでは 0x40 は "key" となっていて、詳しい説明がありません。が、動作としてはTABキーで補完してくれるので気にしないようにします。

ところで、CMD.EXEの補完機能は結構貧弱ですが、これをbash的な行編集機能にするためのClinkというアプリケーションがあるようです。

===
Clink combines the native Windows shell cmd.exe with the powerful command line editing features of the GNU Readline library, which provides rich completion, history, and line-editing capabilities. Readline is best known for its use in the well-known Unix shell Bash, the standard shell for Mac OS X and many Linux distributions.
===

ということで、CMD.EXEがかなりいい感じになるようです。
ClinkはインストーラーでインストールするとAutoRun値を書き換えてしまうようなので、ZIP形式をダウンロードして c:\Apps ディレクトリに配置します。

次に、前記事で書いた cmdrc.bat の最終行に次の行を加えます。
c:\Apps\clink_0.4.9\clink_x64.exe inject

ただ…せっかく指定したコマンドプロンプトのエスケープシーケンス (色) が消えてしまいました。すごく残念。なにかやりようはないかしら。でも、CTRL-Dでコマンドプロンプトを閉じることができるのは素晴らしいです。

結局cmdrc.batを以下のように変更しました。

@echo off
doskey /macrofile=%userprofile%\cmd.rc

c:\Apps\clink_0.4.9\clink_x64.exe inject

openfiles > NUL 2>&1

if %ERRORLEVEL% == 0 (
  rem 管理者モードの処理
  rem CRIMSON
  rem set PROMPT=$e[38;2;220;20;60m$p# $e[0m
  set PROMPT=$p# 
  set clink.prompt_colour=4
) else (
  rem 通常モードの処理
  rem deepskyblue
  rem set PROMPT=$e[38;2;0;191;255m$p$$ $e[0m
  set PROMPT=$p$$ 
  set clink.prompt_colour=3
)

これだと基本的な16色しか指定できないので、ちょっとつまらないんですが仕方ないですね。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...