1

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を使用しています

何か案は?ポインタ?

4

3 に答える 3

1

あなたの例では、色はから渡されていません。モノクロ出力を生成するように設定した場合でも、ここで色が得られますが、を省略した場合はそうではありません。何が起こっているのかというと、tcshは、各ファイル名の末尾に。によって追加された記号に基づいて独自の色付けを行っているということです。例えば:complete testcmd 'p/*/ls -1F/'lsls-Fls -F

complete testcmd 'p%*%`echo dir/ symlink@ device# socket=`%'

これを完了ジェネレーターで利用できます。たとえば、

complete testcmd 'p/*/`echo foo bar | perl -lane '"'"'print join " ", map { $_. "%" } @F'"'"'`/'

問題は、完成したコマンドラインにこれ​​らの記号が表示されることになり、毎回手動でバックスペースを設定する必要があることです。

于 2012-12-15T13:51:08.307 に答える
1

tcsh$LS_COLORS環境変数に応じて、サフィックスに基づいてファイル名に色を付けます(たとえば、すべての*.gzファイルを赤で表示します)。潜在的な補完のリストを事前に計算し、それらをすべてに配置して$LS_COLORSから、補完に使用するダミーファイルを設定できます。エイリアスを使用するとprecmd、プロンプトが表示されるたびに完了を自動的に再計算することができます。

complete testcmd "p#*#F:$HOME/.cache/testcmd-completions#"
alias prep-testcmd "setenv LS_COLORS '*red=01;31:*green=01;32:' && rm -r ~/.cache/testcmd-completions && mkdir -p ~/.cache/testcmd-completions && touch ~/.cache/testcmd-completions/red ~/.cache/testcmd-completions/green"
alias precmd prep-testcmd

余談ですが、これをFスタイルの補完ではなく「スタイルの補完」で使用すると便利です。そうすれば、ダミーファイルを作成する必要がなくなります。しかし、tcsh 6.17でそれを試しましたが、機能しませんでした。

于 2012-12-16T13:54:22.297 に答える
0

この私の質問には、ユーザー mavin が彼の回答で指摘したトリックを使用する更新された例 git tcsh 補完があります。

于 2012-12-19T10:26:05.580 に答える