"折り返し表示" での CharRight( document.selection.Text.length - 1 ) について

  1. ブログ記事『Ver 2.6.9』のコメント欄ではお世話になりました。kuroさんと皆さんに感謝を申し上げます。
    あれから自分でもマクロを作るべく勉強中ですが、まだまだ理解が追いついておらず、既存のマクロのコードを調べながら切り貼りしているのがもっぱらです。
    あまりうまくいっていないのは自分の理解不足と承知していますが、 "折り返し" 表示での選択範囲の扱いで不可解な点がありましたのでご確認いただければとおもいます。

    マクロライブラリの「引用の追加」と「括弧で挟む」のコードを参考にポップアップメニューからパターンを選んで選択範囲をカッコで囲うマクロ「カッコ...」を作りまして、トリプルクリックや行番号から行全体を選択したさいには行末改行を含めないようコードを書いてみたつもりなのですが、 "折り返し" 表示をしているか否かで末尾の処理がちがってしまいました。

    // 選択範囲の行末改行を含めないつもりのコード
    var s = document.selection
    var st = s.Text // 選択範囲の文字列を取得

    // マクロ実行前の選択範囲の各座標を取得
    var ax = s.GetTopPointX( mePosLogical );
    var ay = s.GetTopPointY( mePosLogical );
    var bx = s.GetBottomPointX( mePosLogical );

    if ( ! s.IsEmpty && bx == 1 ) { // 選択範囲の末尾が行頭 x = 1 にあるばあい ~
    s.SetActivePoint( mePosLogical, ax, ay ); // カーソル位置を "複数行の選択範囲" の先頭に
    s.CharRight( true, st.length - 1 ); // ~ もとの範囲選択の末尾より1文字分だけ左まで選択(さいごの \n を含めない)
    var st = s.Text; // 調整した選択範囲の文字列を再取得
    }
    // ここまで

    この選択範囲の st にたいして開きカッコ p1[r] と閉じカッコ p2[r] で
    s.Text = p1[r] + st + p2[r];
    と囲うマクロなのですが、選択範囲の終端が "折り返し" 表示にかかってしまう長い行の行末改行だと、最終行の折り返し回数分だけ余計に選択範囲の終端が縮められてしまいました。
    同じ行のトリプルクリックや行番号から行全体を選択したさいでも、 "折り返さない" 表示状態であれば末尾の処理は1文字分だけ戻って行末改行のみをはじき出してくれました。
    動作確認した環境は Mery 2.6.10 (32 ビット、ZIP)、OSは WinXP SP3 です。

    "折り返し表示" にかかっているかいないかで CharRight() の移動量ないし (st.length - 1) の値が変わってしまうものなのでしょうか?

     |  ぽい  |  返信
  2. マクロ「カッコ...」自体はコードを以下のとおり書きかえましたところ、問題なく動作していますので、
    表題の件は報告/質問としてお願いします。

    var s = document.selection

    // マクロ実行前の選択範囲の各座標を取得
    var ax = s.GetTopPointX( mePosLogical );
    var ay = s.GetTopPointY( mePosLogical );
    var bx = s.GetBottomPointX( mePosLogical );
    var by = s.GetBottomPointY( mePosLogical );

    // 選択範囲の文字列を取得
    if ( ! s.IsEmpty && bx == 1 ) { // 選択範囲の末尾が行頭 x = 1 にあるばあい ~
    s.SetActivePoint( mePosLogical, 1, by - 1 );
    s.EndOfLine( false, mePosLogical ); // もとの選択範囲の末尾の一行うえの行末から(さいごの \n を含めない)
    s.SetAnchorPoint( mePosLogical, ax, ay ); // もとの選択範囲の先頭まで選択
    }
    var st = s.Text;

    こっちのほうが曖昧なところがなくて確実そうですね。 :P

     |  ぽい  |  返信
  3. こんばんは、ご愛用ありがとうございます。

    マクロにご興味をもっていただけたようでうれしく思います。Mery のマクロは JavaScript に準拠した記述方式なので、Mery 以外のシーンでもきっと役立つと思います ^^

    ご質問の件ですが、後から追記してくださっている「EndOfLine」を使う方法で合っていると思います。

    マクロはそもそも操作を記録するための機能なので、「CharRight」はキーボードの「→」キーを押したときと同じ動作になっています。

    折り返しの入っている文書の右端の折り返し地点で、実際にキーボードの「→」キーを押してご確認いただけるとわかりやすいと思いますが、右端から次の行の左端への移動となりますので、文字数とは完全には一致しません。

    なので、CharRight() の移動量は折り返しの状態によって、文字数とは一致しなくなります。(st.length - 1) の値は選択範囲の文字数なので変わることはありませんからご安心ください。

    これらは操作を記録→再生したときに完全に記録したのと同じ動作をさせるための仕様ですのでご了承くださいませ。

     |  Kuro  |  返信
  4. > マクロはそもそも操作を記録するための機能なので、「CharRight」はキーボードの「→」キーを押したときと同じ動作になっています。
    > …

    明瞭なご説明をいただき、ありがとうございます。
    キーボードでカーソルを動かしてみて納得いたしました。
    カーソルの移動にかんしてはキーボードで操作するよりもマウスで操作するほうが多いので、気が付きませんでした。(マウスに頼ってばかりいるからアイコンを作っているというのが実情です)
    javascriptエンジンはIEのバージョンごとに違うというとことで、おかしな挙動をするはもしかしてIE6のままのXPだからなのか?などとおもっていました。

    マクロリファレンスのおかげでMery固有の関数は徐々に理解できるようになってきましたが、javascript自体の理解はまだまだなので、しばらくはマクロいじりを楽しめそうです。 :)

     |  ぽい  |  返信
  5. ご返信ありがとうございます。

    > カーソルの移動にかんしてはキーボードで操作するよりもマウスで操作するほうが多い
    私もキーボード操作よりマウスで操作するほうが多いので、Mery もどちらかというとマウスを使う人のほうが馴染んでいただける気がします。

    > javascriptエンジンはIEのバージョンごとに違うというとことで、おかしな挙動をするはもしかしてIE6のままのXPだからなのか?などとおもっていました。
    確かに、JavaScript エンジンは IE のバージョンによって仕様が違いますね。Mery も Ver 2.6.6 以降は新しい JavaScript エンジンを採用していますので、IE6 の環境だと若干 JavaScript の仕様が異なる部分はありますが、相当マニアックなことをしない限り (普通に Mery のマクロを書くぐらいなら) 問題ないと思います。

    > マクロリファレンスのおかげでMery固有の関数は徐々に理解できるようになってきましたが、javascript自体の理解はまだまだなので、しばらくはマクロいじりを楽しめそうです。 :)
    面白いマクロができたら、MeryWiki に投下してくださると嬉しいです ^^ あと、アイコンも…。

    (といっても、Wiki は某掲示板みたいにいろんな人の反応がないのでつまらないですよね)

     |  Kuro  |  返信
  6. > 面白いマクロができたら、MeryWiki に投下してくださると嬉しいです ^^ あと、アイコンも…。

    ありがとうございます。おかげさまで、表題案件だった
    > マクロライブラリの「引用の追加」と「括弧で挟む」のコードを参考にポップアップメニューからパターンを選んで選択範囲をカッコで囲うマクロ「カッコ...」
    はおもいどおりの動作をしてくれています(あれこれ詰めこんでおいて、ポップアップメニューが長くなりすぎないようにいくつかをコメントアウトしておいたりなどしています)。
    「引用の追加」マクロも同様に手を入れさせていただき、"クリップボードから" なども項目に加えて使いまくりです。 :)
    クリップボードからの挿入は「各行の先頭に貼り付ける (挿入)」として独立もさせています。

    "Mery用 マテリアルデザインっぽいアイコン.icl" でアイコン化するための『小マクロ集』と『練習で作ってみたが、うまくないマクロ』と称して、拙作のアイコンで対応可能なマクロをまとめてあるのですが、現状ではWikiの書き方がわかりませんし、MeryWikiへの掲載のお許しをいただけるともおもっていませんでしたので、pastebin とGoogleドライブにてひっそりとうpしてあります。
    お時間のあるときにご確認いただけないでしょうか?

    『小マクロ集』 https://pastebin.com/r9dDAihE
    『練習マクロ』 https://pastebin.com/70QW2YMq
    『マテリアルデザインっぽいアイコン等』 https://drive.google.com/open?id=1Q9G08S6osuREA3DFp7waem14Fkt9AtJk

    Wikiでの掲載に問題のある部分がないかご確認・添削をいただいたうえで、Wikiの書き方も勉強してみようかとおもいます。
    …やはりHTMLとかの知識が必要なんでしょうか? :(

     |  ぽい  |  返信
  7. ご返信ありがとうございます。
    無事、マクロが完成されたようで良かったです。

    > 「引用の追加」マクロも同様に手を入れさせていただき、"クリップボードから" なども項目に加えて使いまくりです。 :)
    まさにマクロの上手な使い方って感じです。
    かゆいところに手が届く機能を標準機能で実装してしまうと、なんだか似たような機能が増えていって煩雑になってしまうので、マクロでやってね!っていう前提のテキストエディタなので、そうやって使っていただけると有難いです ^^

    > お時間のあるときにご確認いただけないでしょうか?
    拝見しました、すごいですね!小マクロ集、この発想はなかったです ^^
    これだけ量があれば、確かに…。以前のツールバー増設のご要望も納得です。。。

    練習マクロのほうは、私でも作るのヤダナーって思うレベルのマクロですね。こちらは全部チェックするのはつらいので、なんか動かないんだけど!みたいなご質問であれば、相談には乗ります (w

    > マテリアルデザインっぽいアイコン等
    これはハイクオリティ!以前にも拝見しましたが、素晴らしいです。Mery に関係なく、個人のサイトで配布しても人気が出るレベルだと思います。

    MeryWiki は Wikipedia と同様、誰でも自由に編集できるシステムなので、特に許可などは必要ありません。

    記事を投稿しておけば誰かが修正してくれることもありますし、例えば、練習マクロ (うまくいかないマクロ) を登録しておけば、誰かが改善してくれたりすることもあります。

    逆に、他の人の投稿しているものを修正したり、改善したりもできます。そうやって精度を高めていくのが Wiki システムの醍醐味です。

    > Wikiでの掲載に問題のある部分がないかご確認・添削をいただいたうえで、Wikiの書き方も勉強してみようかとおもいます。
    間違ったマクロでも問題ありませんし、どんな些細なものでも大丈夫です。私も、自分しか使わないようなマクロを保存の目的で投稿してたりします ^^
    その代わり、どれだけスゴイ内容を投稿しても見返りはありませんが… (w

    > …やはりHTMLとかの知識が必要なんでしょうか? :(
    Wiki の編集は HTML の知識は必要ありません。文字を書くだけならそのままで結構ですし、ちょっと太字にしたいなーとか思うと、Wiki の書式を見ればすぐできます。

    マクロライブラリは、特に決まった形式は用意してないのですが、他の人の書いた記事のソースをコピーして編集すれば簡単にできると思います。

    ↓ MeryWiki の編集については下記に簡単な説明があります。
    https://www.haijin-boys.com/wiki/MeryWiki:MeryWiki%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

    ↓注意事項
    https://www.haijin-boys.com/wiki/MeryWiki:%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%BB%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC

    特に注意する点としては、ユーザ登録しなくても編集はできますが、その場合、Wiki の仕組み上、IPアドレスが公開されます。ユーザ登録してログインしてから編集すると、IP アドレスは隠れます。この点は、ご了承ください。

    アイコン置き場みたいなスペースは用意していませんが、MeryWiki はファイルのアップロードもできるので、マクロ用のアイコンということでマクロライブラリに投下してもらっても大丈夫ですよ。

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

    > 無事、マクロが完成されたようで良かったです。
    > 特に注意する点としては、ユーザ登録しなくても編集はできますが、その場合、Wiki の仕組み上、IPアドレスが公開されます。ユーザ登録してログインしてから編集すると、IP アドレスは隠れます。この点は、ご了承ください。
    おかげさまで(コードのよしあしはともかく)いくつかは確実に動作するようになり、昨日wiki編集の練習がてらマクロ「行を複製 (複数行可) 」、「行の先頭に貼り付け 」、「カッコで囲う(2種)」を投稿してみました。「引用の追加」の改変バージョンも"クリップボードから" の部分だけ「行の先頭に貼り付け 」マクロのページに貼ってあります ←!?
    さっそくながらマクロ3件の投稿の途中でログイン状態がきれてしまっていたようで、「行の先頭に貼り付け 」は作成者がアカウント名の sukemaru になっていませんでした。 :(

    > 小マクロ集、この発想はなかったです ^^
    > これだけ量があれば、確かに…。以前のツールバー増設のご要望も納得です。。。
    > その代わり、どれだけスゴイ内容を投稿しても見返りはありませんが… (w
    着想としては「キーアサイン集」とおなじ小マクロ集ですが、「キー」操作よりも「マウス」操作に重点を置きたかったんです。これでMery本体の主だったメニュー項目の(Materialデザインっぽい)アイコン化ができたのではないかとおもいます。
    プログラムやweb制作についてはまったくわからないので、wikiにあるそちら方面のマクロのアイコン化はわたしには無理…。たぶんそちら方面の人たちは「キーボード派」でしょうからアイコン化の必要もないだろうと勝手におもいこんでます。
    アイコンの投稿でkuroさんの心が将来のツールバー増設にむけて傾いてくれるとうれしいのですが … いかがでしょう? lol

    > アイコン置き場みたいなスペースは用意していませんが、MeryWiki はファイルのアップロードもできるので、マクロ用のアイコンということでマクロライブラリに投下してもらっても大丈夫ですよ。
    「マテリアルデザインっぽいアイコンと『小マクロ集』 」のページと、アイコンライブラリのZIPほかのファイルの投稿もできました。長大なページとなってしまいましたが、どうぞご容赦ください(どなたかが添削してくれるとよいのですが)。

    小マクロ集のページとZIP内のテキストドキュメント『アイコンを変更する方法.txt』のなかでプラグイン.DLL内のアイコンリソースの書きかえに言及しているのですが、制作者のkuroさんからみて問題ありませんか?
    小マクロ集のページ作成については pastebin の内容に準じたものにして、ZIPのほうもGoogleドライブとおなじ構成にしてアイコンライブラリ以外のファイルも詰めましたが、プラグイン.DLLの改変云々がソフトウェア使用許諾書の禁止事項に触れるならその部分のテキストは削除するようにしますので、あらためてご確認をお願いいたします。

    あらためましてアイコンと小マクロ集のwikiへの投稿についてご快諾(?)いただき、ありがとうございました。

     |  ぽい(sukemaru)  |  返信
  9. ご返信ありがとうございます。

    Wiki のほうの編集もありがとうございました。そしてお疲れ様です ^^
    拝見してきましたが、完璧です。

    > 着想としては「キーアサイン集」とおなじ小マクロ集
    すごい情報量!これだけあればきっとマウス派の人の役に立つと思います。

    > アイコンの投稿でkuroさんの心が将来のツールバー増設にむけて傾いてくれるとうれしいのですが … いかがでしょう? lol
    あはは… ^^; (と笑ってごまかしておきます…)

    > 「マテリアルデザインっぽいアイコンと『小マクロ集』 」のページ
    こちらも拝見しました。とても読みやすいですし、内容的にも面白いですね。長文でも全然問題ないです。

    > 小マクロ集のページとZIP内のテキストドキュメント『アイコンを変更する方法.txt』のなかでプラグイン.DLL内のアイコンリソースの書きかえに言及しているのですが、制作者のkuroさんからみて問題ありませんか?
    プラグインのリソース書き換えは、Mery 本体に同梱しているアウトラインプラグインはソフトウェア使用許諾が当てはまりますので禁止事項に該当することになります。

    MeryWiki で単品で公開しているプラグインのほうはソフトウェア使用許諾が同梱されていないので禁止事項に該当しないことになりますが、こちらも同じ有料のアイコン素材を使用しているのでリソースの改ざんはダメですね。(ソフトウェア使用許諾を同梱するように修正しておきます)

    ほんとは有料アイコンのライセンス上、リソースを抽出して再利用するのが禁止なだけなのですが、「抽出はダメだけど、書き換えはOK」みたいなライセンス条文もおかしいので、改ざん行為全般を禁止事項とさせていただいているのが現状です。

    Mery の開発継続のためにもご理解・ご協力いただけると幸いです。

    ちなみに Wiki へご投稿いただく内容につきましては投稿者の常識に基づいて判断していただく方針なので、スパムや荒らしでなければ、たとえソフトウェア使用許諾違反の内容だとしても私のほうでチェックなどはしていません。

    もちろん、だれでも気軽に書き換えられるのが Wiki なので、私もいちユーザとして内容を編集することはあるかもしれませんが ^^

    > あらためましてアイコンと小マクロ集のwikiへの投稿についてご快諾(?)いただき、ありがとうございました。
    こちらこそ、ご投稿ありがとうございます。

    Wiki の編集って、はじめるとなかなか楽しいのですが、はじめるまでがなかなか気分が乗らなくて、ヘルプやマクロリファレンスなどの更新もサボりまくってましたが、私もちょっとモチベーションアップにつながりました!

    今後ともよろしくお願いいたします。

     |  Kuro  |  返信
  10. プラグインの改変に関する記述の削除が完了しました(※古い版のZIP内のテキストドキュメントに記述が残ってしまっていますが、投稿したファイルの削除の方法がわかりませんでした)。

    1行のコードについての質問からおもってもみなかった展開となりましたが、おかげさまで楽しい夏休みになりました。
    このたびは色々とありがとうございました。

     |  ぽい (sukemaru)  |  返信
  11. お手数をおかけしました。

    > 1行のコードについての質問からおもってもみなかった展開となりましたが、おかげさまで楽しい夏休みになりました。
    そう言われてみるとCharRight から…。思えば遠くに来たものです ^^;
    夏休み…、夏休みはこれからが本番です!(主に宿題とか)

    > このたびは色々とありがとうございました。
    こちらこそ、ありがとうございました。
    この夏を費やした Mery の新しいバージョンがまもなく完成しますので、また遊びに来てくださいね。(外部ツールのアイコンのとこの相対パスの件も対応できそうです)

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