다양한 GVim 인스턴스를 고유하게 식별하는 방법은 무엇입니까?

다양한 GVim 인스턴스를 고유하게 식별하는 방법은 무엇입니까?

를 통해 명령줄 인수를 사용하여 새 터미널 창을 창 관리자나 다른 응용 프로그램에서 고유하게 식별할 수 있도록 만들 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개의 창을 생성하지만 하나만 표시되므로 xdotoolwith와 함께 사용해야 합니다 . 예를 들어 창을 다른 작업 공간으로 이동하면 더 이상 표시되지 않습니다.--onlyvisiblegvimdevilspiegvim

관련 정보