기본 모듈이 창 이름을 출력하므로 현재 활성 창 클래스를 표시하는 사용자 지정 Polybar 모듈을 만들려고 합니다.
이 명령을 사용하여 창 클래스를 가져옵니다.
xprop -id $(xdotool getactivewindow) WM_CLASS
다음 출력을 얻습니다.
WM_CLASS(STRING) = "kitty", "kitty"
그러나 원하는 출력은 다음과 같습니다.
kitty
어떻게 해야 하나요?
답변1
다음과 같은 방법으로 벗어날 수 있습니다.
xprop -id $(xdotool getactivewindow) WM_CLASS |
awk -F '"' '{print $2}'
그러나 (더 간단하게) 다음을 사용할 수도 있습니다.
xprop -id $(xdotool getactivewindow) WM_CLASS |
cut -d '"' -f 2
또는 (경고, 정규식이 일치하지 않으면 전체 입력이 인쇄됩니다)
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed 's/^[^"]*"\([^"]*\)".*$/\1/'
또는 sed를 다시 사용하세요. 하지만 좀 더 강력해집니다.
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed -n 's/^[^"]*r"\([^"]*\)".*$/\1/p'
또는 (그렇게 강력하지는 않지만) grep을 사용하십시오(단, GNU grep 및 Perl 정규 표현식만 해당):
xprop -id $(xdotool getactivewindow) WM_CLASS |
grep -Po '^[^"]*"\K[^"]*'
이게 네가 말하는거야?
즉, 첫 번째 따옴표 쌍 안에 있는 문자열을 추출합니다. 그렇지 않으면 실패할까요?
답변2
xprop
ksh93/zsh/bash에서 참조하는 것과 매우 유사한 형식으로 문자열을 출력합니다. 여기서 백슬래시, 제어 문자 $'...'
및 비ASCII 문자는 ANSI C \\
, \n
또는 \r
기호로 표시됩니다.\t
\ooo
유일한 차이점은 큰따옴표로 묶여 있기 때문에 그 자체가 대신 및 로 "
렌더링되므로 해당 출력을 셸에서 평가할 수 있도록 변환하는 것이 그리 어렵지 않다는 것입니다.\"
'
'
\'
WM_CLASS=$'...'
그러나 xprop
16진수 값으로 출력하고 다음으로 변환하는 것이 더 쉽고 안전합니다 $'\xHH...'
.
애플리케이션 이름( kitty
예제의 첫 번째 이름):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/\\x0.*/'\''/;s/=/=$'\'/
)"
애플리케이션 클래스 이름( kitty
예제의 두 번째 이름):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/=.*\\x0\(.*\)\\x0/=$'"'\\1'/"
)"
둘 다 $WM_CLASS
쉘 변수를 설정합니다.
이는 속성에 포함된 바이트 값에 관계없이 작동합니다.
쉘 지원을 가정합니다 $'\xHH'
.
답변3
시도된 방법
xprop -id $(xdotool getactivewindow) WM_CLASS| awk '{gsub(/[","]/,"",$3);print $3}'
output
kitty
파이썬
"xprop -id $(xdotool getactivewindow) WM_CLASS" 명령의 출력은 "a" 변수에 저장됩니다.
#!/usr/bin/python
import re
a='"WM_CLASS(STRING) = "kitty", "kitty"'
b=a.split(' ')[2]
print b.replace('"','').replace(",","")