창 초점/초점 해제 시 명령을 실행하는 방법은 무엇입니까?

창 초점/초점 해제 시 명령을 실행하는 방법은 무엇입니까?

xinput disable bcm5974Gnome Terminal(및 다른 응용 프로그램)이 포커스를 얻을 때와 xinput enable bcm5974포커스를 잃을 때 실행 하고 싶습니다 .

이는 libinput과 내 맥북의 터치패드가 친구가 아니고, libinput의 팜 방지 기능이 거의 작동하지 않고, Vim에서 코드를 편집할 때 정말 불편하고 예기치 않게 스크롤되거나 터미널에 명령을 입력할 때 미치기 때문입니다.

libinput 1.1.4-1
xf86-input-libinput 0.16.0-1
ArchLinux

답변1

다음 명령은 집중된 애플리케이션의 이름을 제공합니다.

xdotool getwindowfocus getwindowname

이를 사용하여 목표를 달성하기 위한 래퍼 스크립트를 작성할 수 있습니다.

예를 들어

while [ true ]
do
  FocusApp=`xdotool getwindowfocus getwindowname`
  if [ "xTerminal" -eq "x$FocusApp" ]; then
          xinput disable bcm5974
  else
          xinput enable bcm5974
  fi
done

위의 코드는 체크 포커스 애플리케이션을 영원히 실행합니다. 예상한 결과가 나오면 실행if 조건그렇지 않으면 실행그렇지 않으면 조건.

필요에 맞게 이 스크립트를 세부적으로 조정할 수 있습니다.

답변2

xprop내 창을 가져오는 데 사용하는 클래스는 xdotool다음과 같습니다.

xdotool search --onlyvisible --classname gnome-terminal-server behave %@ focus exec xinput disable bcm5974 &

xdotool search --classname gnome-terminal-server behave %@ blur exec xinput enable bcm5974 &

이전 스크립트는 불안정하므로 @SHW의 답변을 기반으로 한 다음 스크립트가 더 좋습니다.

#!/bin/sh

[ "$(pgrep -x $(basename $0))" != "$$" ] && exit 1

while [ true ]
do
    window=`xdotool getwindowfocus getwindowname`
    is_enabled=`xinput --list-props bcm5974 | awk '/Device Enabled/{print $NF}'`
    if [ "$window" = "Terminal" -o "$window" = "Guake!" ]; then
        if [ "$is_enabled" = "1" ]; then
            xinput disable bcm5974
        fi
    else
        if [ "$is_enabled" = "0" ]; then
            xinput enable bcm5974
        fi
    fi
    sleep 1
done

관련 정보