xfce4에서 필터링된 창 목록(특정 응용 프로그램의 창만) 간에 전환할 수 있도록 키보드 단축키를 구현하려고 합니다. 필요하지 않은 창을 숨긴 다음 일반적인 창 선택 메커니즘(Alt+Tab 사용)을 사용하여 나머지 창에서 창을 선택함으로써 이를 달성하고 싶습니다.
필터링 및 숨기기가 잘 작동합니다. 내 단축키에서는 창을 xdotool
누르고 선택을 시작하는 척하는 데 사용합니다 . alt+tab
하지만 내 스크립트에서 창 선택이 완료되었는지 어떻게 확인할 수 있는지 모르겠습니다. 나중에 선택에서 제외된 창을 숨김 해제해야 하기 때문입니다.
창 선택 프로세스가 여전히 활성 상태인지 확인하는 데 사용할 수 있는 프로세스나 창 ID 또는 기타 항목이 있습니까?
답변1
이것이 귀하의 스크립트에서 어떻게 작동하는지 잘 모르겠지만 일반적으로 사용자가 를 사용하여 창을 누르고 선택한 다음 를 놓는다는 alt것을 알고 있습니다 . 이 경우 키를 놓으면 선택이 끝났는지 확인할 수 있습니다.tabalt
다양한 방법으로 X11 키보드 이벤트를 모니터링할 수 있으며 그 중 하나는 를 사용하는 것입니다 . 예를 들어 키보드에서 Alt를 xinput --test-xi2 --root
놓으면 다음과 같은 결과가 표시 됩니다.Meta_R
EVENT type 14 (RawKeyRelease)
device: 3 (9)
detail: 105
...
EVENT type 3 (KeyRelease)
device: 9 (9)
detail: 105
...
modifiers: locked 0 latched 0 base 0x9 effective: 0x8
여기서 요점은세부 사항이것이 열쇠의 키코드이고,유효한 수정자, 이벤트 전에 누른 Shift 키의 비트 마스크는 에 해당하므로 0x8입니다 mod1
. 따라서 수정자가 0이거나 세부 정보가 105인 KeyRelease 또는 RawKeyRelease(제 경우에는 중간)를 사용하여 이벤트를 찾을 수 있습니다. 테스트 또는 및 에서 xmodmap -pk
키 코드를 찾을 수 있습니다 xmodmap -pm
.
alt다음은 누르거나 놓을 때 종료되는 나에게 효과적이었습니다 .
sed -n '
/modifiers:.* 0$/q
/KeyRelease/{n;n;/ 105$/q}
' < <(xinput --test-xi2 --root)
bash 프로세스 교체 사용에 유의하세요 <()
. 파이프를 사용하면 스크립트가 파이프가 완료될 때까지 기다리게 되며, 이는 xinput
SIGPIPE가 수신된 후 이벤트에 대해서만 수행됩니다.