フローティングウィンドウでプログラムを開きたいのですが。私は試した exec emacsclient -c ; floating enable
、しかしそれはフロートの前にアクティブであったウィンドウを新しいウィンドウではなく作成しました。
これは、私がGalculatorアプリケーションに対して行った方法です。
〜/ .config/i3/config
for_window [class="Galculator" instance="galculator"] floating enable
Class = "..."とinstance = "..."の内容を確認するには、ターミナルでxpropと入力し、フロートさせたいウィンドウをクリックします。情報は、WM_CLASS(STRING)= "galculator"、 "Galculator"の下のどこかにあります。インスタンスは左側のもので、クラスは右側です。
現在フォーカスされているウィンドウをi3でフロートさせる適切な方法は、実行することです
i3-msg floating enable
これは、config行が行うことです。
今問題はそれですi3-msg
は、ウィンドウがフォーカスされる前に実行されます(フォーカスを取得する場合でも)。 Peter O.は over here PIDに基づいてウィンドウにフォーカスを合わせる方法を説明します。これをそのまま使用できます。
our_application &
pid="$!"
# Wait for the window to open and grab its window ID
winid=''
while : ; do
winid="`wmctrl -lp | awk -vpid=$pid '$3==pid {print $1; exit}'`"
[[ -z "${winid}" ]] || break
done
# Focus the window we found
wmctrl -ia "${winid}"
# Make it float
i3-msg floating enable > /dev/null;
# Move it to the center for good measure
i3-msg move position center > /dev/null;
# Wait for the application to quit
wait "${pid}";
Nota bene:
wmctrl
は、すべてのウィンドウのPIDを常に把握できるわけではありません。たとえば、ImageMagickのdisplay
のリストには、常にPID 0が含まれています。ウィンドウのタイトルを使用する変更されたアプローチについては、 ここ を参照してください。上記のソリューションの顕著な部分をスクリプトでラップすると、次のようなものを書くことができるはずです
exec our_command; grab_focus; floating enable
i3構成で。
まとめたいと思います HubbleTs post その他の汚い回避策 追加情報:
[〜#〜] tldr [〜#〜]:ショートカット定義に&& i3-msg "[id=$(xdotool getactivewindow)] floating enable"
を追加します(xdotool
が必要です)。例えば。 bindsym $mod+button exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
all ウィンドウのルールを設定して、i3-config内で設定できる、またはi3-msg
を使用して同等に送信できる基準のリストに一致させることができます。
構文はfor_window [ criteria ] command
です。あなたはそれについてもっと読むことができます ここ 。単一のウィンドウでのみ機能させる場合は、基準の一意性を確保できます。
ありません
クラス
ウィンドウクラス(WM_CLASSの2番目の部分)を比較します。特別な値focusedを使用して、現在フォーカスされているウィンドウと同じウィンドウクラスを持つすべてのウィンドウに一致させます。
インスタンス
ウィンドウインスタンス(WM_CLASSの最初の部分)を比較します。特別な値focusedを使用して、現在フォーカスされているウィンドウと同じウィンドウインスタンスを持つすべてのウィンドウに一致させます。
しかし、title
やid
のようにもっと:
タイトル
X11ウィンドウのタイトルを比較します(フォールバックとしての_NET_WM_NAMEまたはWM_NAME)。特別な値__focused__を使用して、現在フォーカスされているウィンドウと同じウィンドウタイトルを持つすべてのウィンドウを一致させます。
id
たとえばxwininfoを介して取得できるX11ウィンドウIDを比較します。
emacsclient
をコマンドラインプログラムとすると、次のように追加できます。
for_window [ title="uniquetitle" ] floating enable
あなたのi3設定にあなたの好きなターミナルを開いてください
termite -e emacsclient -t uniquetitle
フローティングモードで直接開きます。
コマンドラインプログラムではなく、タイトルオプションがない場合は、他の基準や、 (xdotool
およびi3-msg
を使用):
bindsym $mod+button exec program && xdotool getactivewindow set_window --name uniquetitle
以下の汚れ
bindsym $mod+t exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"