これスターウィキCLIプロンプトの色を変更するために使用できることを示します%Cn[;n]
。つまり:
export ASTERISK_PROMPT="%C31[%H]: "
ただし、上記のエクスポートを使用すると、ホスト名が[1;31m[voip]: [1;0m
どこにあるかが壊れたプロンプトが表示されます。voip
私の端末は色をサポートしています。実際、私はzsh
科で色を使いましたbash
。そしてecho $TERM
私に以下を与えた:
xterm-256color
私の端末のスクリーンショットは次のとおりです。
ご覧のとおり、アスタリスクのメッセージ/ログも色で表示されます。アスタリスクメーリングリストに問い合わせましたが、構文はexport ASTERISK_PROMPT="%C31[%H]: "
正しいです。一部の人々はカラーヒントが効果的であると報告し、他の人は私が報告したのと同じ問題を抱えています。
これは問題がアスタリスクにあるのではなく、オペレーティングシステム環境、ターミナル、ターミナルエミュレータなどの複雑な相互作用にあると疑われます。
私はいくつかの異なる端末エミュレータを試しました:terminator
、、、、。問題は同じです。xterm
gnome-terminal
eterm
konsole
私はアスタリスクサーバーに関連付けられているデスクトップの両方でDebian 10を使用しています。
AsteriskでカラーCLIプロンプトを取得するには?
答え1
いいえローカル修正このために。
編集行
NetBSD editlineは長年のカラーヒントをサポートしていません。その作用メカニズムは主張したところによるとサポートされている色のヒントは機能せず、2015年(おそらくそれ以前)からバグがあることが知られています。あなたが見ているのは間違ったメカニズムの結果です。
持つNick Zavaritskyの編集ラインポイント左/右のヒントの文字と編集バッファの文字のグラフィックレンダリング情報を保存するため、カラーヒントだけでなく、編集中の行の(構文)色も正しくサポートされます。
バニラのeditlineは間違いなく悪い道を取る。 2017年には、プロンプト文字列のリテラルが実際に正しい順序でエクスポートされ、開始時に線幅の計算が中断されないように、「リテラル」メカニズムが強化されました。 (Zavaritskyフレーバーのようなランダムな色をサポートしていないので、間違いなく劣ります。オリジナルを維持します。この文字を使用してテキストシーケンスを表示します。元々デザインのメカニズムですが保存する意図があった都合のないデザインのようです。色の順序に対して独自のtermcapルックアップを実行するクライアントアプリケーションに依存しすぎます。今後見ていきますが、Asteriskの場合、これらの依存関係は間違っています。 )
スター
Asteriskは別名NetBSD編集ラインを使用します。図書館編集者Debian 命名法で Debian が呼び出す他のライブラリと混同しないでください。編集行。
プロンプトで色の順序を手動で作成しますが、これはあまり良くなく、256色または24ビット色をサポートするだけでなく、16色をサポートする1990年代初頭の端末エミュレータとは実際には互換性がありません。 。
いいえtermcap / terminfoを使用してその番号を見つけて色を付けsetaf
ます。setab
固定色のエスケープシーケンス。、そして間違っています。明るく大胆な組み合わせ、VT100に色があると間違って考える(VT100は白黒です。)8つ以上の色を処理しません。最終的にはSGR 0(SGR 22の代わりに)がどこからでも放出されます。
Asterisk は、(わかりやすく) Zavaritsky スタイルの編集行を使用しません.同じ問題が発生しました。 AIXterm 16カラーはサポートされていません。そして、Asteriskが誤って設定されたエスケープシーケンスを誤って解析する方法については、少なくともバグ互換性があります。 ☺
以前のバニラスタイルの編集行を使用すると、実際に予想される結果が表示されます。エスケープシーケンスは、エスケープされていない形式で印刷されます。 2017年以降、バニラ編集行は実際のエスケープシーケンスとしてエクスポートする必要があります。 2018年にはDebianにも登場しました。。だからDebian2019年にAsteriskバイナリを再構築しました。。
サービス修理
Fはいㅏ提供するそれを修正してください。パッケージマネージャのlibeditが3.1-20181209より高く、Asteriskが1:16.1.1より高いことを確認してください。少なくとも質問は大きく異なります。問題の効果は表示されなくなりますが、太字のフォントが使用されている、明るい色が明るくない、または「Solarized」カラーテーマが完全に機能しないなどの問題が発生することがあります。
これらのバージョンでまだ問題が見つかった場合は、Asterisk および NetBSD editline 担当者に苦情を申し立ててください。彼らは実際にここで亀裂を解決しているだけです。
答え2
必須ライブラリ
Asteriskはlibeditを通知として使用します。このライブラリの以前のバージョンはカラーリングをサポートしておらず、3.1-20181209より高いバージョンが必要です。 Debian では、次のようにパッケージを更新できます。
# Download the package from Debian 11
wget http://ftp.br.debian.org/debian/pool/main/libe/libedit/libedit2_3.1-20191231-1_amd64.deb
wget http://ftp.br.debian.org/debian/pool/main/libe/libedit/libedit-dev_3.1-20191231-1_amd64.deb
# Update libedit
dpkg -i libedit-dev_3.1-20191231-1_amd64.deb libedit2_3.1-20191231-1_amd64.deb
# Check the installed version
apt list --installed | grep edit
# As a side note here is the Asterisk install process:
cd /sources/dir
./configure
make clean
make install -j8
make config
make samples
スタープロンプトカラーブロック:
Asteriskのプロンプトカラー実装には実際にバグがあります。次のパッチ(v16.2.1用)では、赤ASTERISK_PCOLOR
と同じ色番号に設定できるenv変数の使い方を紹介します。export ASTERISK_PCOLOR="031"
誰でもこのパッチアップストリームを宣伝できます。、パッチ適用後は必ずmake clean
ご使用くださいmake install
。 (ボーナスとして、このパッチは太字と背景色もサポートしています。例export ASTERISK_PCOLOR="1;31;41"
:)
--- main/asterisk.c
+++ main/asterisk.c
@@ -2548,7 +2548,7 @@
return CLI_SUCCESS;
}
-#define ASTERISK_PROMPT "*CLI> "
+#define ASTERISK_PROMPT "*CLI>"
/*!
* \brief Shutdown Asterisk CLI commands.
@@ -2725,6 +2725,7 @@
{
char tmp[100];
char *pfmt;
+ char *pcolor;
int color_used = 0;
static int cli_prompt_changes = 0;
struct passwd *pw;
@@ -2738,6 +2739,12 @@
ast_str_reset(prompt);
}
+ if (!(pcolor = getenv("ASTERISK_PCOLOR" ))) {
+ pcolor = "0";
+ }
+
+ ast_str_append(&prompt, 0, "\1\033[%sm\1", pcolor);
+
if ((pfmt = getenv("ASTERISK_PROMPT"))) {
char *t = pfmt;
struct timeval ts = ast_tvnow();
@@ -2839,11 +2846,13 @@
ast_term_color_code(&prompt, 0, 0);
}
} else {
- ast_str_set(&prompt, 0, "%s%s",
+ ast_str_append(&prompt, 0, "%s%s",
remotehostname ? remotehostname : "",
ASTERISK_PROMPT);
}
+ ast_str_append(&prompt, 0, "\1\033[0m\1 ");
+
return ast_str_buffer(prompt);
}
@@ -3034,7 +3043,7 @@
history_end(el_hist);
el = el_init("asterisk", stdin, stdout, stderr);
- el_set(el, EL_PROMPT, cli_prompt);
+ el_set(el, EL_PROMPT_ESC, cli_prompt, '\1');
el_set(el, EL_EDITMODE, 1);
el_set(el, EL_EDITOR, editor);