_NET_WM_WINDOW_TYPEなどのEWMH属性をユーザーに設定しますか?

_NET_WM_WINDOW_TYPEなどのEWMH属性をユーザーに設定しますか?

たとえば、rofiは次のように実行されます(またはコードで理解されているように、そうでなければ親ウィンドウから継承されます)。しかし、i3とpicomの設定では、クラス名と一致するよりも一般的なことをしたいと_NET_WM_WINDOW_TYPE_NORMAL思います。_NET_WM_WINDOW_TYPE_POPUP_MENU

できることを知っていますが、xprop -setどのように/どこで行うべきですか?それとも、これらすべてが虐待であり、私が違うことをするべきですか?

答え1

Matrix / IRCチャンネルでManuele Torre(emanuele6)と話した後、彼は次のソリューションを提案しました。

rofi -show &
rofi_pid=$! rofi_wid=$(xdo id -mp "$rofi_pid") &&
   xprop -id "$rofi_wid" \
         -f _NET_WM_WINDOW_TYPE 32a \
         -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_POPUP_MENU

インマヌエル書の第6章の引用:

デフォルトでは、exec rofi...&はrofiコマンドです。 rofi_pid=$! は新しい rofi プロセスの pid です。 rofi_wid=$(xdo id -mp "$rofi_pid") 対応する _NET_WM_PID を持つウィンドウが存在するまで待ってから wid に出力します。最後に、原子を好きなように設定するxprop

これは設定されますが_NET_WM_WINDOW_TYPE(少なくとも私にとっては)Picomはアニメーションを適用しません(ウィンドウがまだマップされているかどうかはわかりません)。

他のオプションはrofiフラグを使用することです。-normal-window

私はbspwmを使用しているので、rofi ... -normal-windowexternal_rulesで次のように設定しました。

# rofi set _NET_WM_WINDOW_TYPE
# bspwm doesn't manage these windows because rofi overrides redirect by default
case "$class" in
  (*Rofi*)
    #echo "manage=off" #this will break rofi focus don't use this
    echo "layer=above"
    echo "focus=on"
    echo "state=floating"
    xprop -id "$wid" \
          -f _NET_WM_WINDOW_TYPE 32a \
          -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_POPUP_MENU
  ;;
esac

関連情報