コマンドライン引数を使用して、新しいターミナルウィンドウをウィンドウマネージャまたは他のアプリケーションで一意に識別できるようにすることgnome-terminal
ができます。たとえば、次のようになります。--role
gnome-terminal --role=irc
これにより、以下のようにXウィンドウの役割が「irc」に設定されますxprop
。
WM_WINDOW_ROLE(STRING) = "foo"
GVimを使って同じことをする方法はありますか?シャンシャンが遅れてgvim --help
見たけど無駄だった。
答え1
xdotool
以下を使用してウィンドウのプロパティを設定できますWM_WINDOW_ROLE
。
$ xdotool set_window --role <ROLE_STRING> <WINDOW_ID>
WINDOW_ID
次の方法で見つけることができますPID
。
$ xdotool search --onlyvisible --pid <PID>
xdotool 2.x
この方法を使用すると、無害なエラーメッセージが表示されます。
$ xdotool search --onlyvisible --pid 16076
Can't consume 1 args; are only 0 available. This is a bug.
23068675
あなたはそれを使用することができますxdotool 3.xこのエラーを削除してください。
しかし、インスタンスを起動してウィンドウがgvim
表示されるのを待ってから、ここで新しいロール文字列を設定するカスタムラッパーを作成できます。次のように見えます。
#!/bin/sh
role="$1"
shift
gvim --nofork "$@" &
pid="$!"
window_id=
while true; do
window_id=$(xdotool search --onlyvisible --pid "$pid" 2>&1 | tail -1)
case $window_id in
''|*[!0-9]*) continue ;;
*) break ;;
esac
done
xdotool set_window --role "$role" "$window_id"
使用法:
$ ./gvim.sh FANTASTIC-NEW-ROLE <FILENAME> <OTHER-GVIM-PARAMS> <...>
この行は:
window_id=$(xdotool search --onlyvisible --pid "$pid" 2>&1 | tail -1)
xdotool 2.x
とと両方が正常に動作します3.x
。gvim
プロセスを開始してウィンドウを表示するのに時間がかかるため、ここに示すようなwhileループがsleep()
必要になることがあります。インスタンスPIDを--nofork
取得するにはオプションが必要ですgvim
。変数にコピーされた数値が含まれていることを確認する移植可能な方法この回答。
新しく作成されたウィンドウですでにある種のフックを使用している場合、たとえば悪魔スパイこのコードはあなたには適していない可能性があります。の新しいインスタンスは2つのウィンドウを作成しますが、1つだけが表示されるため、xdotool
withと一緒に使用する必要があります。たとえば、ウィンドウを別のワークスペースに移動すると、表示されなくなります。--onlyvisible
gvim
devilspie
gvim