ちょっとした工夫で、tmux バッファを PuTTY 経由でクライアントに戻すことができます。「AUX」ポート(シリアルプリンター)のANSIエスケープコードを使用してこれを実現しました。
以下は、その転送方法の実装の 1 つにすぎません。
1) サーバー側tmux.conf
で、以下を追加します。
# 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) サーバー側.bashrc
で、以下を追加します。
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) クライアント側 (Microsoft Windows) で、新しいプリンターを作成します。
- プリンターを追加する
- 新しいポートを作成 > ローカル ポート
- ポート名を入力 > "
PuTTY_Printer_File
"
- ドライバー > Microsoft XPS ドキュメント ライター
- プリンター名 > "
PuTTY Printer
"
- オプション: テスト ページを印刷し、ファイル @ "
%USERPROFILE%\Documents\PuTTY_Printer_File
"の内容に表示されることを確認します。
4) クライアント側の PuTTY 構成:
- [ターミナル] > [ANSI プリンター出力を送信するプリンター:] を、新しく作成したプリンター " " に設定します
PuTTY Printer
。
- Connection > SSH > "Remote command:" を "
t
" に設定します (上記の .bashrc 関数を参照)。
この時点で、tmux のコピー モードでテキストを強調表示して を押すと、tmux バッファーの内容を PuTTY クライアントに送信できますy
。選択したテキストは%USERPROFILE%\Documents\PuTTY_Printer_File
、クライアント上で終了します。さらに一歩進んで、このファイルからの「貼り付け」をエミュレートしたい場合は、ホットキー シーケンスを使用してファイルの内容を読み取って挿入することができます。これは AutoHotKey を利用する例ですが、必要に応じて PowerShell で同じ結果を達成することもおそらく可能です。
5) クライアント側の AutoHotKey マクロ:
;### 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) 完全な使用手順:
- PuTTY でサーバーに接続し、t() 関数によって tmux にドロップされます。
- コピーするテキストを選択する準備ができたら、コピー モードの tmux ホットキーを使用します (
Ctrl + b
、[
)
- 矢印キーでカーソルを移動
- で選択を開始
spacebar
- 選択を終了し、それをコピーします
y
- PuTTY を実行しているクライアント側に戻り
WindowsKey + v
、選択内容を貼り付けます
写真は 1,000 語に相当するため、何が起こっているかの概要を以下に示し
ます。