クリップボード履歴についての要望

  1. テキストファイルから、別のテキストファイルに複数の値を「まとめて」コピーペーストするときに、使っています。

    そのとき、すでに貼り付けた値を、できるだけ簡単に履歴から消せたら助かる
    シチュエーションが結構あったりします。

    例えばですが、履歴の選択項目で左クリックしたときは、今まで通りで、
    右クリックしたら、貼り付けと同時に、貼り終えた履歴を削除するような機能があると助かるなと思いました。

    ご検討いただけると助かります。

    ところで、代替で以下のようなことってマクロの機能にありましたっけ?

    1.先頭(または最後)の履歴を、カーソル位置に挿入
    2.先頭(または最後)の履歴を消す

     |  tak  |  返信
  2. ご意見ありがとうございます。

    クリップボード履歴機能ですが、Windows 10 October 2018 Update 以降、OS の標準機能でクリップボード履歴機能が搭載されましたので Mery のクリップボード履歴機能は今後廃止する方向です。

    Windows 10 のクリップボード履歴機能はあまり知られていない機能かもしれませんが、便利なのでぜひそちらをご利用ください。

    > ところで、代替で以下のようなことってマクロの機能にありましたっけ?
    >
    > 1.先頭(または最後)の履歴を、カーソル位置に挿入
    > 2.先頭(または最後)の履歴を消す

    前述の理由により、マクロからクリップボード履歴を操作する機能も提供する予定はありませんがご了承くださいませ。

     |  Kuro  |  返信
  3. 横から失礼します
    > Mery のクリップボード履歴機能は今後廃止する方向です。
    出来れば残して欲しいですね
    隠し機能やプラグインに分離とか
    xpでクリップボードソフトも入れてますが
    ウィンドウが邪魔だったりして結局Mery のクリップボード履歴機能を使うことが多いです
    なにげにクリップボード履歴機能で改行コードが見れるのもいいですね

     |  o  |  返信
  4. > クリップボード履歴機能ですが、Windows 10 October 2018 Update 以降、OS の標準機能でクリップボード履歴機能が搭載されましたので Mery のクリップボード履歴機能は今後廃止する方向です。
    ひえぇ…。:o

    まあ、現在のペースト用としての「クリップボード履歴」ポップアップメニューとほぼ同等の機能なら、include ライブラリの IO クラス経由で外部ファイルを利用するマクロに置き換えることもできそうかしら?
    拙作のマクロ関数 GetIniOption を組み込めば Mery 本体のオプション設定項目「クリップボード履歴を有効にする」の ON/OFF も反映させられそうですよね。
    クリップボード履歴の代替ポップアップメニューマクロ(ペースト用)なら、やろうとおもえば、「すべての履歴をクリアする」コマンドを追加したり、GetKeyState.exe と組み合わせて Ctrl+クリックなどで「履歴から任意の項目を削除する」こともできそうな気もします。

    ただ、クリップボード履歴の代替マクロを運用する前提として「コピー」関係の各種コマンドもすべて「テキストデータを外部ファイルに書き出すマクロ」に置き換える必要が出てきちゃいますから、それぞれマクロのコードを登録して右クリックメニューやショートカットキーもすべて変更しなければなりませんね。
    もしこれらのマクロを作ったとしても、マクロを導入する側にとってもけっこうな大仕事を強いることになりそうですし、環境次第でレスポンスの悪い使いづらいマクロになりそうですね 。

     |  sukemaru  |  返信
  5. > 出来れば残して欲しいですね

    Mery のクリップボード履歴機能は Office のクリップボード機能と競合したり、他のクリップボード履歴監視ソフトと競合することがあるので、クリップボード履歴機能については専用のソフトのご利用をおすすめします。

    また、Mery のクリップボード履歴機能は Mery.exe のプロセスのメモリ領域を使用しますので、大きなテキストをコピーしてしまうと動作速度が遅くなる原因となったり、32 ビット版だと 1 プロセスあたりメモリ 2GB までの制限に引っかかってメモリ不足エラーが発生したりすることもありますから、クリップボード履歴管理は別のソフトに任せたほうが快適だと思います。

    CLCL というクリップボード履歴ソフトが使い勝手が良くて評判が良いようですよ。XP にも対応していたはずです。

    > もしこれらのマクロを作ったとしても、マクロを導入する側にとってもけっこうな大仕事を強いることになりそうですし、環境次第でレスポンスの悪い使いづらいマクロになりそうですね 。

    そうですね。そこまでして Mery 上でクリップボード履歴を管理する必要があるかという疑問はありますが、「テキストデータを外部ファイルに書き出すマクロ」のようにコピーした内容をメモリ上ではなく外部ファイルに保存する仕組みだと、クリップボード履歴がメモリを圧迫する心配はなさそうですね。

    しかし Windows 10 のクリップボード履歴機能は手動で履歴を個別に削除もできますし、ピン止めして OS 再起動後も覚えててくれたり、他の端末にクリップボードの内容を同期できたりしてとても便利ですので、やはり Mery のクリップボード履歴機能は廃止したいところです。

     |  Kuro  |  返信
  6. > 「テキストデータを外部ファイルに書き出すマクロ」のようにコピーした内容をメモリ上ではなく外部ファイルに保存する仕組みだと、クリップボード履歴がメモリを圧迫する心配はなさそうですね。
    まだ着手前の構想段階ですが、既存のマクロの Paste メソッドとのからみも出てくるはずですので、コードとしては document.selection.Copy/Cut() と IO.SaveToFile() の両方を併記することになるとおもいます。
    あるいは、任意のデータを個別に削除できるようにするなら履歴データ全体をひとつの配列オブジェクトにするほうが簡単そうな気がしますので、 IO.SaveToFile() ではなくて IO.Serialize() で JSON ファイルに書き出すほうが無難なのかしら?
    いずれにせよ、Mery 本体のクリップボード履歴機能がなくなるという前提ですから、履歴の累積によるメモリの圧迫は一応なくなるはずですね。

    例によってマニアックでコードが汚くて長い実験的マクロ(← たんに ”不具合だらけ" とも)になるでしょうから、非公開の自家用テスト版のままで終わりそうな気がします。 というか、その「テスト版」ですら作りたくないですが…。 LOL
    「コピー/切り取り/貼り付け」系全般にわたって外部ファイル連携のマクロにするには JS ファイルいくつ分になるのかもわかりませんし、当分のあいだはバグだらけのマクロになるという確定的未来予想図がみえているので継続メンテするのは、考えるだに気が重いという。 XD

     |  sukemaru  |  返信
  7. Kuroさん回答ありがとうございます
    なるほどメモリに影響があるのですね
    了解しました
    残念ですが
    今後クリップボード履歴ソフトを使うことにします

    またクリップボード履歴ソフトの紹介もありがとうございます
    一応、定型文などは履歴ソフトを使ってますが
    画面が小さく重なるので
    クリップボード履歴ソフトだと
    ウィンドウの切り替えが必要なんですが
    ショートカットキーAlt Tabの切り替えが
    反応が遅かったり切り替わらないとかあるんですよね
    CLCLも同様でした
    なので
    保存しないものは
    Mery のクリップボード履歴機能が
    便利だったので常用してました

     |  o  |  返信
  8. 自分はCopyQってのを使ってます。データタイプ(text,html,richtext,imageなど)や中身(正規表現での指定など)によってコピー時に自動で仕分けしてタブで整理したり、スクリプトでカスタマイズも可能なので便利です。LIFO的な事も出来ますし、一つずつコピーして、任意に選択してまとめて貼り付けなんかもできます。

    定型文もタブでまとめておけば選択も楽ですね。CopyQの呼び出しを任意のキーに割り当てておけば切り替えも楽です。

    クリップボード関係は、アプリ固有の機能ではなく独立したものを使う方が汎用性があっていいかなと個人的には思ってます。

     |  とおりすがり  |  返信
  9. 仕方ないですね。流れでしょうか。

    右クリックなどで出せるのが便利だったのですが、
    javascriptでエディタにWindowsキーを送るようなことって出来ましたっけ?

     |  tak  |  返信
  10. >> とおりすがりさん

    これは良いツールですね!
    今まで Clibor 使ってましたが、しばらく CopyQ 試してみようかなと。
    感触がとても良いので、このまま乗り換えることになりそうな予感です。

    クリップボード履歴にアクセスする動作はその仕組み上、Excel マクロのクリップボード取得操作と衝突してしばしばエラーを吐くこともあるんですよね。
    それに外部ツールでクリップボード管理をする方が汎用性も機能のメンテナンス性も高いでしょうし、割り切って廃止するのも悪くないかなーと私は思います。

     |  yuko  |  返信
  11. みなさんご意見ありがとうございます。
    クリップボード履歴機能、そういった需要もあるのですね。

    > なるほどメモリに影響があるのですね

    > クリップボード履歴にアクセスする動作はその仕組み上、Excel マクロのクリップボード取得操作と衝突してしばしばエラーを吐くこともあるんですよね。

    そのあたりが一番の問題ですね。クリップボード監視機能という性質上、そういった問題はどのソフトでもついてくるものではありますが、本格的に対応するとなるとかなり大変です。

    Mery のクリップボード履歴機能はオマケのようなものだとご理解いただいたうえで使っていただけるのなら全然かまわないのですが、そういった問題の改善や、クリップボード履歴機能の拡張が要求されると対応する技術がないので、クリップボード履歴機能に関するご要望については、当時から他のソフトの利用をご案内させていただいてます。

    > クリップボード関係は、アプリ固有の機能ではなく独立したものを使う方が汎用性があっていいかなと個人的には思ってます。

    Mery 以外のアプリにもコピペできますし、メモリも Mery とは別領域ですし、専用アプリのほうがメリットがたくさんあると思います。

    > 右クリックなどで出せるのが便利だったのですが、
    > javascriptでエディタにWindowsキーを送るようなことって出来ましたっけ?

    なるほど、そう言われてみると右クリックメニューにクリップボード履歴を組み込むこともできましたね。

    結構本体に密接に組み込んじゃってると、廃止するのも大変な気がしてきましたが… ^^;

    > それに外部ツールでクリップボード管理をする方が汎用性も機能のメンテナンス性も高いでしょうし、割り切って廃止するのも悪くないかなーと私は思います。

    なるべく Mery のクリップボード履歴機能は利用されない形で残しつつ、機能の存在に気付かれてしまった場合にも問い合わせが少なくて済むような対応があればベストなのですが…

    今回ご意見いただいた需要とご要望を考慮して、廃止前提ということですのでなるべく工数がかからず対応できる妥協点ということで、以下の機能追加を考えてみました。

    ▼ 提案 --------

    > 右クリックしたら、貼り付けと同時に、貼り終えた履歴を削除するような機能があると助かるなと思いました。

    これは、開発環境の Delphi は右クリックでメニューを実行する機能がないので右クリックというわけにはいきませんが、Ctrl キーを押しながら左クリックで貼り終えた履歴を削除を隠し機能で実装します。(Ctrl キーじゃなくて Shift キーでもご希望があれば。Alt はダメっぽい)

    > ところで、代替で以下のようなことってマクロの機能にありましたっけ?
    > 1.先頭(または最後)の履歴を、カーソル位置に挿入
    > 2.先頭(または最後)の履歴を消す

    完全にご要望通りとはいきませんが、マクロメソッドに APos の引数を追加します。(省略したら従来通り)

    ClipboardData.ClearData(APos: Integer)
    ClipboardData.GetData(APos: Integer)
    ClipboardData.SetData(const Data: string; APos: Integer)

    APos で 0 ~ 15 までを指定すると、クリップボード履歴に対してメソッドが発動する仕組みです。

    例えば、

    ClipboardData.ClearData(0);

    なら、クリップボード履歴の上から 1 つめの履歴が削除されます。

    var s = ClipboardData.GetData(3);

    なら、クリップボード履歴の上から 4 つめの履歴を取得します。

    ClipboardData.SetData(0);

    なら、クリップボード履歴の上から 1 つめの履歴に文字列をセットします。

    引数を指定しないか -1 を指定した場合は Mery のクリップボード履歴に対してではなく、従来通り Windows のクリップボードに対して同様の操作を行います。
    --------

    さらに、クリップボード履歴機能の根本的な改善策として以下の隠しオプションを追加します。

    ・クリップボード監視の遅延時間の設定
     Excel などのクリップボード監視ソフトとの競合を回避するため、クリップボードにアクセスするタイミングを環境によって遅延させる時間を設定する隠しオプションを追加します

    ・クリップボードを取得する最大文字数の設定
     100MB とかの大きなテキストをクリップボード履歴に保持してしまうという問題を回避するための、履歴に残す最大文字数を設定する隠しオプションを追加します
     (これを超える文字数のテキストはそもそも取得しないか、制限文字数で切って取得するかはご意見があれば考慮します)

    どうしても Mery でクリップボード履歴を管理したいかたはこれらのオプションを駆使してなんとかしてください、という感じでいかがでしょうか。

    延命治療みたいな感じですが上記の機能なら 2、3 日ぐらいで作れそうなので… ^^;

     |  Kuro  |  返信
  12. > ▼ 提案 --------
    延命措置に賛成です。 ノシ
    ご提案の内容についても基本的に異存ありません。
    現状どおり右クリックメニューから「クリップボード履歴」にアクセスできる仕組みをひきつづき利用できるというのは嬉しいかぎりです。 :D
    個人的には、巨大なテキストデータをあつかう機会がなかったり制御コードや絵文字などの特殊な文字を使うことがなかったりするため、マクロ化は数十行レベルのふつうのテキストでしかテストしておらず「これでいいのか?」状態でして…。 :|

    > Ctrl キーを押しながら左クリックで貼り終えた履歴を削除を隠し機能で実装します。
    わ~い。 XD
    マクロ化の試行で GetKeyState.exe を組みこんで「Shift+クリックなら貼り付けてアイテムを削除、Ctrl+クリックならポップアップメニューを再表示ループして "追加貼り付け" 的な使い方」をしたいとおもっていましたが、あまりうまくいかず、「貼り付けてアイテムを削除」や「任意のアイテムを削除」、「ポップアップメニュー再表示ループ」などの機能はサブメニュー化してしまおうかとおもっていたところでした。
    将来的に、ほかのポップアップメニュー項目でも修飾キー+クリック(または Enter キー)での機能拡張("追加コピー" とか)も…。 なんて期待しちゃいそうですが。 :)

    > APos: Integer
    0 ~ 15 ではなく「クリップボード履歴」サブメニュー内のアイテムのアクセラレータの数字とおなじ 1 番からのスタートにするか、または、「クリップボード履歴」サブメニューのアクセラレータの数字のほうをマクロの APos パラメータとおなじ 0 番スタートにすると、両者の数字が "ちぐはぐ" な感じにならず分かりやすいかなとおもいます。

    > ・クリップボードを取得する最大文字数の設定
    Kuro さんの提示した二択のみでということでしたら、「① そもそも取得しない」がよいとおもいます。
    「② 制限文字数で切って取得」方式だと巨大なテキストデータをペーストしたときに、「意図したとおりのデータすべてがきちんと『コピー』されていたかどうか」が分かりづらいのではないかなぁ、と。

    ※※※ もしかすると、
    ③ 履歴の2番目以降におちたときには制限値でデータの「廃棄」または「切り捨て」を適用するが、「コピー → 即時 ペースト」するばあいには制限を適用しない
    のようなかたちのほうが良いという人もいるかもしれませんね。もしくは、
    ④ 最大文字数を超えるデータの場合は Windows のクリップボードには送信するけど Mery の「クリップボード履歴」には取得しない
    とかも? これだと「Windows のクリップボードからデータをペースト」するコマンドが [編集] メニューカテゴリに欲しい、なんていうことにもなっちゃいそう? ※※※

    … ③ や ④ のような方法もふくめていろいろと勘案した上での「① 無視」か「② 切り捨て」の二択だとおもいますので、① に1票です。
    私個人としては、現状のままに近いかたちの「最小限の延命措置」をしていただけるだけでも、とても有難いことです(← マクロ化の試行が捗々しくないのでボツにしたい)。 :)
    欲をいえば ExecuteCommandByID で「クリップボード履歴」メニューをポップアップできるとさらに嬉しかったりしますが。

     |  sukemaru  |  返信
  13. > 延命治療みたいな感じですが上記の機能なら 2、3 日ぐらいで作れそうなので… ^^;

    ありがとうございます。
    あまり設定が必要なソフトを使うと乗り換えるたびに
    一苦労なのですごく助かります。

     |  tak  |  返信
  14. > ClipboardData.ClearData(APos: Integer)
    > ClipboardData.GetData(APos: Integer)
    > ClipboardData.SetData(const Data: string; APos: Integer)

    ギリギリの延命措置を考えてくださったところに何ですが・・・
    できれば、「保持している履歴の数」を取ることが出来ると、LIFO, FIFOの両マクロが作れて助かります。

     |  tak  |  返信
  15. > 将来的に、ほかのポップアップメニュー項目でも修飾キー+クリック(または Enter キー)での機能拡張("追加コピー" とか)も…。 なんて期待しちゃいそうですが。 :)

    Windows のユーザインターフェイスではそういった機能は一般的ではないようなので、今のところ標準機能でそういった機能を搭載する予定はありません ^^;

    > 0 ~ 15 ではなく「クリップボード履歴」サブメニュー内のアイテムのアクセラレータの数字とおなじ 1 番からのスタートにするか、または、「クリップボード履歴」サブメニューのアクセラレータの数字のほうをマクロの APos パラメータとおなじ 0 番スタートにすると、両者の数字が "ちぐはぐ" な感じにならず分かりやすいかなとおもいます。

    プログラミング言語の仕様として要素番号は 0 から開始するほうが美しいです。例えば for ループなどでループ変数は 0 始まりが一般的ですから。

    また、アクセラレータキーはキーボードのキー配置に従っているので 1 番始まりのほうが操作性が良いです。

    > Kuro さんの提示した二択のみでということでしたら、「① そもそも取得しない」がよいとおもいます。

    確かにそうですね、中途半端にコピーされているよりはそもそもコピーされていないほうが、「あ、上限超えてたかー」ってわかりやすいですね。(コピーできなかったときのエラーメッセージなどは煩わしいので表示しませんが)

    > 欲をいえば ExecuteCommandByID で「クリップボード履歴」メニューをポップアップできるとさらに嬉しかったりしますが。

    Mery の標準機能にないものを新たに追加となると今回の延命措置と方向性が変わってきてしまいますので勘弁してください ^^;

    今回提案させていただいた機能を追加することで、クリップボード履歴と同等の機能はほんの数行のマクロで実現できるようになりますので、そちらをご利用いただければと思います。

    > ギリギリの延命措置を考えてくださったところに何ですが・・・
    > できれば、「保持している履歴の数」を取ることが出来ると、LIFO, FIFOの両マクロが作れて助かります。

    履歴の数を取得するとなるとマクロのメソッドかプロパティを追加する必要が出てきますが、それは開発作業的に負荷が大きすぎるので今回の提案の中では対応できそうにありません。

    最初の要素にアクセスする手段としては、クリップボード履歴の仕様的に、新しい要素は常に 0 番目に追加されていきますので問題ないと思います。

    最後の要素は ClipboardData.ClearData および ClipboardData.SetData の APos に十分に大きな値 (99 とか。15 以上の適当な数値) を指定すれば最後の要素に対してメソッドが動きますので、これを利用すれば 1 発です。

    ただし、ClipboardData.GetData は要素数を数えるケースが出てくると思いますので、APos に範囲外の値を指定した場合は空文字が返る仕様となりますから、最後の要素のテキストを取得したいという特定の条件下においてはちょっとヒネリが必要ですが、一応、マクロで実現は可能な範囲です。

    廃止方向の機能ということで機能を作りこむ予定はありませんが、現状で対応できそうな落としどころとして提案させていただきましたことをご了承ください。

     |  Kuro  |  返信
  16. ご返信ありがとうございます。

    > > 将来的に、ほかのポップアップメニュー項目でも修飾キー+クリック(または Enter キー)での機能拡張("追加コピー" とか)も…。 なんて期待しちゃいそうですが。 :)
    > Windows のユーザインターフェイスではそういった機能は一般的ではないようなので、今のところ標準機能でそういった機能を搭載する予定はありません ^^;
    諒解です。というか、分かりきってましたが。 :D
    インターフェイス的にアイテムを増やすことなく隠し機能を追加できてよさそうなんですけど、Microsoft はなんで採用してくれないのでしょうね。 ...ついつい「いつか Kuro さんがその気になって Microsoft の先を行ってくれるかも?」という淡い期待をいだいてしまいます。 :)

    > プログラミング言語の仕様として要素番号は 0 から開始するほうが美しいです。例えば for ループなどでループ変数は 0 始まりが一般的ですから。
    > また、アクセラレータキーはキーボードのキー配置に従っているので 1 番始まりのほうが操作性が良いです。
    諒解しました。 :)
    たしかにマクロを書く人ならスタートの番号の仕様にはつねに注意を払うでしょうし、マクロを書かない人においては GUI 上で1番スタートになっているほうが馴染みやすいですね。

    > 今回提案させていただいた機能を追加することで、クリップボード履歴と同等の機能はほんの数行のマクロで実現できるようになりますので、そちらをご利用いただければと思います。
    マクロでポップアップメニュー化するとなると表示する文字数の切り捨て処理とかも必要なので、きちんと作りこむならさすがに「ほんの数行のマクロ」では済まないとおもいますが。 :)
    とまれ、とりあえず試作中(難航)の「外部ファイル書き出し/読み込み」のマクロはボツにして大丈夫そうですので一安心です。
    せっかくの GetData() メソッド等の仕様追加ですので、ボツ案件のコードとを組み合わせて「ピン止めアイテム付き」のクリップボード履歴(w/ スニペット)ポップアップメニューマクロとしてあらためて試作してみようとおもいます。

    > 廃止方向の機能ということで機能を作りこむ予定はありませんが、現状で対応できそうな落としどころとして提案させていただきましたことをご了承ください。
    ご提案の仕様でも十二分に「むしろ高度な活用ができるようになる延命処置(?)」ですよね。 :D
    ここしばらくマクロの新しいネタもなく、メンテについてもさぼっているかんじですが、また楽しめそうです。 :)
    p.s. マクロバーは最後にうpした「セパレータ付きでアイコンごてごてのスクショ」の状態のままですが、おかげさまで使い馴染んでサイコーにいい感じです。 :D

     |  sukemaru  |  返信
  17. > 最初の要素にアクセスする手段としては、クリップボード履歴の仕様的に、新しい要素は常に 0 番目に追加されていきますので問題ないと思います。
    >
    > 最後の要素は ClipboardData.ClearData および ClipboardData.SetData の APos に十分に大きな値 (99 とか。15 以上の適当な数値) を指定すれば最後の要素に対してメソッドが動きますので、これを利用すれば 1 発です。
    >

    ご返信ありがとうございます。

    なるほど。わかりました。未設定の番号を指定してもエラーにならないから、空だった時に15から下がっていけばいいわけですね。

     |  tak  |  返信
  18. > ご返信ありがとうございます。
    >
    > > > 将来的に、ほかのポップアップメニュー項目でも修飾キー+クリック(または Enter キー)での機能拡張("追加コピー" とか)も…。 なんて期待しちゃいそうですが。 :)
    > > Windows のユーザインターフェイスではそういった機能は一般的ではないようなので、今のところ標準機能でそういった機能を搭載する予定はありません ^^;
    > 諒解です。というか、分かりきってましたが。 :D
    > インターフェイス的にアイテムを増やすことなく隠し機能を追加できてよさそうなんですけど、Microsoft はなんで採用してくれないのでしょうね。 ...ついつい「いつか Kuro さんがその気になって Microsoft の先を行ってくれるかも?」という淡い期待をいだいてしまいます。 :)
    >
    > > プログラミング言語の仕様として要素番号は 0 から開始するほうが美しいです。例えば for ループなどでループ変数は 0 始まりが一般的ですから。
    > > また、アクセラレータキーはキーボードのキー配置に従っているので 1 番始まりのほうが操作性が良いです。
    > 諒解しました。 :)
    > たしかにマクロを書く人ならスタートの番号の仕様にはつねに注意を払うでしょうし、マクロを書かない人においては GUI 上で1番スタートになっているほうが馴染みやすいですね。
    >
    > > 今回提案させていただいた機能を追加することで、クリップボード履歴と同等の機能はほんの数行のマクロで実現できるようになりますので、そちらをご利用いただければと思います。
    > マクロでポップアップメニュー化するとなると表示する文字数の切り捨て処理とかも必要なので、きちんと作りこむならさすがに「ほんの数行のマクロ」では済まないとおもいますが。 :)
    > とまれ、とりあえず試作中(難航)の「外部ファイル書き出し/読み込み」のマクロはボツにして大丈夫そうですので一安心です。
    > せっかくの GetData() メソッド等の仕様追加ですので、ボツ案件のコードとを組み合わせて「ピン止めアイテム付き」のクリップボード履歴(w/ スニペット)ポップアップメニューマクロとしてあらためて試作してみようとおもいます。
    >
    > > 廃止方向の機能ということで機能を作りこむ予定はありませんが、現状で対応できそうな落としどころとして提案させていただきましたことをご了承ください。
    > ご提案の仕様でも十二分に「むしろ高度な活用ができるようになる延命処置(?)」ですよね。 :D
    > ここしばらくマクロの新しいネタもなく、メンテについてもさぼっているかんじですが、また楽しめそうです。 :)
    > p.s. マクロバーは最後にうpした「セパレータ付きでアイコンごてごてのスクショ」の状態のままですが、おかげさまで使い馴染んでサイコーにいい感じです。 :D

     |  tak  |  返信
  19. sukemaruさん

    > せっかくの GetData() メソッド等の仕様追加ですので、ボツ案件のコードとを組み
    > 合わせて「ピン止めアイテム付き」のクリップボード履歴(w/ スニペット)ポップ
    > アップメニューマクロとしてあらためて試作してみようとおもいます。

    何か便利なマクロができそう感じですね。期待してます。

    > ご提案の仕様でも十二分に「むしろ高度な活用ができるようになる延命処置(?)」
    > ですよね。 :D

    むしろ、sukemaruさんなら、コピーや切り取りの時点で、自作マクロをキー割り当てで
    呼び出させて、コピー、切り取りしたテキストを1000件くらいファイルでため込んで
    自由に加工しそうなイメージがあります。

     |  tak  |  返信
  20. こんばんは、Ver 2.8.1 でクリップボード関連の延命措置を施しました。

    > ClipboardData.ClearData(APos: Integer)
    > ClipboardData.GetData(APos: Integer)
    > ClipboardData.SetData(const Data: string; APos: Integer)

    上記、3 つのマクロメソッドを追加しました。引数に 0 始まりのインデックスが指定できるようになっただけです。(省略可)

    隠し機能ということでマクロリファレンスには記載しませんがご了承ください。

    > ・クリップボード監視の遅延時間の設定
    > ・クリップボードを取得する最大文字数の設定

    これは以下の隠しオプションです。

    [History]
    ClipbrdDelay=200
    ClipbrdMaxLength=0

    ClipbrdDelay は Office などのクリップボード監視ソフトと競合する場合に Mery がクリップボードにアクセスするタイミングを遅延させる設定で単位はミリ秒、デフォルトは 200 です。

    ClipbrdMaxLength は巨大なデータをクリップボード履歴に保持して Mery のメモリ消費が大きくなる対策で、指定文字数より長いテキストはクリップボード履歴に登録しません。デフォルトは 0 (制限なし) で、0 より大きい値を指定すると指定文字数を超えるクリップボードの内容は取得しません。

    あと、クリップボード履歴をマクロから表示させるサンプルです。

    var m = CreatePopupMenu();
    var i = 0;
    var a = [];
    while (true) {
    	var s = clipboardData.GetData(i);
    	if (s.length == 0)
    		break;
    	a[i] = s;
    	m.Add((i < 10 ? "&" + ((i + 1) % 10) : "") + " " +  s.substr(0, 80).replace(/\s+/g, " "), i + 1);
    	i++;
    };
    r = m.Track(0);
    if (r != 0)
    	document.write(a[r - 1]);

    とこんな感じですが、クリップボード履歴機能はそのうち消滅する可能性もあるという点はご注意くださいね。

     |  Kuro  |  返信
  21. > こんばんは、Ver 2.8.1 でクリップボード関連の延命措置を施しました。
    >
    > > ClipboardData.ClearData(APos: Integer)
    > > ClipboardData.GetData(APos: Integer)
    > > ClipboardData.SetData(const Data: string; APos: Integer)

    ありがとうございます。開発者ブログの方にないので、見送ったのかと思っていました。マクロの方は家に帰ったら試してみます。

    ところで、Ctrlキーを押しながら・・という機能にバグがあるようです。
    履歴からは消えていきますが、最後の1個が見た目上、クリップボート一覧にに残ってしまいます。

    (ただし、その値は貼り付けることは出来なくはなるので、事実上は、
     クリップボード一覧からは消えているようです)

    つまり、メニュー上だけの不具合ですね。

    >これは、開発環境の Delphi は右クリックでメニューを実行する機能がないので右クリックというわけにはいきませんが、Ctrl キーを押しながら左クリックで貼り終えた履歴を削除を隠し機能で実装します

     |  tak  |  返信
  22. ご返信ありがとうございます。

    > ところで、Ctrlキーを押しながら・・という機能にバグがあるようです。
    > 履歴からは消えていきますが、最後の1個が見た目上、クリップボート一覧にに残ってしまいます。

    なるほど、メインメニューのほうではなく右クリックメニューのほうでしたか。

    右クリックメニューのクリップボード履歴の存在をすっかり忘れていたため、そもそもその部分を開発していませんでした。確かにバグってますね。

    家に帰ったら調査してみますね。

     |  Kuro  |  返信
  23. こんばんは、取り急ぎ Ver 2.8.2 にて右クリックメニューのクリップボード履歴にも対応してみました。

    小刻みなバージョンアップでお手数をお掛けします…。

     |  Kuro  |  返信
  24. > こんばんは、取り急ぎ Ver 2.8.2 にて右クリックメニューのクリップボード履歴にも対応してみました。
    >
    > 小刻みなバージョンアップでお手数をお掛けします…。

    ありがとうございます。すみません、元々メインメニュー側は対応頂いていたんですね。
    そちらは普段使わなくて気付きませんでした;
    ありがとうございます。

     |  tak  |  返信
  25. sukemaruさま
    マクロライブラリのブックマーク一覧ジャンプでは注記をいれていだだきありがとうございます。

    マクロで独自にクリップボード履歴を操作するには、ADOでファイルベースのDBを使うという手があります。最大履歴数を実用上無制限にでき、blob型を使用すればサイズ制限も回避可能です。
    https://www35.atwiki.jp/little_lamb/pages/17.html に拙策のマクロ TextStackAdo.js があります。
    /*
    jet4.0 を利用しているせいもあって私は 64bit版の Mery に乗り換えられなかったり。
    DBエンジンを SQLite にすれば 64bit でも動くかしら。
    */

    >「コピー/切り取り/貼り付け」系全般にわたって外部ファイル連携のマクロにするには JS ファイルいくつ分になるのかもわかりませんし、
    このマクロでは、直近2レコードしか扱わないので関連ファイルは
    DBに追加するコピー CopyPush.js,
    DBに追加する切り取り CutPush.js.
    DBから削除する貼り付け PastePop.js
    DBの全削除 ClearTextStack.js
    の4ファイルですね。通常の貼り付けはDB操作の必要がないためマクロは不要です。私の手元ではコンテキストメニューや編集メニューから[コピー/切り取り]しても違和感なく動きます。
    履歴の中の任意のレコードを操作するには UI も必要ですしもっと複雑になりますが、参考になりますでしょうか。

     |  papagoat  |  返信
  26. 実用上じゃねーや、理論上だ。

     |  papagoat  |  返信
  27. >> Kuro さん
    > Ver 2.8.1 でクリップボード関連の延命措置を施しました。
    > 3 つのマクロメソッドを追加しました。
    遅ればせながら、クリップボードの延命処置+マクロの追加仕様、ありがとうございます & おつかれさまでした。:D

    >> papagoat さん
    以前の「大文字/小文字変換」につづいてご助言いただき、ありがとうございます。 :)
    「大文字/小文字変換」はコードを読み解いてギリシア文字などにも対応できるようにカスタマイズして利用させていただいていましたが、5月に「全角/半角変換」マクロとあわせて作り直し、マクロライブラリにも投稿させていただいています。
    「ブックマーク一覧ジャンプ」マクロにつきましても大幅に魔改造させていただいてますが、まず goat 版があればこその改編作業でしたので、あらためてありがとうございます。

    > マクロで独自にクリップボード履歴を操作するには、ADOでファイルベースのDBを使うという手があります。最大履歴数を実用上無制限にでき、blob型を使用すればサイズ制限も回避可能です。
    とりあえず既存の「スニペットプラグイン」の "snippets.txt" を流用して、include ライブラリの IO クラス経由で「ピン止め」アイテムを読み書きするかたちにしました。
    しかしながら「クリップボード履歴」と同等の機能を独自に再現するとなると履歴の各アイテムをも外部ファイルに書き出す必要がでてくるので、どういうかたちにするのがよいことやら? と試行錯誤していましたが、honadaiku さん作の「クリップボード履歴」プラグインの登場によりどうやら今後も安泰のようですね。 :D
    → ref. https://www.haijin-boys.com/discussions/4767

    …ということで、またしても試験運用中だった自家用マクロをすっぱりあきらめ、コードの断片は再度リサイクルして「クリップボード履歴とスニペットの統合版ポップアップメニュー」としてマクロライブラリの【実験・練習マクロ】カテゴリに投稿しました。
    https://www.haijin-boys.com/wiki/「クリップボード履歴」メニューのマクロ化
    「クリップボード履歴」機能は Mery 2.8.1 以降の『延命措置』の新規パラメータを利用したもの。「スニペット」機能はスニペットプラグインの設定ファイル "snippets.txt" を読み書きするというかたちです。
    ※「include ライブラリ」が必要になります。
    ※「GetKeyState.exe」を導入している環境では「Ctrl キーを押しながら左クリックで貼り終えた履歴を削除」機能を利用できます。

    >> tak さん
    ご期待に沿えるようなものはできませんでした。ごめんなさいです。 :(
    せっかく Kuro さんにマクロの ClipboardData の仕様を新しくしていただきましたので、一応は何かしら出さないと申しわけないかなということで。 … 既存の機能・リソースを寄せ集めただけのしょっぱいマクロですが。 :(

     |  sukemaru  |  返信
  28. いつもながらお疲れさまです & お世話になっております。
    ベータバージョン 2.8.7 も楽しく使わせていただいてます。 :D

    > クリップボード履歴機能はそのうち消滅する可能性もあるという点はご注意くださいね。

    …あまり積極的に活用してはいけないのかもしれない「クリップボード履歴」機能についての要望です。

    Kuro さんのサンプルマクロと同じように履歴を配列に収納し、ポップアップメニューでアイテムを選択して貼りつけるマクロについてなのですが、サンプルコードの Document.Write( a[r-1] ); のあとに a[r-1] のアイテムが履歴の先頭になるように並べかえるコードを付け足してみました。

    // 貼り付けたアイテムを配列の先頭に移動
    a.unshift( a.splice( r -1, 1 ) );
    
    // クリップボード履歴を上書きする
    for ( var i = 0; i < r; i ++ ) {
      ClipboardData.SetData( a[i], i );
    }

    並べ替え自体はおおむね問題なく機能したのですが、このコードで先頭に移動したアイテムは、マクロ終了後に Ctrl+V での「通常の『貼り付け』操作」で利用できないようです(マクロでの並べ替え前に先頭にあったアイテムが貼り付けられる)。
    第二引数なしの1行マクロ ClipboardData.SetData( "hoge" ); でクリップボードに追加した場合は Ctrl+V で貼り付けができ、 ClipboardData.SetData( "fuga", 0 ); だとできないので、第二引数つきでの SetData( str, 0 ) の場合だけのようです。

    できましたら ClipboardData.SetData( "fuga", 0 ); で先頭に配置したアイテムを「通常の『貼り付け』操作」でも利用できるようにしていただきたく、お願いいたします。

     |  sukemaru  |  返信
  29. 最新版、早速お試しいただきありがとうございます。

    > できましたら ClipboardData.SetData( "fuga", 0 ); で先頭に配置したアイテムを「通常の『貼り付け』操作」でも利用できるようにしていただきたく、お願いいたします。

    これは、あえてそういう仕様にしています。

    SetData で 0 ~ 15 の範囲を指定した場合は OS 側のクリップボードを書き換えず、Mery 側のクリップボード履歴の内容だけを操作できるように区別するための仕様です。

    先頭に配置したアイテムを通常の貼り付けで使用したい場合は、ご提示いただいたマクロの最後で ClipboardData.SetData("hoge"); のようにインデックスを付けないか、ClipboardData.SetData("hoge", -1); のような指定をすることで対応いただければと思います。

     |  Kuro  |  返信
  30. ご返信ありがとうございます。

    > SetData で 0 ~ 15 の範囲を指定した場合は OS 側のクリップボードを書き換えず、Mery 側のクリップボード履歴の内容だけを操作できるように区別するための仕様です。
    なるほど、諒解しました。
    どうりで Sleep( 50 ); などを挿まないでも済むわけですね。 :)

    > ご提示いただいたマクロの最後で ClipboardData.SetData("hoge"); のようにインデックスを付けないか、ClipboardData.SetData("hoge", -1); のような指定をすることで対応いただければと思います。
    ありがとうございます。

    Clipboard.SetData( a[0] );

    の追加でうまくいきました。
    先頭アイテムは重複登録されないようですから、たったこれだけでよかったんですね。 XD ウマイ!

    並べ替えコード実行後に Mery 本体の「クリップボード履歴」で見ると一部のアイテムが重複していることがありますが、マクロでは重複アイテムを消してからメニュー化する処理を入れていますので、これでばっちり狙いどおりの動作をしてくれるようになりました。
    「スニペットプラグイン」の機能を統合したマクロもほぼプラグインのポップアップメニューを再現できましたので、本年のマクロいじりはこれで仕舞いかしら(またマクロの仕様に追加要素がでてくることを楽しみにしてさせていただきます)。

    p.s. スニペットプラグインはソースが非公開のようで、同じようなかんじにメニューを階層化したり、「 \ 」がらみの文字列の登録/貼り付けでのエスケープ/復帰する処理方法を理解するまでがたいへんでした…。
    最終的にはインデントによるメニューの階層化について若干アレンジしたので、プラグインと完全におなじ状態じゃありませんが、ひとまとめにして使い勝手があがりました。 :D

     |  sukemaru  |  返信
  31. どうもお世話になってます
    クリップボード履歴プラグイン
    使わせて頂いてます

    Meryはポータブル版で利用してますが
    以下の空フォルダが作成されてしまいます
    C:\Users\xxxx\AppData\Roaming\Mery\Plugins\ClipboardHistory
    これはクリップボード履歴プラグインが作成してるのでしょうか?
    出来ればMeryのフォルダ内(Mery\Plugins\ClipboardHistory)に作成していただけないでしょうか?
    又は方法はありますか?
    よろしくお願いします

     |  kiyohiro  |  返信
  32. 解決しました
    ClipboardHistory.iniを
    Meryのフォルダ内(Mery\Plugins\ClipboardHistory)に作成
    すると
    ユーザーフォルダに空フォルダが作成されないのですね
    ポータブル利用確認しました

    クリップボード履歴プラグイン
    のページの概要の参考からここのフォーラムに移動したのですが
    大石剛司さんの書き込みを拝見して
    よく見ると
    > フォーラムの https://www.haijin-boys.com/discussions/4767 に、ご意見・ご感想をお寄せください
    の方が正しかったのですね
    まさかクリップボード履歴プラグインのページではなく
    フォーラムの方にのってたとは気づかず
    なぜ、ClipboardHistory.iniが作成されないのかと悩んでましたが
    こちらには
    ClipboardHistory.ini
    の書き方がのっていて今回の件解決しました
    クリップボード履歴プラグインのページに書いてある方が
    分かりやすいと思うので
    どなたかページ編集出来る方
    追記してもらえると助かります
    よろしくお願いします

     |  kiyohiro  |  返信
  33. 自己解決されたようで、お手数をおかけして申し訳ありませんでした。
    当時は「クリップボード履歴をプラグインで作ってみる実験」でしたので、「おー、実験成功。これなら本体からクリップボード履歴がなくなっても何とかなるかもね」と、実験終了で放置していしまいました。本体のクリップボード機能が、まだ残っていますので、あえて実験目的以外に、実用としてプラグインを使用する方がいらっしゃるとは思っていなかったのです。
    2月20日に kiyohiro さんの書き込みを冷や汗を流しながら拝見して、プログラムの方はすぐに直したのですが、そうこうするうちに自己解決されたのを見て、ドキュメントを書くのが億劫なため、またまた放置してしまいました...
    一応、使えているようですので、アイコンもつけて、ひとまず完成品としておきます。Wikiも更新しておきました。

     |  honadaiku  |  返信
  34. honadaikuさん返信&更新ありがとうございます

    クリップボード履歴 0.4.0試しました
    WinXp環境(後ほどWin10x64環境でも)
    Mery v3.2.6 zip版&ポータブル版
    > 余計なフォルダを作らないようにした。
    ClipboardHistory.iniが無い時以下のフォルダが出来てました
    C:\Documents and Settings\Owner\Application Data\Mery\Plugins\
    私は既にClipboardHistory.iniを作ってるので問題ないのですが
    一応ご報告しときます

    クリップボード履歴が無くなると困るので
    当時速攻でプラグインを導入させて頂きました
    今では右クリックメニューに登録し
    honadaikuさん版はポップアップ
    大石さんのMeryClipHistoryはフォーム表示
    でと使い分け重宝してます

     |  kiyohiro  |  返信
スポンサーリンク