Com alguns truques, é possível obter o buffer tmux de volta através do PuTTY e para o cliente. Eu realizei isso usando códigos de escape ANSI para a porta "AUX" (impressora serial).
Aqui está apenas uma implementação desse método de transferência:
1) No lado do servidor tmux.conf
, adicione:
# Send the tmux copy buffer to a file. The file is read for ANSI printing by "t" alias in .bashrc
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'
2) No lado do servidor .bashrc
, adicione:
t() {
# Configure a PuTTY profile to send "t" as the "Remote command". This
# function will automatically reattach to an existing tmux session if one
# exists, or start a new one. This function also repeatedly sends our
# homemade tmux clipboard back to the PuTTY client in the form of an ANSI
# printer escape sequence. The contents of the homemade clipboard are
# populated by 'bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'' in
# tmux.conf. It is expected that the PuTTY client will be configured to
# print to a "Microsoft XPS Document Writer" which saves the printer output
# to a file. The file is subsequently read by an AutoHotkey macro, and the
# contents are made available for paste.
[[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started.
{ while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } &
tmux attach || tmux
}
3) No lado do cliente (Microsoft Windows), crie uma nova impressora:
- Adicionar uma impressora
- Crie uma nova porta > Porta Local
- Digite um nome de porta > "
PuTTY_Printer_File
"
- Driver > Microsoft XPS Document Writer
- Nome da impressora > "
PuTTY Printer
"
- Opcional: Imprima uma página de teste e verifique se ela aparece no conteúdo do arquivo @ "
%USERPROFILE%\Documents\PuTTY_Printer_File
"
4) Na configuração do PuTTY do lado do cliente:
- Definir terminal > "Impressora para enviar a saída da impressora ANSI para:" para a impressora recém-criada chamada "
PuTTY Printer
"
- Definir conexão > SSH > "Comando remoto:" para "
t
" (referenciando a função .bashrc acima)
Neste ponto, você pode enviar o conteúdo do buffer tmux para o seu cliente PuTTY, destacando algum texto no modo de cópia do tmux e pressionando y
. O texto selecionado terminará em %USERPROFILE%\Documents\PuTTY_Printer_File
de volta no cliente. Se você quiser ir além e emular "colando" desse arquivo, você pode usar uma sequência de teclas de atalho para ler o conteúdo do arquivo e inseri-lo. Veja um exemplo que utiliza o AutoHotKey, mas provavelmente é possível obter o mesmo resultado no PowerShell, se você preferir.
5) Macro AutoHotKey do lado do cliente:
;### Get contents of PuTTY ANSI printer device output and paste it
#v:: ;Winkey + v
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File
SendInput %PuTTYPrinter%
PuTTYPrinter = ; Free up memory
return
6) Procedimento de uso completo:
- Conecte-se ao servidor com PuTTY e seja descartado no tmux pela função t ().
- Quando estiver pronto para selecionar texto para cópia, use a tecla de atalho tmux para o modo de cópia (
Ctrl + b
, [
)
- Mover o cursor com as teclas de seta
- Iniciar a seleção com
spacebar
- Finalize a seleção e copie-a com
y
- Voltar no lado do cliente executando o PuTTY,
WindowsKey + v
irá colar a seleção
Como as imagens valem 1.000 palavras, veja uma visão geral do que está acontecendo:
link
Links:
Minha resposta no Stack Overflow - link
Demonstração / explicação em vídeo - link