ANSI 입력

ANSI 입력

상태 표시줄에 ANSI 이스케이프 시퀀스가 ​​포함된 텍스트를 표시하고 싶습니다.

상태 텍스트는 ANSI 색상(및 하이퍼링크(분리될 수 있음)) 자체를 관리하는 타사 도구에 의해 생성됩니다. 상태 표시줄은 i3 Window Manager(Linux)에 나타납니다.

나는 이 문제에 대한 해결책을 세 가지 이상 보았지만 각각은 실패했습니다.

  1. 상태 표시줄에 ANSI 색상을 렌더링하는 상태 표시줄 찾기입력하다.
  2. ANSI 색상을 상태 표시줄이 사용하는 마크업 언어로 변환하는 방법을 찾으세요.
  3. 터미널 창을 상태 표시줄로 표시합니다.

ANSI 입력

i3에서 상태 표시줄을 검색한 결과 꽤 많은 항목(i3status, dzen2, xmobar, polybar, Lemonbar, i3cat, conky, barmaid, sbar, yabar)을 발견했습니다.

내가 이해하는 한, 그 중 어느 것도 conky를 제외한 텍스트 입력 형식을 허용하지 않습니다.텍스트 모드에서(유니코드를 지원하지 않으며 자주 충돌합니다).

dwm은 상태 표시줄과 관련된 ANSI 입력을 허용하는 일부 패치를 언급하는 것 같지만 이를 빌드하는 방법을 이해할 수 없습니다.

태그할 ANSI

문서를 읽으면서 모든 상태 표시줄에는 구성 수준에서 정의된 자체 마크업 언어가 있다는 것을 알았습니다. (이것이 조금 이상하다는 것을 인정합니다. 유비쿼터스 HTML을 사용하지 않는 이유는 무엇입니까? 그것의 하위 집합만으로도 이미 pandoc과 같은 강력한 도구를 활용할 수 있습니다. 또한 색상 태그를 사용하여 ANSI 색상을 HTML 범위로 변환할 수 있는 도구가 있습니다.)

이들은 모두 입력을 텍스트(또는 숫자 값)로 처리하고 구성 단계에서 형식이 지정되기를 기다립니다. 제가 아는 한, 입력을 생성하는 도구는 정보를 표시할지 여부와 색상을 지정하는 방법을 스스로 결정합니다. 상태 표시줄에 제공되는 복잡한 기능을 구현하는 것 자체가 번거로울 수 있습니다.

그들은 자신의 마크업 언어를 사용하기 때문에 이를 변환할 수 있는 기존 도구를 찾지 못했습니다. 이러한 파이프라인을 설정하는 것은 입력 수준이 아닌 구성 수준에 있기 때문에 복잡해 보입니다.

터미널을 막대로 사용

이는 아마도 가장 유망한 접근 방식일 것입니다.

watch --no-wrap --no-title --colors <mycmd>제공된 "상태 업데이트" 기능 덕분에 매초마다 명령을 호출하는 것이 매우 쉽습니다.

기술적으로는 플레이가 가능할 것 같습니다.xdo 도구에 설명된 대로 X11 터미널 창을 상태 표시줄로 작동하게 만듭니다.이 답변, 그러나 i3에서는 작동하지 못했습니다.

편집하다:i3 상태 표시줄에 ANSI 이스케이프 색상으로 텍스트를 표시하는 방법(한 가지 방법 또는 다른 방법 사용)

답변1

세 번째 방법을 사용한 답변은 다음과 같습니다. 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}

관련 정보