i3:新しいウィンドウを一時的に強制的に開くことはできますか?

i3:新しいウィンドウを一時的に強制的に開くことはできますか?

ウィンドウがまもなく開かれることがわかっている状況では、時々ウィンドウが正常に開くことを望んでいますが(他のウィンドウのサイズを変更してスペースを確保するようにします)、他の場合はウィンドウを浮動状態に保ち、サイズ変更を防ぐことを望むでしょう。そのような状況の1つは、多くの端末ウィンドウが開いているときにサイズを変更するとディスプレイが複雑になるため、新しいウィンドウを短時間表示したい場合です。

少なくともこの質問の目的のために、アプリケーション固有またはウィンドウクラスルールを設定したくありません。

私が望むのは、ウィンドウが開いていると予想している間にキーを押し続けることができることです。キーを押し続けると、新しいウィンドウが強制的に浮動状態になり、他のウィンドウのサイズは変更されません。

そのようなことは可能ですか?どのように実装できますか?

答え1

これは主にi3と互換性のあるswayで私にとって効果的でした。

set $mod Mod4
set $float disable
bindsym $mod+f set $$float enable
for_window [title=".*"] floating $$float; set $$float disable

今すぐクリックすると、次のMod4+fウィンドウが開きますが、それ以降の新しいウィンドウはMod4+fもう一度押すまでタイリングされます。これはswaymsgと同じですi3msg

あなたが尋ねた維持するフローティングアクションに参加するキーです。 i3 / swayで修飾キーの状態を照会する方法がないため、一般的な方法で構成するのは難しいようです(とにかくわかりません)。フローティングモードで実行する必要があるプログラムの数が少ない場合は、次のように各プログラムに対して個別に動作を設定できます。

bindsym $mod+z exec evince
bindsym $mod+Shift+z set $$float enable; exec evince

最初の回答の基準にはすべて[title=".*"]のウィンドウが含まれます。これにより、ダイアログボックスがデフォルトでフローティング状態にならなくなるなど、予期しない問題が発生する可能性があります。影響を受けたくないウィンドウの種類を除外するには、基準を絞り込む必要があります。または、次のように機能することもできます。

set $float toggle
bindsym $mod+f set $$float enable
for_window [title=".*"] floating $$float, floating $$float, set $$float toggle

floating toggle, floating toggle効果がないはずなので、元の浮動状態を維持する必要があります。

関連情報