読者です 読者をやめる 読者になる 読者になる

次や前の罫線まで移動するマクロ

自分は、テキストを書くとき、「######・・・・」という文字列を、
よく罫線につかう。罫線から罫線までが情報のひとまとまり。

情報の確認するときなどに、罫線から罫線までワンアクションで移動
したかったので、次・前の罫線まで移動して、移動先の罫線をエディタの
編集領域のトップにするサクラエディタのマクロをかいた。

動作は、サクラエディタ ver 1.6.5で確認しています。

1つ前に移動ソース

var E  = Editor;
var current_para_top = 1;
var para_line_top    = 0;
var para_count = 0;
var page_down_line, page_up_line, max;

E.GoLineTop();
E.GoLineTop();
E.MoveHistSet();

// 前のかたまりの行を取得
do {
    E.Up();
    para_line_top = E.ExpandParameter('$y');
    if (E.GetLineStr(0).match(/^####.*/)) {
        if (para_count === 1){
            E.MoveHistSet();
            break;
        } else {
            para_count = 1;
        }

    }
} while (para_line_top > 1);

if (para_line_top*1 === 1){
    (new ActiveXObject('WScript.Shell')).Popup('First Para.');
} else {
    E.PageUp();
    page_up_line  = E.ExpandParameter('$y');
    E.PageDown();
    page_down_line    = E.ExpandParameter('$y');
    E.MoveHistPrev();
    // 同じだったら、上に1ページ以上ある。
    if (page_down_line === para_line_top) {
        max = page_down_line - page_up_line;
        do {
            F_WndScrollUp();
        } while(para_line_top === ExpandParameter('$y') && --max > 0);
        
    }
}

1つ先に移動ソース

var E  = Editor;
var current_para_top = 1;
var para_line_top    = 0;
var page_down_line, page_up_line, max;



E.GoLineTop();
E.GoLineTop();
E.MoveHistSet();

// 次のかたまりの行を取得
while (para_line_top < E.GetLineCount(0)) {
    E.Down();
    para_line_top = E.ExpandParameter('$y');
    if (E.GetLineStr(0).match(/^####.*/)) {
        E.MoveHistSet();
        break;
    }
}

if (para_line_top*1 === E.GetLineCount(0)){
    E.MoveHistPrev();
    (new ActiveXObject('WScript.Shell')).Popup('Last Para.');
} else {
    E.PageDown();
    page_down_line  = E.ExpandParameter('$y');
    E.PageUp();
    page_up_line    = E.ExpandParameter('$y');
    E.MoveHistPrev();
    // 同じだったら、下に1ページ以上ある。
    if (page_up_line === para_line_top) {
        max = page_down_line - page_up_line;
        do {
            F_WndScrollUp();
        } while(para_line_top === ExpandParameter('$y') && --max > 0)
    }
}

段落の最初の行へ

var E  = Editor;
var current_para_top = 1;
var para_line_top    = 0;
var init_line, page_down_line, page_up_line, max;
var para_count = 0;

init_line = E.ExpandParameter('$y');

E.GoLineTop();
E.GoLineTop();
E.MoveHistSet();

para_line_top = E.ExpandParameter('$y')

// 前のかたまりの行を取得
do {
    E.Up();
    para_line_top = E.ExpandParameter('$y');
    if (E.GetLineStr(0).match(/^####.*/)) {
        E.MoveHistSet();
        break;
    }
} while (para_line_top > 1);

if (para_line_top*1 !== 1){
    E.PageUp();
    page_up_line  = E.ExpandParameter('$y');
    E.PageDown();
    page_down_line = E.ExpandParameter('$y');
    E.MoveHistPrev();
    // 同じだったら、上に1ページ以上ある。
    if (page_down_line === para_line_top) {
        max = page_down_line - page_up_line;
        do {
            F_WndScrollUp();
        } while (para_line_top === ExpandParameter('$y') && --max > 0);
    }
}

この3つを、PrevPara.js、NextPara.js、ParaHome.jsなどとして
保存して、外部マクロに登録して使ってください。
自分は、Alt+PageUp, Alt+PageDownに登録して使っています。