ConfirmChangePasteで任意の文字列を指定する機能について
具体的にどのような設定と使用イメージを期待していますか?
現在の実装としては、ペースト処理の直前に strspn(3) を使って、文字列の中に"\r"もしくは"\n"が1バイトでも含まれているかをチェックしています。
たとえば reboot とか halt など任意の文字列を複数「危険な文字列」として定義し、それを貼り付けないようにして欲しい、ということだと解釈しました。
あくまで個人的な感覚であると断って書きますが、コンピュータは思った通りにではなく操作したとおりに動きます。クリップボードに何が入っているか脳内にバッファを持たず、ノーチェックで貼り付けてしまうような不注意な人が、そのコマンドを実行できる権限を持っていること自体が、危険予測が出来ていない状態だと思います。
TeraTermの長所でもあり欠点なのが、マウスで端末をなぞった(ドラッグ)しただけ、クリップボードへコピーされてしまう、というのがあります。 意識せずに、マウスが画面にあたってしまう場合もあるので、ケースバイケースかなと思います。
>yutakaponさん
ちょっと大げさになるかもしれませんが、考えていた状況をなるべく具体的に書くと、
プログラムは全然書けないんですが、strspnのmanを読んでみた感じ、 複数の候補にマッチ判定させようとするとやはり大変そうでしょうか・・・
>mayaさん
おっしゃる通りで、耳が痛いところです。 平常時のオペミスは注意とか研修とか、そういったもので防いでいくべきだと思います。
ただ、人の判断能力がぐらつく状況も少なからずあり、例えば夜通しのメンテナンスの終わり際なんかには意識が朦朧としていることもあります。 そういうシチュエーションでの歯止めとして機械的にアラートがあがるとすごく助かるかな、 というのを想定しています^^
>プログラムは全然書けないんですが、strspnのmanを読んでみた感>じ、複数の候補にマッチ判定させようとするとやはり大変そうでし>ょうか・・・
所詮は、C言語のアプリなので、技術的には難しくはないです。どちらかというと課題は、「どのようなUI」にするかというところだと思います。
従来の、 ・文字列に改行コードが1byteでも含まれていれば 警告を出すという仕様に加えて、今回の要望の機能をどのようにあてはめていくか、ユーザを混乱させない仕様にできるかがポイントです。
指定した文字列が含まれていた場合、改行コードの扱いはどうするのかといったあたりを考える必要があります。
そういう意味では、設定画面に選択肢を1個増やしてしまうのがユーザ側からすればわかりやすいでしょうか。
----コピーと貼り付けの設定---- ○危険なクリップボードの貼り付けを確認する ○外部ファイルで任意の文字列を指定 ファイルのパス: [参照] ↑ラジオボックス ------------------------------
既存のConfirmChangePasteに関しては"\r" or "\n"のみ検出で、 これと同時に選択できない選択肢として”任意の文字列を指定”というのを用意して、 その中で改行コードも指定できるように作ってしまうイメージです。
今のバージョンの設定で使いたい人は上にチェックを入れて、 私のような使い方をしたい人は下をチェックするようにできれば、 住み分けできるような気がします。
外部ファイルの指定を独立したオプションとして、ラジオボタンじゃなくてチェックボックスでもいいかもしれません。
改行が含まれなくても外部ファイルの中身をすべて strstr で検索して、含まれていれば ConfirmChangePaste と同じく確認ダイアログを出す、とかでどうでしょうか。
ユーザの混乱を避けるという意味合いでスパッと竹を割ったような設定になるようにラジオボタンを例に挙げてみましたが、確かに必要というわけではないですね。
”独立したオプション”っていうのはつまりこういうことでしょうか。
・ConfirmChangePasteのチェックボックスが今まで通りあって、チェックを入れると今まで通りstrspnで改行チェックが働く。
・もう一個チェックボックスが増えて、チェックすると外部ファイルを読んでstrstr関数で検索。
・どちらか片方だけチェックした場合は片方だけ動作して、二つ同時にチェックすると両方機能する。 (2番目の機能(外部ファイル)では改行を指定できないことと仮定)
・どちらの機能にヒットしても、ConfirmChangePaste機能の確認ダイアログが出る。
こういう動作なら、それも私の期待通りですので、私としてはハッピーです。 外部ファイルに登録できるものをどこまで広げるかによってだいぶユーザの理解度は変わってきそうですが、 仮にアルファベットと数字だけとすれば問題なさそうでしょうか。
実験的に、実装をしてみました。GUIは未。 お試し下さい。
http://ttssh2.sourceforge.jp/snapshot/snapshot-20090626.zip
テキストファイルは、teraterm.iniの ConfirmChangePasteStringFile で指定します。
使ってみました。 すごくいいですね。動作はイメージどおりです。
試しに10万行のリストをローカルに置いて使ってみましたが、ディレイが感じられなくて驚きました。
kentakenta への返信
使ってみました。 すごくいいですね。動作はイメージどおりです。
評価どうもありがとうございました。 4.63の新機能としてサポートすることにします。GUIに関しては、時間あるときに対応できれば、と思います。
試しに10万行のリストをローカルに置いて使ってみましたが、ディレイが感じられなくて驚きました。
ヒットした文字列が、ファイルの上の方にないでしょうか? 末尾にあると、検索に時間がかかるはずです。
GUIからの設定を追加しました。お試しください。
4.63がリリースされましたので、本件はクローズします。
4.63で設定画面も含めて試させていただきました。
直近のリリースに無理して間に合わせてもらった感があって大変恐縮してます^^;
フィードバックに十分協力できたか不安ですが、
ご対応、本当にありがとうございました。
ConfirmChangePasteに関して、
機能リクエスト内容
・ペースト時に改行コードがあるとダイアログが出る
↓
・ペースト時にダイアログを出す条件として任意文字列を指定できる
このようにしていただくことは可能でしょうか?
リクエストの背景
ConfirmChangePaste機能のおかげで、ターミナル上のコピーペーストミスがなくなり大変助かっています。
しかし、複数行ペーストしてしまう事と並んで、単に不適切なコマンドがコピペで打ち込まれているケースも多く、
これについても何とかできないものかと考えています。
.iniファイルor外部ファイルに、ペースト時に注意を促したいコマンド・文字列を登録できるようになれば、
windows側の設定だけで、接続先のプラットフォームによらない柔軟なミスオペ対策や、
場合によっては権限管理も可能になると思い、リクエストにいたりました。
tera term自体に組み込むべき機能かどうかという議論はあるかと思いますが、 ご検討いただければ幸いです。