Tmux 2.4+ com ligações no modo de cópia vi e xclip :
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"
Para versões mais antigas do tmux, ligações do modo de cópia do emacs (o padrão) ou plataformas não-X (ou seja, sem xclip), consulte a explicação abaixo.
Explicação: Primeiro, precisamos ativar a opção do mouse para que o tmux capture o mouse e vamos vincular os eventos do mouse:
set-option -g mouse on
O Gnome-terminal não suporta a configuração da área de transferência usando sequências de escape xterm, portanto, devemos garantir que a set-clipboard
opção esteja desativada:
set-option -s set-clipboard off
Esta opção pode ser suportada e ativada por padrão no iTerm2 (consulte set-clipboard
o manual do tmux), o que explicaria o comportamento lá.
Podemos então vincular a MouseDragEnd1Pane
"chave" do modo de cópia , ou seja, quando o primeiro botão do mouse é liberado após clicar e arrastar em um painel, para um comando tmux que pega a seleção atual do modo de cópia (feita pela ligação padrão para MouseDrag1Pane
) e o canaliza para um comando shell. Este comando tmux era copy-pipe
anterior ao tmux 2.4 e desde então foi alterado para send-keys -X copy-pipe[-and-cancel]
. Quanto ao comando shell, precisamos simplesmente de algo que defina o conteúdo da área de transferência do sistema para o que for canalizado para ela; O xclip é usado para fazer isso nos seguintes comandos. Algumas substituições equivalentes "xclip -selection clipboard -i"
abaixo em plataformas não-X são "wl-copy"
(Wayland), "pbcopy"
(macOS), "clip.exe"
(Windows, WSL) e "cat /dev/clipboard"
(Cygwin, MinGW).
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"
Tmux 2.2 a 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"
Antes do tmux 2.2:
O suporte para copiar após arrastar o mouse foi adicionado originalmente no Tmux 1.3, configurando a nova mode-mouse
opção para on
. O Tmux 2.1 alterou o suporte do mouse para as ligações de teclas familiares do mouse, mas não tinha DragEnd
ligações, que foram introduzidas na 2.2. Portanto, antes da versão 2.2, acredito que o único método de definir a área de transferência do sistema ao arrastar o mouse era através do uso interno de sequências de escape xterm (a set-clipboard
opção). Isso significa que é necessário atualizar para pelo menos o tmux 2.2 para obter o comportamento de arrastar e copiar para terminais que não suportam set-clipboard
, como o GNOME Terminal.