1 件の投稿を表示中 (合計 3 個)
  • 作成者
    投稿
  • #30145
    omusubi
    参加者

    こちらのエントリーに触発されて、マクロを作っています。

    選択文字列の移動について

    こちらの回答で江村さんの作られたマクロをベースにして、連続で動かせるように選択範囲の維持、元に戻しやすいように処理の履歴を束ねたりというアレンジをしています。
    その中で、設定のプロパティの強調(2)の括弧/引用符の自動補完がオンになっていて、対象にしているかっこの開始かっこを選択してこのマクロで動かそうしたところ、その都度閉じかっこが補完されてしまうので増殖してしまうようになってしまいました。
    このマクロの中では一時的にその補完をスキップするようにしたいと思っていますが可能でしょうか?

    document.Config.Highlight.AutoCompleteBracketsというプロパティを見つけたので添付のコードのように、一時的にfalseにしてみましたがうまく動きませんでした。
    お忙しいところすみませんがアドバイスいただけないでしょうか?

    【環境】
    Windows 10 Pro 21H1(19043.1202) x64
    EmEditor Pro 64-bit Portable v20.1.2

    // ShiftRight.jsee
    // Alt+Rightに割り当て
    
    var text = document.selection.text;
    var len = text.length;
    var prevAutoCompleteBrackets = false
    var prevCombineHistory = false;
    
    // 選択範囲がひとつ、改行を含まない場合のみ動作させる
    if (document.selection.Count == 0 && text.indexOf("\n") == -1) {
    	// 選択範囲が0の場合は、カーソル移動する
    	if (len == 0) {
    		document.selection.CharRight(false,1);
    	} else {
    		Redraw = false;
    		prevAutoCompleteBrackets = document.Config.Highlight.AutoCompleteBrackets;
    		document.Config.Highlight.AutoCompleteBrackets = false;
    		prevCombineHistory = CombineHistory;
    		CombineHistory = true;
    
    		document.selection.Delete(1);
    		document.selection.CharRight(false,1);
    		document.selection.Text = text;
    		document.selection.CharLeft(true, len);
    
    		CombineHistory = prevCombineHistory;
    		document.Config.Highlight.AutoCompleteBrackets = prevAutoCompleteBrackets;
    		Redraw = true;
    	}
    } else {
    	status = "選択範囲が複数、または改行コードを含んでいます";
    }

    13行目と22行目のCharRightをCharLeftに置き換えたShiftLeft.jseeも作成してAlt+Leftに割り当てています。

    #30239
    Yutaka Emura
    キーマスター

    いつもお世話になっております。

    一時的に、AutoCompleteBrackets を false にするには、以下のようにしてください。

    
    cfg = document.Config;
    prevAutoCompleteBrackets = cfg.Highlight.AutoCompleteBrackets;
    cfg.Highlight.AutoCompleteBrackets = false;
    cfg.Save();
    
    //  ここで必要な処理
    //  以下で元に戻す
    
    cfg.Highlight.AutoCompleteBrackets = prevAutoCompleteBrackets;
    cfg.Save();
    

    よろしくお願い致します。

    #30255
    omusubi
    参加者

    江村さん、ご回答ありがとうございました。

    設定は一旦保存する必要があったんですね。
    教えていただいたコードを組み込んで、思っていた動作になりました。

    どうもありがとうございました。

1 件の投稿を表示中 (合計 3 個)
  • このトピックに返信するにはログインしてください。