クリップボードのスタック履歴化について

  1. Vz-likeなコンソールテキストエディタneのUTF-8対応版n8を見つけ、Vzはカット&コピー&ペーストのスタック履歴が便利だったなと思いだし、Meryでも実現できないか試行してみました。

    https://github.com/nanshiki/n8

    Mery独自のクリップボード履歴をマクロで操作できればよかったのですが、マクロリファレンスを見てもそんな機能はなさそうでした。

    https://www.haijin-boys.com/wiki/マクロリファレンス:ClipboardData_インターフェイス

    なのでMeryのクリップボード履歴を無効化し、フリーソフトのCopyQのコマンドレットでやってみました。
    CopyQはクロスプラットフォーム(Windows,Mac,Linux)の高機能クリップボード履歴ソフトです。

    1、CopyQのメイン画面を開く
    2、F6を押して「コマンド」ダイヤログを開く
    3、左上の「+追…)」ボタンを押して、「コマンドを追加」ダイヤログを開く
    4、左上の「新しいコマンド」をダブルクリック
    4、名前(N)に「貼り付けて履歴から削除」と入力
    5、コマンド(D)に以下を入力

    copyq:
    try {
        select(0)
        paste()
        remove(0)
    } catch (e) {
        abort()
    }
    

    6、「グローバルショートカット」を選択し、任意のキーバインドを登録
    7、「OK」で閉じる

    以上で、登録したキーバインドでクリップボードスタックの貼り付けが実現できます。

    CopyQはWindows環境で長らくメモリリークのバグがあり、サスペンドで一週間ぐらい起動し続けると1GB超メモリを浪費し常用しにくかったのですが、Ver15以降で直って軽く使いやすくなりました。

     |  enaka  |  返信
  2. 情報共有ありがとうございます。

    > Mery独自のクリップボード履歴をマクロで操作できればよかったのですが、マクロリファレンスを見てもそんな機能はなさそうでした。

    参照されているマクロリファレンスは v2 系のものですね。

    v3 系のマクロリファレンスはこちらになります。(MeryWiki → マクロリファレンス → 「Mery Ver 3.0.0 以降のマクロリファレンスはこちら」のリンクからも辿れます)

    https://www.haijin-boys.com/wiki/マクロリファレンス:3:ClipboardData_オブジェクト

    v3 系では、ClipboardData の各メソッドの第 2 引数にインデックス番号を指定できるようになっており、特定のクリップボード履歴を操作できます。

    たとえば、「先頭の履歴を貼り付けて、その履歴を削除する」という処理であれば、こんな感じで実現できます。

    document.selection.Text = clipboardData.GetData("Text", 0);
    clipboardData.ClearData("Text", 0);
    

    とはいえ、Mery のクリップボード履歴機能はどちらかというとオマケ程度の機能なので、本格的に活用するのであれば、やはり CopyQ のような専用ツールのほうが便利だと思います。

    > CopyQはWindows環境で長らくメモリリークのバグがあり、サスペンドで一週間ぐらい起動し続けると1GB超メモリを浪費し常用しにくかったのですが、Ver15以降で直って軽く使いやすくなりました。

    最近の Windows 環境だと、PC をスリープやサスペンドのまま何日も使い続けることも珍しくないので、その問題が解消されたのはありがたいですね。知らなかったので参考になりました。

    あと、Windows 10 以降では Windows キー + V で利用できる OS 標準のクリップボード履歴機能もあるので、Mery のクリップボード履歴機能の出番は少なくなってしまいましたね。

     |  Kuro  |  返信
  3. 追伸です。

    クリップボード履歴が空の場合に何もしないよう、こんな感じで書いておくと安心かもしれません。

    var s = clipboardData.GetData("Text", 0);
    if (s !== "") {
        document.selection.Text = s;
        clipboardData.ClearData("Text", 0);
    }
    
     |  Kuro  |  返信
スポンサーリンク