実現したいこと
teratermにはターミナルにalt+vなどで貼り付けの動作をしたときに、クリップボードの中身を表示させる機能があります。
一般的な設定では、クリップボード内が複数行の場合に表示されると思います。
teratermのように他のターミナルでも、複数行の貼り付けをした際に確認画面が表示されるようにする方法を紹介します。
但し、teratermのように確認画面内で内容の修正ができるというところまでは残念ながらできませんのでご了承ください。
AutoHotkeyの設定
確認画面表示を実現させるためにAutoHotkeyを利用します。
基本的なAutoHotkeyの利用方法などについては割愛します。
設定ファイルには以下のように設定します。
※以下はminttyの場合の設定です。
MaxLineCount は警告画面に表示させる最大行数です。任意に書き換えていただいて構いません。
; minttyでクリップボードが複数行の貼り付けをしようとするときに確認画面を表示する
CopypasteMsgbox() {
;改行をデリミタとしてstrout変数にクリップボードの内容を配列として格納
StringSplit, strout, clipboard, `n
line = ---------------------
MaxLineCount = 40
;要素数が1を超える(2以上)の場合は警告画面を表示する
If(strout0 > 1) { ; コピーしたテキストが2行以上の場合
Loop, parse, clipboard, `n, `r
{
LineCount += 1
If(LineCount = MaxLineCount) {
ClipboardContext = %ClipboardContext%%A_LoopField% .........`n
break
}
ClipboardContext = %ClipboardContext%%A_LoopField%`n
}
MsgBox, 308, 貼り付け警告, %line%`n%ClipboardContext%%line%`n`n全%strout0%行の内容を貼り付けますか?
Haystack = %clipboard%
Needle = \n
StringGetPos, pos, Haystack, %Needle%
if pos >= 0
MsgBox, The string was found at position %pos%.
; Yesを選択した場合、貼り付け実行
IfMsgBox, Yes
{
send, +^v
}
} else {
; 要素数が1行の場合は画面を表示せず貼り付け
send, +^v
}
}
;classがminttyの場合
#IfWInActive,ahk_class mintty
;ctrl+shift+vを押下したときの動作
+^v::
CopypasteMsgbox()
#IfWInActive
return
;shift+Insを押下したときの動作
+Ins::
CopypasteMsgbox()
#IfWInActive
return
画面イメージは以下のようになります。
#IfWInActive,ahk_class mintty
上記の部分を変更すればmintty以外のターミナルでも同様に確認画面を表示させることができると思います。
ahk_class は WindowSpy(AutoHotkeyをインストールしたフォルダにある AU3_Spy.exe)を利用することで確認することが可能です。