大きな問題ではありませんが、少し迷惑で、何よりも面白いです。私はしばらくXfce 4.12を含む信頼性の高いDebian 9システムを実行してきましたが、一度試してみるためにGNOMEデスクトップを並列に設定しています。
wmctrl -r :ACTIVE: -b toggle,above
Xfceには、フォーカスウィンドウを他のウィンドウと同じレベルの上に一貫して切り替えるカスタムキーボードショートカットがあります。
GNOME 3.22で同じシステム設定/キーボードを試しましたが、フォーカスウィンドウを別のウィンドウにだけ切り替えることができ、他のウィンドウと同じレベルに戻すことはありません。ウィンドウフレームを右クリックし、「常に上に表示」オプションの選択を解除する必要がありました。
なぜこれが起こるのか知っている人がいますか?
答え1
2016年4月にもこの事実を発見しました。解決策は、次のように2つのキーを使用して切り替えることでした。
wmctrl -r :ACTIVE: -b add,above
wmctrl -r :ACTIVE: -b remove,above
答え2
さて、多くの研究とbashで正しいコードを書く方法を見つけた後、論理層でwmctrlコマンドを使用して、現在のGNOMEデスクトップで「常に上」の状態を効果的に切り替えるコマンドを作成しました!より:
bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'
"_NET_WM_STATE"プロパティを使用してアクティブウィンドウの状態を確認します。xprops
「ABOVE」テキストが含まれている場合は、「常に上」オプションが有効になっていることを意味します。次に、引数または適切なwmctrl
コマンドを使用してコマンドを実行します。add
remove
コマンドの分析(各コマンドはプレースホルダを置き換えて次のコマンドを挿入します■
):
アクティブウィンドウIDを取得する:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
IDを使用してxpropからウィンドウの状態を取得します。
xprop -id $(■) _NET_WM_STATE
ステータスに、ウィンドウが「常に上」に設定されていることを示す「ABOVE」が含まれていることを確認してください。
[[ $(■) =~ "ABOVE" ]]
trueの場合は「削除」を返し、それ以外の場合は「追加」を返します。
■ && echo "remove" || echo "add"
戻り値を引数として wmctrl コマンドを実行します。
wmctrl -r :ACTIVE: -b $(■),above
コマンド置換、bashブール評価、正規表現一致演算子を
bash
使用できるようにコンテンツ全体をに送信します。${ ... }
[[ ... ]]
=~
bash -c '■'
特に最後のステップは、調べるのに長い時間がかかりました。 Bashでキーボードショートカットがデフォルトで実行されないことに気付くまで、これらのコマンドをテストするときにコンソールで機能する理由はわかりませんでしたが、キーボードショートカットで直接実行すると静かに失敗しました。長い間壁に付いていました!
注:bashに送信するコマンドの周りに引用符が必要なので、コマンドを作成するときは注意が必要です。 1レベルの深さには入りません(二重引用符を使用)。引用符の中に文字列をさらに入れ子にすると、引用符をエスケープするために混乱する量のバックスラッシュが必要になります。