atalho de cópia (para a área de transferência do X) em .tmux.conf

22

Para copiar texto para a área de transferência do X no tmux, o que eu faço atualmente é:

  • vá para o modo de seleção com prefix[
  • inicie a seleção com space(usando mode-keys vibtw)
  • selecione o texto e pressione enter
  • copie o buffer tmux para a área de transferência do X usando prefixctrl+c

(Eu tenho um mapeamento como bind C-c run "tmux show-buffer | xclip -selection clipboard -i"

Estou tentando eliminar algumas dessas etapas, fazendo um mapeamento para o modo de seleção. Eu tentei:

bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"

o que me dá e erro:

.. usage: bind-key [-cnr] [-t key-table] key command [arguments]

(Não consegui copiar o erro)

Como posso consertar isso?

Edição: Percebi que posso selecionar e copiar para o buffer tmux (primeiras 3 etapas) usando o mouse como uma seleção regular (embora o destaque não dure, ele ainda seleciona o texto) e use o seguinte vínculo para copiar para a área de transferência x :

bind-key -n C-c run "tmux show-buffer | xclip -selection clipboard -i"

(Eu usei esse método para copiar este texto e foi fácil;)

note que -ndenota "sem prefixo", portanto, não é necessário escapar. se você não ficar confuso com o destaque desaparecido, isso é análogo à cópia comum (interface de usuário comum).

este é o melhor que eu criei até agora ..

EDIT2: acabou ctrl+csobreposições com coisa de interrupção do processo, então eu mudei para ctrl+alt+cpor enquanto. (não gostei muito)

EDIT3: tmux 1.8 ou mais suporte adicionado para adicionar combinações de teclas no modo de cópia, agora minha primeira intenção original é possível usando algo como:

bind-key -tvi-copy y copy-pipe "xclip -selection clipboard -i"
bind-key -tvi-copy enter copy-pipe "xclip -selection clipboard -i"

Essas duas ligações permitem copiar o texto para a área de transferência quando eu usei enterou ypara concluir a cópia.

Eu ainda mantenho essa linha no caso de fazer a cópia com o mouse e decidir obter o conteúdo do buffer tmux para a área de transferência posteriormente:

bind-key y run "tmux show-buffer | xclip -selection clipboard -i"
Nenhum
fonte
1
Você pode alterar a interrupção de ctrl-c para outra coisa usando stty. Por exemplo, para usar Ctrl-Z: stty intr=^Z. Cuidado com esse comando, é possível definir um caractere regular para ser o caractere de interrupção (se você fizer isso, use ctrl-v para inseri-lo até fixar a configuração). E não fique confuso sobre qual tecla é usada (por exemplo, ctrl-z é normalmente a tecla de suspensão).
cinzas
@ash anotou, obrigado .. mas acho que vou manter ^ca chave de interrupção, pois a uso com mais frequência do que copiar. Também atualizei a resposta para refletir minha solução atual para esse problema.
nenhum
parece bom. Observe também que muitas execuções do xmodmap podem colocar as coisas em um estado engraçado que é difícil de corrigir; portanto, recomendo começar de novo com uma nova sessão do X se o efeito dos comandos parecer incorreto.
cinzas
execução bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"ao vivo dá:Unknown command: run
Alexej Magura
1
No entanto, a execução bind-key C-c run "tmux show-buffer | xclip -selection clipboard -i"funciona bem.
Alexej Magura

Respostas:

13

Esta resposta não responde diretamente à sua pergunta sobre a criação de um atalho. Mas aqui está o que eu faço.

Você pode suspender temporariamente a transmissão dos eventos de chaves / mouse para o tmux, mantendo pressionado shift. Assim, você pode pressionar e manter pressionada a tecla Shift e atalhos regulares do usuário do terminal / X para fazer a cópia. No meu caso, usando o Terminator, pressiono shift, realce com o mouse o que quiser, copie comCtrl+Shift+C

E caso você tenha painéis divididos, é possível ampliar o painel atual com a tecla de alternância / zoom Prefix + ze executar a operação de cópia. (testado no tmux v1.8)

Muneeb
fonte
Não consegui usar isso por causa das divisões horizontais, mas o truque de zoom parece ótimo, obrigado pela dica.
nenhum
Isso funciona no terminal gnome, com certeza; mas isso se aplica a todos os emuladores de terminal? Provavelmente não
jpaugh 5/09
No terminal wsl, isso funciona. Save my day
Q