非選択時のカットとコピーのカスタマイズについて

  1. Windows11(x64) Version 24H2 / Mery(x64) Version 3.7.12

    現在のMeryのデフォルト動作では、文字列の非選択状態でCtrl-XやCtrl-Cを実行すると一行丸ごとカットとコピーが行われますが、選択時の動作はそのままに非選択時の動作をカスタマイズするにはどうしたらよいでしょうか。
    具体的には、非選択時のカットではカーソル位置から行末までのカット、非選択時のコピーではカーソル位置の単語のコピーを実施したいのですが、現在のカスタマイズ機能で可能でしょうか。

    余談ですがMeryのダブルクリックなどでの自動単語選択はとても賢くて感心しています。
    「りんご・ばなな・みかん」は分けても「ディープ・ラーニング」はひとまとめに選択したいのは、わがままだというのはわかっています(笑)
    全角カタカナに挟まれた全角中黒(・)の時だけは区切らないでいただけると完璧だと思いますが、前後の文字で区切り文字のふるまいを変えるのはパフォーマンス上難しいんでしょうね。

    これで「リンゴ・バナナ・ミカン」は分けても「ディープ・ラーニング」はひとまとめに選択するには、辞書を持ったAI処理が必要そうです。

     |  enaka  |  返信
  2. > 具体的には、非選択時のカットではカーソル位置から行末までのカット、非選択時のコピーではカーソル位置の単語のコピーを実施したいのですが、現在のカスタマイズ機能で可能でしょうか。

    ちなみに今のEmacsだとこんな感じです。
    インデントが消えてしまったので全角空白に置き換えています。

    (global-set-key (kbd “C-k”) 'kill-region-mod)
    (global-set-key (kbd “C-w”) 'copy-region-mod)

    (defun kill-region-mod (begin end)
     (interactive “r”)
     (if (region-active-p)
      (kill-region begin end)
      (kill-line)))

    (defun copy-region-mod (begin end)
     (interactive “r”)
     (if (region-active-p)
      (copy-region-as-kill begin end)
      (kill-new ((backward-word)(mark-word)))))

     |  enaka  |  返信
  3. > 非選択時のカットではカーソル位置から行末までのカット、非選択時のコピーではカーソル位置の単語のコピーを実施

    マクロで簡単に実現できそうでしたので、参考までに。以下のような流れで利用できます。

    1. 後述のマクロをそれぞれ任意名で Macros フォルダーに配置
    2. Meryにマクロを登録
    3. それぞれのマクロを Ctrl+C, Ctrl+X に割り当て

    非選択時は現在位置の単語をコピーするマクロ:

    var sel = document.selection;
    
    // 選択範囲が空の場合は、単語を選択する
    if (sel.IsEmpty) {
        sel.SelectWord();
    }
    
    sel.Copy();
    

    非選択時は現在位置から行末までを切り取りするマクロ:

    var sel = document.selection;
    
    // 選択範囲が空の場合は、行末まで選択する
    if (sel.IsEmpty) {
        sel.EndOfLine(true, mePosLogical);
    }
    
    sel.Cut();
    
     |  yuko  |  返信
  4. >> enaka さん、yuko さん

    yuko さん、サポートのご協力ありがとうございます。

    > 現在のMeryのデフォルト動作では、文字列の非選択状態でCtrl-XやCtrl-Cを実行すると一行丸ごとカットとコピーが行われますが、選択時の動作はそのままに非選択時の動作をカスタマイズするにはどうしたらよいでしょうか。

    yuko さんのご回答のとおり、マクロにショートカット キーを割り当てれば、実現できそうですね。

    > 「りんご・ばなな・みかん」は分けても「ディープ・ラーニング」はひとまとめに選択したいのは、わがままだというのはわかっています(笑)

    わがままということはないと思います (笑)

    実際、Ver 3.4.1 未満ではその仕様でした。つまり、全角中黒「・」は全角カタカナとして扱う仕様でした。

    ただ、全角中黒「・」の扱いについては意見が分かれていて、全角カタカナとして扱ってほしいというご要望と、全角記号として扱ってほしいというご要望の両方があります。

    • 全角中黒「・」を全角カタカナとして扱ってほしいというご要望。

    【参考】・の要望
    https://www.haijin-boys.com/discussions/8779

    • 全角中黒「・」を全角記号として扱ってほしいというご要望。

    【参考】中点『・』の単語区切りでの扱い
    https://www.haijin-boys.com/discussions/6999

    ご指摘のとおり、文字の属性を判定する部分はパフォーマンスに影響を与えるため、区切り文字の動きを変更したり、オプションで柔軟に対応するのは難しく、どちらか一方の仕様を採用するかたちになります。

    Ver 3.4.1 で仕様変更に至った理由としては、Windows 11 のメモ帳や秀丸エディタさん、EmEditor さん、サクラエディタさんなどが全角中黒「・」を全角記号として扱う仕様だったため、それに合わせたかたちです。

    でも、ユニコード的には全角中黒「・ (U+30FB)」って、全角カタカナに分類されてるんですよね。

    ヸ U+30F8 (KATAKANA LETTER VI)
    ヹ U+30F9 (KATAKANA LETTER VE)
    ヺ U+30FA (KATAKANA LETTER VO)
    ・ U+30FB (KATAKANA MIDDLE DOT) ← ここ
    ー U+30FC (KATAKANA-HIRAGANA PROLONGED SOUND MARK)
    ヽ U+30FD (KATAKANA ITERATION MARK)
    ヾ U+30FE (KATAKANA VOICED ITERATION MARK)
    ヿ U+30FF (KATAKANA DIGRAPH KOTO)
    

    なので、「りんご・ばなな・みかん」を分けても、「ディープ・ラーニング」はひとまとめにするという考え方には、確かに理があるようにも思えます。

    本件については、MeryWiki の開発室のほうにもご要望として記載しているので、ご要望が多ければ従来の仕様に戻すことも検討するかもしれません。

    【参考】開発室 - MeryWiki
    https://www.haijin-boys.com/wiki/開発室

    > これで「リンゴ・バナナ・ミカン」は分けても「ディープ・ラーニング」はひとまとめに選択するには、辞書を持ったAI処理が必要そうです。

    確かにそこまでいくと、AI 的な何かが必要になりそうですね (笑)

     |  Kuro  |  返信
  5. > なので、「りんご・ばなな・みかん」を分けても、「ディープ・ラーニング」はひとまとめにするという考え方には、確かに理があるようにも思えます。
    > 本件については、MeryWiki の開発室のほうにもご要望として記載しているので、ご要望が多ければ従来の仕様に戻すことも検討するかもしれません。

    カタカナと「・」が同じ区分になるの、私はちょっと困りますね… と思ったところ、そもそもカタカナと「・」を別区分にする要望は私から出したものだったのをすっかり忘れていました😅

    • 他のエディターとの操作性の統一
    • 単語単位で選択範囲を広げるダブルクリックドラッグの操作の際、カタカナと「・」が連結されて選択されると選択範囲が広くなりすぎてしまうケースがしばしばある
      • 一方、カタカナと「・」が分かれてくれれば、1単語だけの選択をしたければダブルクリックだけで済ませ、「・」で区切られた単語全体を選択したければドラッグ範囲を少し広げればよいという塩梅で選択肢が生まれる

    …というあたりから、やはり現行動作が好みですね。

     |  yuko  |  返信
  6. 私もyukoさんと同じ理由で、全角中黒「・」を全角記号として扱うほうが便利ですね。

     |  MSY-07  |  返信
  7. >yuko さん、サポートのご協力ありがとうございます。

    yuko さん、ありがとうございました。早速マクロ登録いたしました。とても便利になりました。
    登録したマクロがマクロメニューに、実行(R) COPY.jsや編集(E) CUT.jsみたいに残るのはどうしたら消せるんでしょうか。

    >【参考】中点『・』の単語区切りでの扱い
    >https://www.haijin-boys.com/discussions/6999

    固定テーブルを実行バイナリ内部に持っているのですね。変更可能なテーブルにしたり、動作を場合分けするのは確かに実装が大変そうです。
    LibreOfficeでは切り替えられるので、どちらにも需要はあるんだと思います。

    単純に記号扱いとカタカナ扱いを切り替えるだけなら、固定テーブルを実行バイナリ内部に2つとも持っていて、起動時に「だけ」(隠し)設定オプションで選択するならば、簡単に実現できて動作が重くなることもなさそうですが。

    以前、クリックを繰り返すと、単語選択ー>前後も単語選択ー>行選択ー>選択解除、と切り替わるエディタがあったのですが、なんという名前だったか思い出せません。
    この場合、中黒をダブルクリック2回やトリプルクリックすれば「ディープ・ラーニング」が選択されます。
    関数は引数まで、変数は型まで、と任意に選択出来てちょっと便利でした。

    マクロなら実現できるんでしょうか。(振り出しに戻る)

     |  enaka  |  返信
  8. みなさん、ご意見ありがとうございます!やっぱり意見が分かれますね😅

    > 単純に記号扱いとカタカナ扱いを切り替えるだけなら、固定テーブルを実行バイナリ内部に2つとも持っていて、起動時に「だけ」(隠し)設定オプションで選択するならば、簡単に実現できて動作が重くなることもなさそうですが。

    そうですね。でも、実行バイナリに組み込まれた固定テーブルって、使わない時でもメモリを使ってしまうんですよね。

    なので、テーブルを 2 つ持つのは、軽さを重視したテキストエディターにはちょっと負担が大きくなりそうです。

    どうしても必要ということであれば、Mery.exe にパッチを当てれば変更できるんですけどね…

    0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 08 0A 0A 0A 0A
    

    0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
    

    > 登録したマクロがマクロメニューに、実行® COPY.jsや編集(E) CUT.jsみたいに残るのはどうしたら消せるんでしょうか。

    その部分は、最後に使ったマクロが自動的にセットされる仕組みになっています。

    現状では削除機能はないのですが、そもそも「最後に使ったマクロをセットする機能」って、あまり必要ないかも?

    > この場合、中黒をダブルクリック2回やトリプルクリックすれば「ディープ・ラーニング」が選択されます。

    yuko さんが書いてくれた操作だと、割と簡単に選択できそうですね。

    ダブルクリックするとき、2 回目を押しっぱなしにしたままマウスをドラッグすると、「ディープ・ラーニング」まで単語単位でサクっと選択範囲が広がります。

    マクロでもできそうですが、マウスのダブルクリックにマクロを割り当てることはできません。(プラグインならできるかもしれませんが…)

     |  Kuro  |  返信
  9. > そうですね。でも、実行バイナリに組み込まれた固定テーブルって、使わない時でもメモリを使ってしまうんですよね。

    固定テーブルって、せいぜい数百バイトで2個持っても大したことないと思ってました。もしかしてユニコード並みに大きなテーブルだったのか。
    それなら設定ファイルにテーブルを置いて起動時に「だけ」読むほうが効率的ですが、大改造が必須そうなので要望がたくさんないと無理ですね。

    > 現状では削除機能はないのですが、そもそも「最後に使ったマクロをセットする機能」って、あまり必要ないかも?

    マクロメニューの下のほうにも登録されているので、編集は場合次第ですが実行は不要そうです。
    今回のカットとコピーなどショートカット登録でしか使わなそうなマクロは、メニューに載る必要すらないかも知れない。

    > ダブルクリックするとき、2 回目を押しっぱなしにしたままマウスをドラッグすると、「ディープ・ラーニング」まで単語単位でサクっと選択範囲が広がります。

    マウスならサクっとドラッグできますが、タッチパッドだとクリックとパッド操作で両手が必要で、AltやCtrlやShiftから手を離すのがちょっと面倒なんです。

     |  enaka  |  返信
  10. > 固定テーブルって、せいぜい数百バイトで2個持っても大したことないと思ってました。もしかしてユニコード並みに大きなテーブルだったのか。

    そうなんですよ。ユニコードの各文字に属性を定義してるテーブルなので、単純計算でサイズはだいたい66キロバイトくらいかな。でも、これが2倍になるとさすがに気になりますね。

    > それなら設定ファイルにテーブルを置いて起動時に「だけ」読むほうが効率的ですが、大改造が必須そうなので要望がたくさんないと無理ですね。

    ですね〜。設定ファイルから読み込む方式にすると、それはそれで手間がかかりますし、シンプルなテキストエディターとしてはやりすぎ感もありますしね。

    > マクロメニューの下のほうにも登録されているので、編集は場合次第ですが実行は不要そうです。

    それはあるかもですね。

    当時はキーボード操作をマクロでカスタマイズすることまではあまり考えてなくて、とりあえず便利機能のひとつとしてこういう仕様にしていましたが、今となっては微妙かもしれないですね。

    ちょっと廃止も検討してみます。

    > 今回のカットとコピーなどショートカット登録でしか使わなそうなマクロは、メニューに載る必要すらないかも知れない。

    これについては、一応、そういう機能があって、[マクロ] メニューの [カスタマイズ] から、マクロ一覧の左にあるチェックボックスをオフにすると、メニューに表示されなくなります。

    > マウスならサクっとドラッグできますが、タッチパッドだとクリックとパッド操作で両手が必要で、AltやCtrlやShiftから手を離すのがちょっと面倒なんです。

    なるほど、それはなんとなくわかります。タッチパッドだと指が足りなくなりますよね。キーボード操作ということで良ければ、マクロで行けそうな気はしますね。

     |  Kuro  |  返信
  11. > 当時はキーボード操作をマクロでカスタマイズすることまではあまり考えてなくて、とりあえず便利機能のひとつとしてこういう仕様にしていましたが、今となっては微妙かもしれないですね。
    >
    > ちょっと廃止も検討してみます。

    検討してみたのですが、[実行] に自動登録される機能は意外と使う場面がありそうでした。

    というのも、マクロは同じ操作を繰り返すケースも多く、一度メニューから選択して実行すれば、その後は [実行] コマンドの F4 キーを押し続けるだけで連続実行できるので、私自身もよく活用しています。

    もちろん、ショートカット キーに割り当てれば同じことはできますが、わざわざショートカット キーを設定するほどではないマクロを連続実行したい場合には、この仕組みが便利です。

    そこで提案なのですが、[マクロ] メニューで非表示に設定されているマクロ ([カスタマイズ] の一覧でチェックボックスがオフになっているマクロ) は、主にショートカット キー用のものとみなし、[実行]、[編集] コマンドに自動登録しないようにするのはいかがでしょうか?

     |  Kuro  |  返信
  12. > そこで提案なのですが、[マクロ] メニューで非表示に設定されているマクロ ([カスタマイズ] の一覧でチェックボックスがオフになっているマクロ) は、主にショートカット キー用のものとみなし、[実行]、[編集] コマンドに自動登録しないようにするのはいかがでしょうか?

    ショートカットキーでマクロを動かしてから [編集] コマンドでそのマクロを開くの、私は頻繁にやるのでちょっと困るかもです…😅

    ショートカットキーでしか使わないマクロは [カスタマイズ] から整理してマクロメニュー内に表示されないようにしているのですが、そうすると表示が隠れてマクロファイル本体を探すのがちょっと手間となってしまいますよね。なので、マクロに手を加えたいときには「ショートカットキーでマクロをとりあえず動かす → [編集] コマンドから該当マクロファイルを開く」という操作でサッと開く…といったことをよくやっています。

    [実行] コマンドに表示されるのはあまり意識したことはないですが、まぁ表示されていたとして対して邪魔になるものでもないような…
    私の場合ショートカットキーマクロ盛り盛りなせいで、直近の操作が「あれ、今の操作ってMery標準機能だったかな、マクロ動作だったかな」ってなることがあるので、その際のマクロ動作履歴確認の意味で [実行] のところに載っているのを稀に見る感じですかね。

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

    yuko さんはショートカット キーにマクロを割り当てるカスタマイズをよくされている印象があったので、[実行] や [編集] に自動登録されない方が好みかな?と思ったのですが、なるほど、そういう使い方もあるんですね。

    私はマクロへのキー割り当てをまったく使っていないので、実際に活用されている方のご意見はとても参考になります。

    ひとまず、今回の提案については取り下げさせていただきますね。

     |  Kuro  |  返信
  14. >これについては、一応、そういう機能があって、[マクロ] メニューの [カスタマイズ] から、マクロ一覧の左にあるチェックボックスをオフにすると、メニューに表示されなくなります。

    (巨大なマクロなどは常に読み込むとメモリを圧迫するので普段はオフにするみたいな目的で)チェックボックスをオンにすると登録したマクロが読み込まれて実行可能になるのだと勘違いしていました。

    一覧に登録したマクロはMeryを起動した後は常にメモリ上にあるのでしょうか。それともマクロ実行のたびにメモリ上に読み込まれるのでしょうか。
    リソースとレスポンスのバランスのどちらを重視するかで、どちらの実装もあり得るかなと。

    > yuko さんはショートカット キーにマクロを割り当てるカスタマイズをよくされている印象があったので、[実行] や [編集] に自動登録されない方が好みかな?と思ったのですが、なるほど、そういう使い方もあるんですね。

    VzやEmacsがメインだった頃はマクロを作ったりもしていたんですが、今やマクロを使うだけの私と違って、マクロを開発している方には便利な機能なのですね。

    余談ですがつい最近、Vzを作者の兵藤さんがオープンソースにしたようです。8086の16bitアセンブラなのでAMD64のWindowsではエミュレーションしないと実行できませんが。
    https://github.com/vcraftjp/VZEditor

     |  enaka  |  返信
  15. > 一覧に登録したマクロはMeryを起動した後は常にメモリ上にあるのでしょうか。それともマクロ実行のたびにメモリ上に読み込まれるのでしょうか。

    登録したマクロは、実行するたびにメモリに読み込まれます。つまり、常にメモリ上 (Mery.exe が使用するメモリ領域) に保持されているわけではありません。

    とはいえ、Windows OS の仕組み上、一度アクセスしたファイルはキャッシュに保存されるので、次回からはディスクから直接読み込むのではなく、キャッシュされたデータを使って高速に処理されます。

    そのため、レスポンスに影響を感じることはほとんどないと思います。

    > 余談ですがつい最近、Vzを作者の兵藤さんがオープンソースにしたようです。8086の16bitアセンブラなのでAMD64のWindowsではエミュレーションしないと実行できませんが。

    話題になってましたね〜!私もテキストエディター関連のニュースは気にしているので、すごく興味深かったです。

    ソースも拝見しましたが、ほんとだ、アセンブラ。解読はかなり大変そうですね…

    そういえば、Delphi にもアセンブラが搭載されていたことを思い出しました。もしかしたら移植できるかも? (笑)

    それにしても、VZ Editor さんのマクロ機能はすごいですね。テトリスやドラクエ風 RPG とか、ワクワクします。

    最近は Mery のマクロも進化してきて、私もテトリスを動かしてみたところで、思わず X にポストしたのを思い出して、にやりとしちゃいました。

     |  Kuro  |  返信
  16. >登録したマクロは、実行するたびにメモリに読み込まれます。つまり、常にメモリ上 (Mery.exe が使用するメモリ領域) に保持されているわけではありません。

    WebView2のようにメモリ上に複数のスクリプトエンジンのプロセスが待機していることを期待する大富豪アーキテクチャとは相性が悪そうです。
    リエントラントなエンジンならメモリ上のコードを共有できますが、今どきそんな凝ったコードをしていないでしょうしね。

    > それにしても、VZ Editor さんのマクロ機能はすごいですね。テトリスやドラクエ風 RPG とか、ワクワクします。

    Vzのマクロは、独自仮想CPUによる0オペランドのスタックマシンのアセンブラ言語です。プリプロセッサを名乗るほぼコンパイラもあった気がします。
    「チューリング完全」だから何でもできるよを地でいったマクロ言語なので、あれでVzのルーチンを呼ぶカスタマイズを超えて、すべて自前でアプリケーションを作るのは達人や仙人以外の何者でもないと思います。

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