De man tmux
:
set-clipboard [on | external | off]
Attempt to set the terminal clipboard content using the xterm(1)
escape sequence, if there is an Ms entry in the terminfo(5)
description (see the TERMINFO EXTENSIONS section).
If set to on, tmux will both accept the escape sequence to create
a buffer and attempt to set the terminal clipboard. If set to
external, tmux will attempt to set the terminal clipboard but
ignore attempts by applications to set tmux buffers. If off,
tmux will neither accept the clipboard escape sequence nor
attempt to set the clipboard.
Note that this feature needs to be enabled in xterm(1) by setting
the resource:
disallowedWindowOps: 20,21,SetXprop
Or changing this property from the xterm(1) interactive menu when
required.
É assim que entendo a documentação; quando o Tmux recebe uma sequência codificada usando a Ms
capacidade do terminal externo:
se
set-clipboard
for definido comoon
, a sequência é usada para definir a área de transferência do terminal e um buffer Tmuxse
set-clipboard
estiver definido comooff
, a sequência não é usada para definir a área de transferência do terminal nem um buffer Tmuxse
set-clipboard
estiver definido comoexternal
, a sequência é usada para definir a área de transferência do terminal, mas não um buffer Tmux
Estou usando o XTerm (patch 322), com $TERM
definido como xterm-256color
, e aqui está sua descrição terminfo conforme relatado por $ infocmp -1x xterm-256color
. Em particular, sua Ms
capacidade é definida assim:
Ms=\E]52;%p1%s;%p2%s\007
Eu só tenho essas 3 linhas dentro ~/.Xresources
:
XTerm*termName: xterm-256color
XTerm*disallowedWindowOps: 20,21,SetXprop
XTerm*selectToClipboard: true
Eu inicio o Tmux sem configuração:
$ tmux -Lx -f/dev/null
Eu configurei set-clipboard
para on
:
$ tmux set -s set-clipboard on
Eu envio uma sequência OSC 52 para o Tmux printf
contendo o texto test on
:
$ printf '\e]52;c;%s\007' $(printf 'test on' | base64)
O resultado é que o Tmux criou um buffer interno e enviou a sequência OSC 52 para o XTerm que preencheu sua área de transferência com test on
:
$ tmux lsb
buffer0: 7 bytes: "test on"
$ xsel -b
test on
Agora eu resetei set-clipboard
para off
:
$ tmux set -s set-clipboard off
Eu envio uma sequência OSC 52 para o Tmux printf
contendo o texto test off
:
$ printf '\e]52;c;%s\007' $(printf 'test off' | base64)
Desta vez, o Tmux não criou um novo buffer interno e não enviou a sequência OSC 52 para o XTerm:
$ xsel -b
test on
$ tmux lsb
buffer0: 7 bytes: "test on"
Caso contrário, uma das saídas desses 2 comandos shell incluiria test off
.
Por fim, reiniciei set-clipboard
para external
:
$ tmux set -s set-clipboard external
Eu envio uma sequência OSC 52 para o Tmux printf
contendo o texto test external
:
$ printf '\e]52;c;%s\007' $(printf 'test external' | base64)
O Tmux não criou um novo buffer interno e não enviou a sequência OSC 52 para o XTerm:
$ xsel -b
test on
$ tmux lsb
buffer0: 7 bytes: "test on"
Caso contrário, uma das saídas desses 2 comandos shell incluiria test external
.
Entendo os resultados quando defino set-clipboard
como on
e para off
, mas não entendo o resultado quando defino como external
. Com base nesta frase da página de manual do Tmux:
Se definido como externo, o tmux tentará definir a área de transferência do terminal, mas ignorará as tentativas dos aplicativos de definir os buffers do tmux.
Eu esperava que o Tmux enviasse a sequência OSC 52 para o XTerm, sem criar um buffer interno. Na prática, ele não cria um buffer interno (esperado), mas também não envia a sequência OSC 52 para o XTerm (inesperado).
Devo ter entendido mal essa frase. Qual experimento eu poderia realizar para observar uma diferença entre os valores external
e off
?
Não, você não está muito certo. Existem duas ações controladas por esta opção:
1) O tmux define a área de transferência do X com OSC 52 (ou o que estiver em Ms)?
2) Os aplicativos dentro do tmux podem usar o OSC 52 para criar buffers do tmux?
Portanto, os três valores da opção set-clipboard significam:
Copiar texto com o modo de cópia sempre cria um buffer tmux, set-clipboard não faz diferença para isso. Existem três maneiras de criar um buffer tmux: