Existe uma ferramenta para ver todos os meus níveis de interpretação de atalhos?

0

Contexto

Sou usuário do Linux há um ano. Eu aprendi a descobrir a maioria das coisas por conta própria e escrevi muitos scripts que me ajudam com o meu fluxo de trabalho. Especificamente, aprendi a usar uma quantidade extremamente grande de atalhos para realizar tarefas frequentes. É aqui que o problema começa.

Problema

Eu gostaria de poder mudar para a próxima janela em uma sessão do Tmux usando 'ctrl + Tab', e voltar para a minha janela anterior usando 'ctrl + shift + Tab' sem usando um prefixo (ctrl + b). As ligações que eu configurei em ~ / .tmux.conf é

bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window

deve funcionar, pois é a resposta aceita para o link . (a diferença é minha '-n', que provou funcionar com as seguintes ligações:

# Remap window navigation to vim-like keys
bind -n C-h select-pane -L
bind -n C-j select-pane -D
bind -n C-k select-pane -U
bind -n C-l select-pane -R

Estou tendo problemas para descobrir onde procurar. Minha observação é que o tmux não reconhece 'ctrl + shift' como um atalho mapeado. Em vez disso, 'tab' é passado para o vim (quando eu tenho o VIM aberto naquela instância do terminal), ou como 'complete' no meu interpretador de linha de comando padrão, Fish.

Sistema

Estou executando o link como minha distribuição do Linux - instalado com o GNOME do Ambiente de Área de Trabalho, mas instalado e usando o i3-wm como meu gerenciador de janelas. Meu emulador de terminal é xrvt-unicode (urxvt). Shell FISH como mencionado anteriormente.

A pergunta óbvia seria, alguém sabe por que o ctrl + shift não está sendo interpretado pelo tmux? A solução mais geral seria: alguém sabe como eu posso obter uma visão geral dos níveis de interpretação entre todos esses intérpretes de atalho?

Por exemplo:

  • As primeiras chaves são enviadas do teclado do hardware para o servidor X11
  • Então, a partir do X11, se CTRL + Tab não estiver mapeado para nada, será enviado para i3
  • Então, a partir do i3, se CTRL + Tab não estiver mapeado para nada, será enviado para o urxvt
  • Então, etc.

Gostaria de saber onde o atalho não foi interpretado e como posso corrigir isso.

Muito obrigado antecipadamente!

    
por Edwin 24.05.2018 / 10:25

1 resposta

0

É o seu emulador de terminal que está "comendo" suas chaves, porque não há nenhuma representação / escape conhecida para elas com as quais elas possam ser enviadas para o programa em execução no terminal.

Shift-Tab geralmente é mapeado para "\ e [Z" (kcbt / kB / tecla de tabulação, veja terminfo (5)), e é isso que o tmux está vendo para Shift-Tab e Control-Shift-Tab ; mas isso não importa, porque o tmux (aparentemente) não é capaz de ligar as seqüências de chaves arbitrárias aos comandos, mas apenas as chaves 'padrão' que ele conhece.

Com isso em mente, você pode configurar o urxvt para remapear Control-Tab e Control-Shift-Tab para 'Control-b n' e 'Control-b p' (as chaves padrão para a janela next / previous no tmux)

$ cat | xrdb -override
URxvt.keysym.ISO_Left_Tab: string:
$ cat | xrdb -override
URxvt.keysym.ISO_Left_Tab: string:%pre%2n
URxvt.keysym.Control-ISO_Left_Tab: string:%pre%2p
! disable the built-in control-shift
URxvt.iso14755:false
^D
2n URxvt.keysym.Control-ISO_Left_Tab: string:%pre%2p ! disable the built-in control-shift URxvt.iso14755:false ^D

"\ 002" é ^ B ou Controle-b; você deve alterá-lo se usar outro prefixo de chave no tmux (por exemplo, "\ 001" para ^ A).

Observe também que no seu servidor X, Shift-Tab pode não ser mapeado para ISO_Left_Tab; use xev (1) para ver quais chaves está realmente enviando.

Se isso funcionar, você poderá adicionar essas linhas a ~/.Xresources - e certificar-se de que o arquivo seja carregado a partir dos scripts de sessão X (o que pode não ser adequado em desktops modernos!).

    
por 31.08.2018 / 11:55