Como definir uma única tecla modificadora como um atalho na caixa aberta?

4

Eu quero que minha super-chave inicie dmenu . Eu o configurei como um atalho de teclado no meu rc.xml da seguinte forma:

<keybind key="0xffeb">
      <action name="Execute">
        <command>dmenu_run</command>
      </action>
</keybind>

Eu tentei especificá-lo no atributo key como W , W- e 0xffeb , mas nenhum deles funcionou.
W responde pressionando a letra w , e o outros parecem não fazer nada.

Eu quero que o atalho seja acionado quando a tecla super for pressionada e liberada por conta própria. Isso é possível?

Isso é cruzado do superusuário conforme o diretrizes aqui . Eu li esta pergunta: Super chave como atalho - Openbox , mas não vi nenhuma informação útil em isto.

    
por gandalf3 09.07.2015 / 22:08

2 respostas

5

Acabei usando o xcape , um utilitário projetado para fazer exatamente isso:

xcape allows you to use a modifier key as another key when pressed and released on its own. Note that it is slightly slower than pressing the original key, because the pressed event does not occur until the key is released.

Citado no leiame do xcape

Usando o xcape, você pode atribuir a imprensa e liberar uma tecla modificadora para uma tecla diferente ou até mesmo uma sequência de teclas. Por exemplo, você pode atribuir Super para um atalho de espaço reservado como ⎈ Ctrl ⇧ Shift ⎇ Alt Super D com:

xcape -e 'Super_L=Control_L|Shift_L|Alt_L|Super_L|D'

Agora, quando você pressionar e soltar Super sem pressionar nenhum outro chaves, o xcape irá enviar eventos de teclado simulando pressões de ⎈ Ctrl ⇧ Shift ⎇ Alt Super D (mantendo todas as teclas modificadoras pressionadas como se você as pressionasse como um atalho). / p>

Se você pressionar Super e outra chave (ou segure Super muito longo, o tempo limite padrão é 500 ms), o xcape passará os eventos do teclado, sem disparar chaves extras.

Se você colocar o atalho de espaço reservado em rc.xml , ele será executado quando Super e somente Super é pressionado.

<keybind key="C-A-S-W-d">
      <action name="Execute">
          <command>dmenu_run</command>
      </action>
</keybind>

Outros atalhos envolvendo Super não serão afetados.

Note que você terá que rodar o xcape toda vez que inicializar, então você pode querer colocá-lo em algum lugar como ~/.config/openbox/autostart onde ele será executado automaticamente.

    
por 11.07.2015 / 13:00
2

Execute xev e pressione sua super-chave para obter o nome da chave apropriada. O meu é Super_L de acordo com a saída:

KeyRelease event, serial 48, synthetic NO, window 0x3600001,
    root 0x91, subw 0x0, time 1648471775, (167,-8), root:(927,138),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Assumindo que o seu é o mesmo, isso deve funcionar com um único pressionamento de tecla da superchave (também conhecida como tecla windows):

<keybind key="Super_L">
      <action name="Execute">
        <command>dmenu_run</command>
      </action>
</keybind>

Salve o arquivo e execute killall -SIGUSR2 openbox para recarregar a configuração.

Como um aparte, estou trabalhando no arquivo de configuração para o usuário local em $HOME/.config/openbox/lxde-rc.xml . O uso de W é registrado apenas como superchave quando usado em combinação, mas Super_L funciona sozinho, em vez de ser lido como a letra w .

    
por 11.07.2015 / 10:03