プログラムを起動するようにi3スタートアップファイルでデスクトップを具体的に設定できますが、そのデスクトップにプログラムを正常に割り当てずに一度だけ実行できますか?
別のワークスペースに変更することに関連する解決策があることを知っていますが、これは1つの大きな問題を引き起こします。開始時刻が「即時でない」プログラムがある場合は、プログラムが代わりに最後のワークスペースに切り替えたときに表示されます。私が望むワークスペースに表示されます。
具体的には、現在のスタートアップファイルからAtom(私を悩ませるatmプログラム)をワークスペース9に割り当てることに関する解決策を作成しました。現時点では大丈夫ですが、長期的にはお勧めできません。
assign [class="Atom"] $workspace9
exec atom
exec --no-startup-id i3-msg 'workspace $workspace9; exec
/usr/bin/urxvt'
#exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'
私は好きな方法で実行し、割り当て方法を完全に放棄するためにアトムへのコメント付きの呼び出しを取得したいと思います。
私は実際にこれが関連性があるとは思わないが、もしそうなら、私はArchベースのManjaro-Linuxを実行します。
編集:次のコードスニペットは機能しますが、最終的にAtomを開き、そのデスクトップでセッションを開始することを制限するため、この質問はまだ開いています。
#assign [class="Atom"] $workspace9
#exec atom
exec --no-startup-id i3-msg 'workspace $workspace9; exec
/usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'
また、複数のプログラムがAtomと同じ動作をしている場合は、異なるワークスペースで実行することができないという重要な欠点があります。
答え1
ウィンドウが表示されるのを待ってから、元のワークスペースに送信します。
#!/bin/bash
activeworkspace=$(i3-msg -t get_workspaces | jq -c '.[] | select(.focused) | .name' --raw-output)
atom &
windowname=atom
xprop -spy -root _NET_ACTIVE_WINDOW | \
while read line ; do
if xprop WM_CLASS -id ${line##* } | grep -q $windowname ; then
i3-msg move "[con_id=\"${line##* }\"]" $activeworkspace
exit
fi
done
jq
たとえば、まずアクティブなワークスペースを取得します。- バックグラウンドでプログラムを実行します。
atom &
xprop -spy
「プロパティ変更イベントのウィンドウプロパティを常に確認する」ために使用されます。- すべての新しいアクティブウィンドウで動作
while read line
- WM_CLASSを使用してインポートし、
xprop WM_CLASS
bashを使用してwindowidを抽出します。${line##* }
- フィルター
grep $windowname
- ウィンドウを元のワークスペースに移動
i3-msg move ..
アクティブなワークスペースにある必要があり、そのワークスペースのウィンドウに焦点を合わせる必要があります。
複数の原子ウィンドウがあり、新しい原子ウィンドウの開始と移動の間に焦点が合っていると機能しません。この場合、WM_CLASSの代わりにNET_WM_PID原子を見つける必要があります。
答え2
特定のワークスペースで特定のプログラム(Atomなど)を常に開いたい場合は、次のクラス割り当て機能を使用できます。i3 ユーザー文書
端末で実行し、xprop
ウィンドウ(Firefoxなど)をクリックして、そのクラスが属するクラスを確認します。探すWM_CLASS(STRING)
。
その後、.configファイルに次の行を追加するのと同じくらい簡単です。
assign [class="Firefox"] 2
(デフォルト)を使用してインスタンスを再起動することを忘れないでください。$Mod + Shift + r
Firefoxをいつどこで実行しても、常にWorkspace 2で開きます。 Atomを使用して同じことができるので、どこからでもデスクトップを起動できます。
答え3
コメントアウトされた呼び出しは、開始通知をサポートするアプリケーションで機能します。実際には、「ワークスペース3でiceweaselを起動(一度)」の例です。ユーザーマニュアルほぼ同じexec
コマンドがあります。
exec --no-startup-id i3-msg 'workspace 3; exec iceweasel; workspace 1'
しかし、原子開始通知がサポートされていないようですしたがって、この方法を引き続き使用する必要がありますassign
。