i3:指定されたワークスペースから開始するのに時間がかかるプログラムを開始する方法

i3:指定されたワークスペースから開始するのに時間がかかるプログラムを開始する方法

プログラムを起動するように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_CLASSbashを使用してwindowidを抽出します。${line##* }
  • フィルターgrep $windowname
  • ウィンドウを元のワークスペースに移動i3-msg move ..

アクティブなワークスペースにある必要があり、そのワークスペースのウィンドウに焦点を合わせる必要があります。

複数の原子ウィンドウがあり、新しい原子ウィンドウの開始と移動の間に焦点が合っていると機能しません。この場合、WM_CLASSの代わりにNET_WM_PID原子を見つける必要があります。

おすすめ記事