Copie a seleção para uma área de transferência no tmux

14

Se eu selecionar texto com um mouse no tmux no iTerm2 no macOS, recebo o texto selecionado na minha área de transferência. Não preciso clicar em nenhum botão extra - basta selecionar o texto desejado e pronto.

UmagravaçãomostrandoocomportamentodotmuxnoiTerm2

Eutesteiotmuxnoterminal.appnomacOS,maselenãofunciona-eutenhoqueusaryparacopiaraseleçãoparaaminhaáreadetransferência.

Eupenseiqueháumaligaçãodemouse(algocomoMouseOnSelectionsemelhanteaMouseDown1Pane),masnãoconseguiencontrarnadadeútilnawebemantmux.

GostariadesaberseexisteumamaneiradeterumcomportamentosemelhantenoUbuntu16.10-depreferêncianoterminaldoGnome.

Meusdotfilestmuxestãodisponíveis aqui (link) .

    
por Mateusz Piotrowski 03.03.2017 / 14:33

3 respostas

23

Tmux 2.4 +:

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -se c -i"

Antes do tmux 2.4:

set-option -g mouse on
set-option -s set-clipboard off
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -se c -i"

Explicação: Primeiro, precisamos ativar a opção do mouse para que o tmux capture o mouse e nos permita vincular os eventos do mouse:

set-option -g mouse on

O terminal Gnome não suporta a configuração da área de transferência usando seqüências de escape xterm, portanto, devemos garantir que a opção set-clipboard esteja desativada:

set-option -s set-clipboard off

Esta opção pode ser suportada e ativada por padrão no iTerm2 (veja set-clipboard no manual do tmux), o que explicaria o comportamento lá.

Podemos, então, vincular o modo de cópia MouseDragEnd1Pane "key", ou seja, quando o primeiro botão do mouse é liberado depois de clicar e arrastar em um painel, para um comando tmux que usa a seleção atual do modo de cópia ligação para MouseDrag1Pane ) e canaliza para um comando shell. Este comando tmux era copy-pipe antes do tmux 2.4, e desde mudou para send-keys -X copy-pipe[-and-cancel] . Quanto ao comando shell, simplesmente precisamos de algo que defina o conteúdo da área de transferência do sistema para qualquer coisa que seja canalizada para ele; O xclip é usado para fazer isso nos seguintes comandos.

Tmux 2.4 +:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Antes do tmux 2.4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
    
por 03.03.2017 / 23:42
5

Como extensão da resposta aceita, as pessoas geralmente acham perturbador quando o botão do mouse sai do modo de cópia (é o que acontece com copy-pipe-and-cancel ). Veja: link . Portanto, no mais novo tmux (eu uso 2.6), podemos usar copy-pipe junto com clear selection para copiar para a seleção, mas não sair do modo de cópia:

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection
    
por 18.10.2017 / 10:38
1

Estendendo as duas respostas para copiar de msys2 para a área de transferência do Windows (e limpar a seleção):

# For vi copy mode bindings
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
# For emacs copy mode bindings
bind -Tcopy-mode MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
    
por 29.11.2017 / 17:32