ブックマーク設定を保持できる Mery 2.7 の置換メソッドが速すぎて辛い

  1. ブックマーク設定を保持できる Mery 2.7 の置換メソッドって、なんであんなに処理が速いのでしょうか? うちのローエンド機でもバリ速すぎて「ありえない」レベルです。 :?
    マクロライブラリに投稿してある「字上げ/字下げ」系マクロ(インデント/逆インデント/スペース×2追加/削除)をブックマーク対応できるようにいじっているのですが、行数が多いと「置換」パネルで「選択した範囲のみ」「すべて置換」したほうがループ処理の JavaScript よりも圧倒的に速い…。

    ブックマーク対応の「字下げ」マクロは Replace( "^(?!$)", "\t", meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll ) にしてしまうほうがよさそうな感じなのですが、「字上げ」マクロ(逆インデント/スペース×2削除)の場合は行頭の字下げを一段階ずつ消すことができず「行頭空白文字の完全抹消」になってしまうのでモヤモヤしています。 :(
    「すべて置換」とは別に「1行にたいして1回まで」のようなオプションフラグがあればいいのに、とか恨めしくおもったり。

    それとも「ループ処理が遅いのはマシンスペックや JScript 5.8 のせいで、Chakra ならループ処理でも遅くないから気にするな」な案件ならよいのですが、どなたか、ご助力・ご助言をいただけないでしょうか。

    /**
     * 数百行、数千行の処理だとモッサリな
     * ブックマーク対応の「逆インデント」マクロのループ処理コード
     * (行頭の タブ文字×1 と 半角空白×1~2 と 全角空白×1 が対象)
     */
    // ty は選択範囲の先頭行、yy は選択範囲の末行
    var s = document.selection;
    var ty = s.GetTopPointY( mePosLogical );
    var yy = s.GetBottomPointY( mePosLogical );
    var reg = /(?:^\t|^[ ]{1,2}|^[ ])/;
    var line;
    BeginUndoGroup();
    Redraw = false;
    
    for ( var y = ty; y <= yy; y ++ ) {
      line = document.GetLine( y, 0 );
      if ( reg.test( line ) ) {
        s.SetActivePoint( mePosLogical, 1, y );
        s.SetAnchorPoint( mePosLogical, line.length + 1, y );
        s.Text = line.replace( reg , "" );
      }
    }
    
    Redraw = true;
    EndUndoGroup();
    
     |  sukemaru  |  返信
  2. > ブックマーク対応の「字下げ」マクロは

    んーと、ん?……えーと、んー?ちょっとよくわからないです

    > 「字上げ」マクロ(逆インデント/スペース×2削除)の場合は行頭の字下げを一段階ずつ消すことができず「行頭空白文字の完全抹消」になってしまう

    ここが話の肝でしょうか。1段階消すと2段階目が繰り上がってきて、2段階目は行頭じゃなかったのに、「行頭の」になってしまって、結果全部消えちゃうと

    > ブックマーク対応の「字下げ」マクロは Replace( "^(?!$)", "\t", meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll ) にしてしまうほうがよさそうな感じ

    よさそうな感じというのが速度的に問題ないということであれば

    s.Replace( "^\t|^[ ]{1,2}|^[ ]", "@", meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll );
    s.Replace( "@", "", meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll );
    

    これでどうでしょうか?まぁ全置換が2回になるので字下げよりは遅いでしょうし、わかんないこともいっぱいあるのでアレですけれど、for文でぐるぐるするよりは速いと思います。……たぶん

     |  シリル  |  返信
  3. >> シリル さん
    ありがとうございます。
    2段階で置換をかけるとは! 目からウロコです。( Д ) ..._。..._。コロコロコロ…
    for 文ぐるぐるでキャレットを移動させるのとはくらべるまでもなく、うちのロースペXPでも速度的に実用レベルになりました。これぞ「BeginUndoGroup() があればこそ」の方法ですね。 :D

    誤爆回避のための temp 文字列の検討が必要そうですし、他の問題も残っているので、しばらくはこれで「自家用」扱いでテスト運用してみます。 :)

    BeginUndoGroup();
    var s = document.selection;
    var flags = meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll;
    s.Replace( "^\t|^[ ]{1,2}|^[ ]", "@temp@", flags );
    s.Replace( "^@temp@", "", flags );
    s.Find( "", 0 );	// 検索文字列と検索オプションをリセット
    // document.HighlightFind = false;	// Find( "", 0 ) を入れてれば不要?
    EndUndoGroup();
    
     |  sukemaru  |  返信
  4. > 目からウロコです。( Д ) ..._。..._。コロコロコロ…

    ウロコじゃない!めんたまめんたま!やぁ、うまく行って良かったです
    今、1000行ほどにそれぞれ複数のタブがあるものに試したところ、私の環境ではfor文が0.8秒前後、全置換2回が0.03秒台でした。
    まぁ、簡易検索一覧マクロは、もっともっと、遥かに、桁違いに遅いです。言い訳がましく「簡易」と付けておいてよかった←、というか見直すの面倒ゴニョゴニョ

    > ブックマーク対応の

    複数行を範囲選択してTabやShift+Tabで、インデントや逆インデントが出来るのになんでマクロ作るんだろ?と思ってました
    その範囲内にブックマークがあると、ブックマークが消えちゃうんですね、やっと意味がわかりました、わかりましたが、そこまでする必要あるんだろうか……と、うーん、すごく思います

     |  シリル  |  返信
  5. > 私の環境ではfor文が0.8秒前後、全置換2回が0.03秒台でした。
    なっ…? スゴっ! 以前 Kuro さんが Chakra なら 20 倍(当社比)と言っていましたが、for 文のループ 1000 行で 0.8 秒とは! まさに 20 倍。
    私のばあい、自分の環境で少しでも早く動いてくれるようにとない知恵をしぼりながらちょこちょこ修正していますが、そんな素敵な数字が出る環境なら他の拙作マクロもパッパと動作しそうですね。 :|

    > 「簡易検索一覧」マクロ
    うちの XP だとかなり厳しかったですが、Chakra ならきっと速いんだろーなぁとおもっていました。シリルさんのPCでも遅めですか…。 :(
    ソースコードや英文なら禁則処理がきくのでうちの「検索ジャンプ」マクロの論理行処理でも実用に十分なのですが、表示行の場合に日本語の検索には不十分なのがくやしいかんじです(表示行ベースのコードはすでに3回ボツにしてます)。
    表示行ベースの全文検索で 2.7 のスクロールバーマーキング並みの高速処理ができるコードを作ってみたいものですが、まだまだ勉強不足でなにをどうしたものかまるで検討がつきません。 :?

    > ブックマーク対応の
    インデント/逆インデントをマクロ化してからは標準コマンドのインデント/逆インデントを利用していなかったのですが、いまのところ(2.7.4)標準コマンドのほうでもブックマーク設定を保持できないみたいですね。
    拙作マクロは複数行の選択範囲にたいする文字列操作のものも多いので、ブックマークをむやみやたらに使い出したこのごろでは、ブックマーク設定をこわさないようにと悩んでばかりです。

    > そこまでする必要あるんだろうか……と、うーん、すごく思います
    慣れ親しんだインデント/逆インデントではありましたが、選択範囲がないと1行相手に効かないとか、半角空白2文字で2段階以上の字下げしている行に対して「逆インデント」すると「タブのケタ数」(4文字や8文字)にあわせて一発で消されてしまい1段ずつ上げられないとか、まあそれなりに個人的な事情があるのです。 :(

     |  sukemaru  |  返信
  6. > ブックマーク設定を保持できる Mery 2.7 の置換メソッドって、なんであんなに処理が速いのでしょうか?
    遅いというマクロ、私も試させていただきましたが、これが遅いのはエディタエンジンの仕様ですね。というのも、論理座標 (mePosLogical) です。

    エディタエンジンの設計が物理座標ベースになっているため、論理座標への変換処理 (SetActivePoint + mePosLogical) 自体が遅いんです。

    現在の Mery ですと、表面上は論理座標の計算速度をある程度ごまかせるぐらいの仕組みを作ってはいますが、エディタエンジンの根本的な設計が変わったわけではないので、SetActivePoint を一回呼ぶだけでも遅いのにそれをループで呼び出しちゃうともう…。

    論理座標から内部で保持している物理座標への変換速度をいかに向上させるかは、Mery 開発当時からの最大の目標ではありますが、いまだに解が見つかっていません。

    どなたか TNotePad のソース (Mana2_2014 の NotePadString.pas の 1153 行目付近、LinesPosToWrapPos メソッド) を読んで論理座標から物理座標への変換速度の改善案を教えて欲しいです。

    SetActivePoint では内部で論理座標から物理座標への変換に LinesPosToWrapPos が呼ばれているので、ほぼ全行スキャンが走ってて非常に遅いですね。

    > 複数行を範囲選択してTabやShift+Tabで、インデントや逆インデントが出来るのになんでマクロ作るんだろ?と思ってました
    私もずっとそう思ってました。技術的な好奇心旺盛なんだなぁ、すごいなぁと… ^^;

    まさかインデントでブックマークが消えてたとは!

    確かに…、エディタエンジンのソースを確認してみたらインデントの処理は内部で一度選択範囲を削除してから挿入する仕組みになっていたので、ブックマーク吹き飛びますわな。

    その処理、私が作ったわけじゃないので気づきませんでした。(と言い訳を挟みつつ)

    他にも、大文字に変換とか、タブを空白に変換とかの処理でも吹き飛んじゃいますねぇ。これはちょっと、私も速度との戦いの精神と時の部屋にこもることになりそうです。

     |  Kuro  |  返信
  7. いろいろと分かりやすくご説明いただきまして、ありがとうございます。
    > 遅いというマクロ、私も試させていただきましたが、これが遅いのはエディタエンジンの仕様ですね。というのも、論理座標 (mePosLogical) です。
    > エディタエンジンの設計が物理座標ベースになっているため、論理座標への変換処理 (SetActivePoint + mePosLogical) 自体が遅いんです。
    「キャレットの移動回数」だけは最小限におさえたつもりでしたが、まさかの罠!
    でも SetActivePoint( mePosLogical ) ではなく、SetActivePos( pos ) で動作させれば少しは動作速度があがるかもしれないのかしら。
    とりあえず今夜のところは行頭の pos を取得するコードを作るまでしかできませんでしたが、さらしておきます。
    これを「字下げ/字上げ」に組み込んで速度があがればいいのですが。

    // 全論理行の行頭の位置( pos )の配列を取得する
    var pArray = LineTopArray();
    
    // 100 行目か 3 行目の先頭に移動
    document.selection.SetActivePos( pArray[100] || pArray[3] );
    // ※ここまでで 0.1 秒弱/ 9500行(33 万文字) @ winXP(32bit); JScript 5.8
    // 約 0.8 ~ 0.9 秒/ 6 万行(780 万文字)
    
    // OutputBar.Writeln( pArray.join( ", " ) );	// ※行数が多いと文字列の描画コストがかかる
    // Alert( "論理行数: " + ( pArray.length - 1 ) + " 行" );
    
    /**
     * 論理行の行頭位置( Pos )を配列で返す関数
     */
    function LineTopArray() {
      // index と 論理行番号を一致させるために array[0] にダミー要素を入れておく
      var array = [ "LineTopPos", 0 ];		// array[1] は1行目の行頭 pos = 0
      var dText = document.Text;
      for ( var pos = 0; pos >= 0; ) {
        pos = dText.indexOf( "\n", pos );	// \n の出現位置
        if ( pos < 0 ) { break; }
        else { array.push( ++ pos ); }		// pos = pos + "\n".length
      }
      return array;
    }
    

    > 論理座標から内部で保持している物理座標への変換速度をいかに向上させるかは、Mery 開発当時からの最大の目標ではありますが、いまだに解が見つかっていません。
    「キャレットの移動なしで論理座標や pos から表示座標に変換するマクロメソッドの開発をいつかお願いしようと思っていました」なんて言いづらい…。 :(

    > どなたか TNotePad のソース (Mana2_2014 の NotePadString.pas の 1153 行目付近、LinesPosToWrapPos メソッド) を読んで論理座標から物理座標への変換速度の改善案を教えて欲しいです。
    なにが書いてあるのかまるでわかりませんでしたー。 ← オ呼ビジャナイ

    > これはちょっと、私も速度との戦いの精神と時の部屋にこもることになりそうです。
    (・∀・)人(・∀・)ナカーマ

     |  sukemaru  |  返信
  8. var start = new Date();	// 所要時間計測(開始)
    BeginUndoGroup(); Redraw = false;
    // ※選択範囲の拡張・調整は割愛
    var s = document.selection;
    var ty = s.GetTopPointY( mePosLogical );
    var yy = s.GetBottomPointY( mePosLogical );
    var reg = /(?:^\t|^[ ]{1,2}|^[ ])/;
    var line;
    
    /**
     * 全論理行の行頭位置(pos)を取得 (◆2019/05/10 追加)
     * ※ ty から yy に範囲を限定しても速度的に大差ないので、とりあえず全行
     */
    var array = [ "", 0 ];	// a[y] で論理行 y の行頭の pos
    var dText = document.Text;
    for ( var pos = 0; ; ) {
      pos = dText.indexOf( "\n", pos );	// \n の出現位置
      if ( pos < 0 ) { break; }
      else { array.push( ++ pos ); }	// pos = pos + "\n".length
    }
    
    /* pos ベースでループ処理するので、下の行から順に (◆2019/05/10 変更) */
    for ( var y = yy; y >= ty; y -- ) {
      line = d.GetLine( y, 0 );
      if ( reg.test( line ) ) {
        // s.SetActivePoint( mePosLogical, 1, y );	// (◆2019/05/10 コメントアウト)
        // s.SetAnchorPos( s.GetActivePos() + line.length );
        s.SetActivePos( array[y] );	// (◆2019/05/10 追加)
        s.SetAnchorPos( array[y] + line.length );
        s.Text = line.replace( reg , "" );
      }
    }
    // 元の選択範囲を復帰
    s.SetActivePoint( mePosLogical, 1, yy ); 
    s.EndOfLine( false, mePosLogical );
    s.SetAnchorPos( array[ty] );
    Redraw = true; EndUndoGroup();
    
    var elapsedSec = ( ( new Date() - start ) / 1000 ).toFixed( 3 );
    Status = "[ " + elapsedSec.replace( /\./, ". " ) + " 秒 ]";
    

    昨夜のコードを組み込んでみましたが、最初に貼ったコードと変わらず 100 行で 0.9 ~ 1.0 秒、1000 行で 12 ~ 14 秒でした。
    これはやはり「ボツ」ですね。 :(

    c.f. Replace() 2回での処理なら 100 行で約 0.1秒、1000 行で 3.8 秒。
    ブックマークがふき飛ぶ JavaScript の replace( /^\t|^[ ]{1,2}|^[ ]/gm, "" ) なら 100 行で約 0.02秒、1000 行で 0.2 秒。(@低スペXP JScript 5.8)

    Chakra だと Kuro さんにご説明いただいたような事情があてはまるのかもしれませんが、私の環境では SetActivePoint( mePosLogical, x, y ) が足を引っぱっているわけではなさそうです。
    というか、そもそも行ごとに書き換え s.Text = s.Text.replace( reg, "" ); するあたりががイケテナイですね。X(

     |  sukemaru  |  返信
  9. > 拙作マクロは複数行の選択範囲にたいする文字列操作のものも多いので、ブックマークをむやみやたらに使い出したこのごろでは、ブックマーク設定をこわさないようにと悩んでばかりです。

    と自分で言っておきながら、またブックマーク対応していないマクロを投稿してしまいました。:P
    ベータ版 Ver 2.6.9 のコメント欄で papagoat さんにいただいた「大文字小文字変換」マクロをいじりながら使ってきましたが、このたび「全角半角変換」マクロといっしょにリニューアルさせていただきました。
    >> papagoat さん
    その節はたいへんありがとうございました。

    いただきもののマクロばかりを使っていたので気がつきませんでしたが、いまさらながら Mery ビルトインの大文字/小文字変換や JavaScript の toLowerCase()/toUpperCase() ってアルファベット A-Z 以外にもしっかり対応しているんですね。 :D

     |  sukemaru  |  返信
  10. 置換1回で済ますなら、これでどうでしょう。

    var s = document.selection;
    var flags = meFindReplaceRegExp + meReplaceSelOnly + meReplaceAll;
    s.Replace( "^(?:\t| {1,2}| )(.*+)$", "$1", flags );
    document.HighlightFind = false;
    

    > どなたか TNotePad のソース (Mana2_2014 の NotePadString.pas の 1153 行目付近、LinesPosToWrapPos メソッド) を読んで論理座標から物理座標への変換速度の改善案を教えて欲しいです。
    試しに眺めてみましたが、最大でも数百行の JavaScript マクロしか書いていない分際なので、うーん…。
    ひとつ思いついたのは、先頭からではなく途中からスキャン、でしょうか。論理座標≦表示座標の関係が常に成り立つなら、論理座標あたりからスキャンを始められないかな、と。

    > 論理座標や pos から表示座標に変換するマクロメソッド
    MeryWiki の 利用者:黄身 さんの KILI ライブラリにそういうメソッドがありましたね(KILI.selex.logicalToView とか KILI.selex.posToView とか)。
    「行並べ替え」マクロの折り返し行の探査高速化では参考にいたしました。

     |  masme  |  返信
  11. > 置換1回で済ますなら、これでどうでしょう。
    ありがとうございます。
    そんな逆転の発想はまるでありませんでした。
    100 行で 0.05 ~ 0.06 秒、1000 行で 2.4 秒。もはやお茶に手を伸ばすヒマもありません。 :D
    s.Find( "", 0 ); を足して最新の検索履歴だけ消して、これで運用していこうとおもいます(というか、masme さんの「字下げ/字上げ」がブックマーク対応版に更新されるのを期待したりとか…。 ウッシッシ)。
    「引用符/コメント」マクロや「カッコで囲う」マクロにも流用できそうなので、いろいろと手を入れなおさないと。

    > MeryWiki の 利用者:黄身 さんの KILI ライブラリ
    あぁ、こんな隠しページが!
    これを読み込むにはしばらくかかりそうですが、いままで自作したマクロが「イラナイ子」になってしまいそうな予感がします。 :|

     |  sukemaru  |  返信
  12. > 「字下げ/字上げ」がブックマーク対応版に更新されるのを期待したりとか…。
    Selection.Replace 版を試作してみましたが、インデントするだけで検索・置換の設定が変わるのが気がかりでどうしたものかと。
    検索文字列・置換文字列・フラグの設定を読み書きできるプロパティとか、Selection.Find/Replace にオフレコで実行する(記録しない)フラグとかがあればいいのですが…。

    自分の場合、ブックマークは「消えてもいい」前提で使わないと精神衛生上よろしくないので、一時的なジャンプ地点くらいでしか使わないんですよね…。
    用途により別のエディタを使うこともあるので、「行頭に * や ★ を置く」みたいな自分ルールで文書自体に目印を付けて、正規表現検索やアウトラインで頭出しすることが多いです。

     |  masme  |  返信
  13. >> sukemaru さん
    > > これはちょっと、私も速度との戦いの精神と時の部屋にこもることになりそうです。
    > (・∀・)人(・∀・)ナカーマ
    なんとか、高速なままブックマークを保持して [インデント] や [選択範囲の変換] できるようになりました。次のバージョンでは標準搭載できると思いますが、ちょっと自信ないです…。

    >> masme さん
    > ひとつ思いついたのは、先頭からではなく途中からスキャン、でしょうか。論理座標≦表示座標の関係が常に成り立つなら、論理座標あたりからスキャンを始められないかな、と。
    ご協力ありがとうございます。

    確かに論理座標から物理座標への変換なのでその理論は行けそうですね。
    試しに実装してみましたところ、高速化されたような気がします。行の折り返しが多いと恩恵は少なくなりそうですが、先頭からスキャンするよりはよっぽど良いですね。

     |  Kuro  |  返信
  14. >> masme さん
    > インデントするだけで検索・置換の設定が変わるのが気がかりでどうしたものかと。
    公開用マクロにする場合、Replace() メソッドをつかう方法は、最新の検索履歴が書きかわってしまうことがネックになりますよね。なので、いまのところは私も自家用としてこっそり活用するだけです。

    > 自分の場合、ブックマークは「消えてもいい」前提で使わないと精神衛生上よろしくないので、一時的なジャンプ地点くらいでしか使わないんですよね…。
    アウトライン用のマーキングルールや段組み構成ならエディタを渡り歩いても門でいないのでしょうが、ブックマークをつけてドキュメントを管理しようとすると、他のエディタで編集しちゃいけなくなってしまうという問題がありますよね。 :|
    私の場合は PC のスペックが低いため、アウトラインはタブの切り替えにすぐについてきてくれないので、ブックマークのほうが断然使いやすいかんじです。
    自家用の「ブックマークジャンプ」マクロには masme さんの「行並べ替え」マクロにあった do - while ループも取り入れてアウトライン以上に使いやすくなりましたから、ブックマーク沼にどっぷりとはまってます。

    編集モードの構文ファイルやマクロをしっかり仕込んで使っているエディタは Mery だけですので、もう Mery からはなれられなくなっています。サブのエディタも別ディレクトリに用意した Mery (w/ sp モード) です。 :)

    >> Kuro さん
    > なんとか、高速なままブックマークを保持して [インデント] や [選択範囲の変換] できるようになりました。
    ありがとうございます。
    XPユーザーとしては、こういう使い勝手の向上こそ大歓迎です!(目玉機能のビッグウェーブには乗れないことが多いので)
    ブックマークに対応していない「大文字/小文字/頭文字変換」「全角/半角変換」のマクロを投稿したばかりでしたが、Mery 標準コマンドを利用するかたちにしておいてよかったー。 :D

    > 確かに論理座標から物理座標への変換なのでその理論は行けそうですね。
    > 試しに実装してみましたところ、高速化されたような気がします。
    どうすればそんなことができるのが教わりたいところですが、KILI ライブラリの JavaScript ですらチンプンカンプンな私には、きっと難しすぎるのでしょうね。 :(

     |  sukemaru  |  返信
  15. > 置換1回で済ますなら、これでどうでしょう。

    おぉ、流石はmasmeさんです。私実は正規表現さっぱりわかんないんですよね、勉強になります

    > なんとか、高速なままブックマークを保持して [インデント] や [選択範囲の変換] できるようになりました。次のバージョンでは標準搭載できると思いますが、ちょっと自信ないです…。

    ちょっと目を離した隙にスレ伸びてると思ったら難しそうな問題だなぁと思ってました
    これは口を挟めないゾとモジモジしている間に、解決の目処が立ってた!流石はKuroさんです
    ぶっちゃけ消えても別に気にしなかったですけど、サ○ラや秀○は消えないようでした。インデントの後に続けて「戻す」をすると秀○は消えちゃうようです

    C:\xxx\xxx.txt(5,5)
    ところでF10の機能で、()の中身が物理座標でも飛べるような仕組みが実はすでにあったりとかしますか?

     |  シリル  |  返信
  16. > ところでF10の機能で、()の中身が物理座標でも飛べるような仕組みが実はすでにあったりとかしますか?
    それっぽく動作するようにマクロを書いてみましたが、あまりうまくいきませんでした。 :|
    ジャンプ元の文字列から「ファイルへ移動(F10)」可能な文字列と (y,x) 座標を判別しようとするのは厄介だったので、「ファイルへ移動」してからゴニョゴニョする仕様にしました。 …っていうか、「ファイルへ移動」コマンドのファイルパスと座標の判定ルールがルーズすぎて、再現しづらかった。 X(

    一応、コードはマクロライブラリの「実験マクロ」のところに置いておきましたが、

    1. アウトプットバーの文字列からは表示座標ジャンプができない
     アウトプットバーにフォーカスがあるときは、ショートカットキーでマクロを起動することができません。
     アウトプットバーにフォーカスがあるときにツールバーアイコンでマクロを起動しても、論理行での F10 ジャンプのままになります(アウトプットバーの文字列を取得する方法がわかりませんでした)。

    2. 折り返しの多いファイルではうまく機能しないので、なにか失敗しているっぽい?
     とくに「指定文字数で折り返し」のばあい、論理行でジャンプしたまま終わってしまいます。
     GetActivePointY() の mePosView/mePosLogical が同じ値を返してきますし、すでに開いているファイルへの実行ならきちんと表示行でジャンプするので、よくわかりません。 :(

    うまく動作しない場合があるのは「オマ環」案件かもしれませんが、アウトプットバーから使えないのでシリルさん的にアウトですよね?
    https://www.haijin-boys.com/wiki/ファイルへ移動(物理座標ジャンプ)

     |  sukemaru  |  返信
  17. ひとつ思いついたのは、変更点を配列にぶっ込んでおき(書き換えは後で)
    配列データに従って後ろから処理
    (後ろからやれば座標は変わらないのでとりあえずそのままのデータを使える)

    論点違ってる可能性w

     |  クリ廃止  |  返信
  18. > https://www.haijin-boys.com/wiki/ファイルへ移動(物理座標ジャンプ)
    のマクロ
    > 2. 折り返しの多いファイルではうまく機能しないので、なにか失敗しているっぽい?
    >  とくに「指定文字数で折り返し」のばあい、論理行でジャンプしたまま終わってしまいます。
    >  GetActivePointY() の mePosView/mePosLogical が同じ値を返してきますし、すでに開いているファイルへの実行ならきちんと表示行でジャンプするので、よくわかりません。 :(
    については、Mery 2.7.5 でも(Mery 2.6.7 でも)おなじく物理行には飛んでくれず、Output にも正しい座標が返ってこないですね。2.6.7 だと「右端で折り返し」でも失敗することが多いような。
    うちだけ「オマ環」なのかしら? :(

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