私はi3wmを使用しています。私は複数のウィンドウを論理的にグループ化する方法を探したい。私は使用してみました:mark、title_format。i3ユーザー定義のグループ化によってウィンドウをグループ化する方法
しかし、複数のウィンドウに同じマークを設定することはできません。 title_formatを使用して複数のウィンドウを照合することもできません。
私が定義した論理グループに属する選択されたウィンドウでいくつかのコマンドを実行したいだけです。
私はこれを達成できますか?
私はi3wmを使用しています。私は複数のウィンドウを論理的にグループ化する方法を探したい。私は使用してみました:mark、title_format。i3ユーザー定義のグループ化によってウィンドウをグループ化する方法
しかし、複数のウィンドウに同じマークを設定することはできません。 title_formatを使用して複数のウィンドウを照合することもできません。
私が定義した論理グループに属する選択されたウィンドウでいくつかのコマンドを実行したいだけです。
私はこれを達成できますか?
実際にはマークを使用できます。マークはユニークであるため、特定のマークは1つのウィンドウ上にしか存在できません。しかし、con_mark
- i3
を含む任意の基準に一致すると、常に正規表現が使用されます。
したがって、ウィンドウを単一の正規表現と一致させる方法でマークするだけで済みます。例
mark groupA_1
mark groupA_2
mark groupA_3
mark groupB_7
mark groupB_8
mark groupB_9
のために不注意別のウィンドウからマークを削除しないように、一度だけ各マークを使用するように世話をするために、当然のことながら、重要です。
グループAに属するすべてのウィンドウでコマンドを実行する場合は、条件[con_mark="^groupA_"]
の前に付ける必要があります。例えば、サブストリングが一致する場合i3
に一致する基準のために、それが十分であること
[con_mark="^groupA_"] move workspace A
[con_mark="^groupA_"] kill
注意。したがって、[con_mark='a']
は、少なくとも1文字の「a」を含むマークと一致します。マーク "a"と正確に一致させたい場合は、マークの先頭に^
、マークの最後に$
を追加する必要があります。[con_mark='^a$']
。
現在設定されているマークのリストi3-msg -t get_marks
(または他のi3はIPCの実装)で取得することができ
ここでは、増分ウィンドウをマークするi3-msg
とpython
を活用し、迅速かつ汚いスクリプトです:
#!/bin/sh
i3-msg -t get_marks |
python -c '
import json
import sys
group = sys.argv[1] + "_"
marks = json.load(sys.stdin);
indices = [int(mark.lstrip(group)) for mark in marks if mark.startswith(group)] or [0]
print(sorted(indices)[-1] + 1)
' "$1" | xargs -I {} i3-msg mark "$1_"{}
これは、現在のマークのリストをPythonインラインスクリプトに渡します。 Pythonスクリプトは、グループ名($1
)を引数として取り、グループ名で始まるすべてのマークをフィルタリングし、グループ名を切り捨てて数字だけを残します。このグループのマークがまだない場合、リストには0だけが含まれます。次に、最も高い数字を取得し、1を加算して結果を出力します。結果はxargs
に渡され、i3-msg
を再度呼び出して新しいマークを作成します。
このように、これはすばやく汚れており、汚れを重視しています。おそらく、場合によってはそうです。グループに "foo"という名前を付けるには、すでに "foo_bar"という名前のマークがあります。解決のための
i3groupmark groupA
感謝: -
i3groupmark
として例えば - 最初のパラメータとして、グループ名でそれを呼び出してそれを実行可能にし、スクリプトを保存し
。私はこれについて考えましたが、私は、このようなウィンドウの数が固定されていないので、いくつかのbindsymの代わりに1つのbindsymだけでマークをインクリメンタルに生成する方法を知らない。また、手動でマークを入力するためにi3入力を使用したくないのは、あまりにも面倒です。 –私は、これを達成することができますbashスクリプトを書くことを考え出した。 –