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

管理者モードのコマンドプロンプトでプロンプトを変える。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 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...