ANSI入力

ANSI入力

ステータスバーにANSIエスケープシーケンスを含むテキストを表示したいです。

ステータステキストは、ANSIの色(およびハイパーリンク(分離することができます))自体を管理するサードパーティ製のツールによって生成されます。ステータスバーはi3 Window Manager(Linux)に表示されます。

私はこの問題の解決策を3つ以上見ましたが、それぞれが失敗しました。

  1. ステータスバーにANSI色をレンダリングするステータスバーを探す入力する
  2. ANSIカラーをステータスバーが使用するマークアップ言語に変換する方法を見つけます。
  3. 端末ウィンドウをステータスバーとして表示します。

ANSI入力

i3でステータスバーを検索したところ、かなり多くの項目(i3status、dzen2、xmobar、polybar、Lemonbar、i3cat、conky、barmaid、sbar、yabar)が見つかりました。

私が理解している限り、それらのどれもconky以外のテキスト入力形式を許可しません。テキストモードで(Unicodeをサポートしておらず、頻繁にクラッシュします)。

dwmはステータスバーに関連するANSI入力を許可するいくつかのパッチに言及しているようですが、それを構築する方法を理解できません。

タグ付けするANSI

ドキュメントを読むと、すべてのステータスバーには設定レベルで定義された独自のマークアップ言語があることがわかりました。(これは少し奇妙だと思います。ユビキタスHTMLを使用しないのはなぜですか?そのサブセットだけですでにpandocなどの強力なツールを利用できます。できるツールがあります。)

これらはすべて入力をテキスト(または数値)として扱い、設定ステップでフォーマットされるのを待ちます。私が知っている限り、入力を生成するツールは、情報を表示するかどうか、および色を指定する方法を自分で決定します。ステータスバーに提供されている複雑な機能を実装すること自体は面倒です。

彼らは独自のマークアップ言語を使用しているので、それを変換するための既存のツールを見つけることができませんでした。これらのパイプラインの設定は、入力レベルではなく構成レベルにあるため複雑に見えます。

端末をバーで使用

これはおそらく最も有望なアプローチです。

watch --no-wrap --no-title --colors <mycmd>提供された「ステータス更新」機能のおかげで、毎秒コマンドを呼び出すのは非常に簡単です。

技術的にはプレイできるようです。xdoツールで説明されているように、X11ターミナルウィンドウをステータスバーとして機能させます。この回答しかし、i3では動作しませんでした。

編集する:i3ステータスバーにANSIエスケープ色でテキストを表示する方法(1つの方法または別の方法を使用)

ベストアンサー1

3番目の方法を使用した答えは次のとおりです。 i3 が理解する X11 プロパティを設定して、ドックの端末ウィンドウを変換します。パブリックプロセスでセッションを分岐しない端末エミュレータでのみ機能します。また、マルチモニタをサポートしていません。

#!/bin/bash
# Usage: ./dock.sh <command>

height="20" # Expects a single line status, you may edit this to fit your own terminal configuration.

# Cannot use terminal emulator reusing a common daemon from which to fork windows, or else the PID will change.
# e.g. gnome-terminal, terminator, etc.
# urxvt gets X11 errors and shorten the output...
# xterm works just fine.
xterm -bg black -e watch --no-title --color --no-wrap --interval 1 $@ &
PID="$!"
ID=$(xdotool search --sync -pid $PID 2>/dev/null)
width=$(xrandr -q | head -n1 | awk '{print $8}')
xdotool windowunmap --sync ${ID}
xdotool windowsize --sync ${ID} ${width} ${height}
xprop -id "${ID}" -format _NET_WM_WINDOW_TYPE 32a -set _NET_WM_WINDOW_TYPE "_NET_WM_WINDOW_TYPE_DOCK"
xprop -id "${ID}" -format _NET_WM_STRUT_PARTIAL 32cccccccccccc -set _NET_WM_STRUT_PARTIAL "0,0,${height},0,0,0,0,0,0,${width},0,0"
xdotool windowmap ${ID}

おすすめ記事