(unix.stackexchange.comにクロスポスト)
この質問と回答は、 tcsh プロンプトに色を導入する方法を教えてくれます。
この Web ページecho
では、コマンドの出力に色を付ける方法をうまく説明しています。
> echo \\e[1\;30mBLACK\\e[0m
BLACK
> echo '\e[1;30mBLACK\e[0m'
BLACK
上記の例の「BLACK」という単語は、黒 (またはダークグレー) の前景色で印刷されます (全体的な配色によって異なります)。
[TAB]
これを のコマンド オートコンプリート機能に導入したいと思いtcsh
ます。私は試した:
complete testcmd 'p/*/`echo '"'"'\e[1;30mf834fef\e[0m'"'"'`/'
そして私は得る:
> testcmd [TAB]
> testcmd ^[\[1\;30mf834fef^[\[0m
明らかに、文字は特別な意味を失います。うまくいけば、私はエスケープを正しく取得できませんでした。しかし、私は他のいくつかの方法を試しました。そのため、どんな助けでも大歓迎です。
実際の使用例は、3 つの異なるタイプの補完を提供するコマンド補完があり、それらのタイプを視覚的に区別したい場合です。また、代替案は外部コマンドによって計算されます。そのため、 などの外部コマンドでバッククォートを使用するには、補完が必要echo
です。このコマンドの詳細は気にしません。tcsh
'sコマンドを使用して何らかの方法で動作させれば、complete
おそらく適応できるでしょう (perl -pe
ラッパーなどを考えて)。
これが何らかの形で機能する必要があると私が信じる理由は、tcsh 自体が、たとえばls [TAB]
. 私のセットアップでは正しく動作します。ls -1F
また、オートコンプリート内で使用することもでき、ls
出力される色もパイプされます。例は次のとおりです。
complete testcmd 'p/*/`ls -1F`/'
更新: ユーザー mavin が指摘しているようにls
、この例の色付けは実際にはパイプされていません。の色ls
は失われますが、オート コンプリートは LS_COLOURS 変数に従って色を再適用できます。これは、ls によって追加された/
やマーカーの末尾などのヒントに基づいています。*
これは、次のようにして確認できます。
complete testcmd 'p/*/`ls --color -1`/'
色を提供できず、文字化けした出力しか提供しません。(文字通り、エスケープ文字シーケンスをパイプ処理します)
私はtcsh
バージョン6.13.00を使用しています
何か案は?ポインタ?