Xbindkeys não ativa algumas teclas quando o layout do teclado é alterado

0

Eu uso xbindkeys para mapear alguns botões do mouse com as teclas.

No entanto, quando altero o layout do teclado, o xbindkeys não simula algumas teclas atribuídas no novo layout. Quando mudo para o layout anterior, funciona bem.

As combinações que param de funcionar são:

# Present desktops
"xte  'key Super_L'"
  b:10 + release

# Zoom
"xte 'keydown Super_L' 'keydown Alt_L' 'key 8' 'keyup Super_L' 'keyup Alt_L'"
  b:13 + release

Todas as chaves estão no mesmo lugar nos dois layouts diferentes.

Eu verifiquei com xbindkeys -n -v e ele ainda está reconhecendo os botões do mouse, mas xbindkeys não aciona as chaves associadas.

Com o layout en :

Button release !
e.xbutton.button=10
e.xbutton.state=16
"xte  'key Super_L'"
    Release + m:0x0 + b:10   (mouse)
got screen 0 for window d3
Start program with fork+exec call

Depois de mudar para o layout es :

Button press !
e.xbutton.button=10
e.xbutton.state=16
Button release !
e.xbutton.button=10
e.xbutton.state=8208
    
por Manuel 24.10.2015 / 18:38

1 resposta

0

Este é um bug no xbindkeys. Você precisa baixar a última fonte (1.8.6) e aplicar o patch (fix_layout.patch). Bug discutido aqui .

fix_layout.patch

From d4a943caa3d700a5edb18d5ab528e8cf7f6d54c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alberto=20S=E1nchez=20Molero?= <[email protected]>
Date: Mon, 10 Feb 2014 21:11:05 +0100
Subject: Fix keyboard layout problems - Ignore 13th and 14th bits of button
 state

Author:    Alberto Sanchez Molero <[email protected]>
---
 xbindkeys.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xbindkeys.c b/xbindkeys.c
index b0adef9..5b1b86b 100644
--- a/xbindkeys.c
+++ b/xbindkeys.c
@@ -377,7 +377,7 @@ event_loop (Display * d)
          printf ("e.xbutton.state=%d\n", e.xbutton.state);
        }

-     e.xbutton.state &= ~(numlock_mask | capslock_mask | scrolllock_mask
+     e.xbutton.state &= 0x1FFF & ~(numlock_mask | capslock_mask | scrolllock_mask
                   | Button1Mask | Button2Mask | Button3Mask
                   | Button4Mask | Button5Mask);

@@ -409,7 +409,7 @@ event_loop (Display * d)
          printf ("e.xbutton.state=%d\n", e.xbutton.state);
        }

-     e.xbutton.state &= ~(numlock_mask | capslock_mask | scrolllock_mask
+     e.xbutton.state &= 0x1FFF & ~(numlock_mask | capslock_mask | scrolllock_mask
                   | Button1Mask | Button2Mask | Button3Mask
                   | Button4Mask | Button5Mask);

-- 
cgit v1.0
    
por Viktor 16.09.2016 / 10:59