Como executar um comando no foco da janela / unfocus?

1

Eu gostaria de executar xinput disable bcm5974 quando o Gnome Terminal (e talvez algum outro aplicativo) se concentrar, e xinput enable bcm5974 quando perder o foco.

Isso ocorre porque libinput e touchpad do meu macbook não são amigos, a rejeição de palm da libinput mal funciona, está realmente me enlouquecendo ao editar código no Vim e ele rola por acidente, ou ao digitar um comando no terminal.

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

    
por pepper_chico 21.01.2016 / 06:20

2 respostas

0

Este comando a seguir dará a você o nome do aplicativo focado

xdotool getwindowfocus getwindowname

Usando isso, você pode escrever um script wrapper para atingir sua meta.

por exemplo,

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

O código acima será executado para sempre, verificando a aplicação focada. Se obtiver o resultado esperado, execute a condição if caso contrário, execute outra condição.

Você pode ajustar este script para se adequar à sua fatura.

    
por 21.01.2016 / 08:37
0

Usou xprop para obter a classe da minha janela e xdotool como abaixo:

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 &

O anterior é instável, por isso, o seguinte script baseado na resposta do @ SHW é melhor:

#!/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
    
por 21.01.2016 / 09:22