copyOnSelect の罠と対策 — MulmoTerminal がドラッグ即コピーを既定 OFF にしている理由

copyOnSelect の罠と対策 — MulmoTerminal がドラッグ即コピーを既定 OFF にしている理由

課題:別のページからコピーしたものが、ターミナルをなぞった瞬間に消える

別のページからエラーメッセージをコピーして、AI に貼ろうとしています。

貼る前に、ターミナルに出ている前のエラーを読み返しました。どこを読んでいるか見失わないように、指でなぞるようにドラッグしながら読みます。

貼ります。さっきコピーしたエラーが入っていません。なぞった行が入っています。

これが「ドラッグした瞬間にコピーされる」設定の副作用です。

PuTTY や iTerm2 が昔からそうなっている挙動で、便利でもあります。ただし便利さと危険が同じ操作から出ているので、既定でどちらに倒すかの判断が要ります。

既存のやり方とそのコスト

全ターミナルで同じ挙動にする

iTerm2 や PuTTY では、設定を 1 つ入れれば全ターミナルで「ドラッグ即コピー」になります。慣れている人には便利です。

ただし、

有効化は「知っている人が意図して入れる」ほうが事故が少ない設定です。

毎回キーボードでコピーする

Mac なら Cmd+C、Windows なら Ctrl+C を割り当ててコピーする運用です。

これは安全な方法ですが、ターミナルに Ctrl+C を割り当てると中断(^C)を失うという別の問題があります。MulmoTerminal の copy アクションは、選択があるときだけキーを横取りし、選択がなければシェルへ素通しするので、この副作用は起きません。

キー派は確実ですが、マウスで読みながらコピーしたい運用には向きません。

MulmoTerminal の解決:既定で OFF、有効にしても 2 つの例外は守る

MulmoTerminal の copyOnSelect は、書かない限り OFF です。

{
  "copyOnSelect": true
}

書き場所は ~/.mulmoterminal/config.json、または設定画面の Terminal keys のチェックボックスから。設定画面からなら即座に効きます。ファイルに書いたときは、サーバを再起動してからタブを再読み込みします。このファイルはサーバを起動したときに一度だけ読まれ、ブラウザはページを開くタイミングでその値を受け取る仕組みです。

なぜ既定 OFF か。 読んでいて何気なくなぞっただけで、クリップボードの中身が入れ替わるからです。有効にする判断は、この挙動を知っている人だけがすればよい、という設計です。

詳細

有効にしても、2 つの場合はコピーしない

有効にしたあとも、意図的にコピーしない例外が 2 つあります。どちらもクリップボードを守るためです。

空白だけの選択。 ターミナルの空いている場所をドラッグすると、黙ってクリップボードが空白の並びに置き換わります。損しかないので、コピーしません。インデントを本当にコピーしたいときは、キーの copy を使います。

直前と同じ文字列。 同じ行を 2 回なぞると、OS のクリップボード履歴に同じものが 2 つ積まれます。履歴ツールを使っている人には実害があるので、同一ならコピーしません。

http:// で開いていると、ブラウザが止める

ここが一番引っかかるところです。そしてアプリ側では直せません。

ブラウザのクリップボード API は、https と localhost でしか動きません。http://192.168.1.10:34567 のように IP アドレスで開いていると、ページがクリップボードに触れません。これはブラウザの安全上の決まりなので、設定では変わりません。

まったく動かないわけではなく、MulmoTerminal はキーボードショートカットと同じ経路(xterm 自身にコピーさせる)へフォールバックします。そちらは動きますが、ターミナルがキーボードフォーカスを持っている必要があります。

結果として、

「たまに効く、たまに効かない」という症状の正体はこれです。同じパソコンで見ているなら、http://localhost:34567 で開くのが答えになります。localhost は http でも例外として扱われます。別のパソコンから見るなら、この制限は受け入れることになります。

同じ制限は、他のコピー機能にも効く

覚えておくと切り分けが速くなります。http://IP で開いていると、コピーに関わる機能は全般に弱くなります。

「コピーできるはずなのにできない」に出会ったら、まずアドレス欄を見るのが最短の切り分けです。

キーの copy と併用できる

copyOnSelect を有効にしても、キーの copy 割り当てはそのまま残して構いません。キーボードで選択してコピーしたい場面もあるので、両方使えます。

copy のキーバインドは選択があるときだけ動き、選択がなければキーはそのままシェルへ届きます。これにより Ctrl+C を割り当てても中断(^C)を失わない設計です。

使ってみる

MulmoTerminal を立ち上げて、設定画面の Terminal keys を開きます。copyOnSelect のチェックボックスを入れます。即座に効きます。

ファイルに書いて永続化する場合は ~/.mulmoterminal/config.json に { "copyOnSelect": true } を加え、アプリ再起動 → タブ再読み込みです。

動作確認: ターミナルの出力をドラッグして離し、別のアプリに貼ってみて、なぞった文字列が入っていれば成功です。

効かないときは、ブラウザのアドレス欄を見ます。http://192.168... のような IP になっていれば、それがブラウザ側の制限です。http://localhost:34567 で開き直すと動きます。

やめるときはチェックを外す、または false に戻します。キーの copy 割り当ては、そのまま残して構いません。

まとめ

関連: MulmoTerminal 公式ガイドの設定ページ(copy-on-select) / MulmoTerminal の unknown keys — 設定ファイルの知らない項目を消さない / Cursor の代替としての MulmoTerminal

この記事をシェア

関連記事

記事一覧に戻る