◀マクロトップへ
  • 592 逆TABインデント
  • [592] 逆TABインデント 貧弱 2015年03月18日 23:02

    勉強がてら、なんとなく作ってみました。
    逆TABインデントの挙動を自分好みに改変。

    ________________________
    // 逆TABインデント
    // unindenttab.js

    function unindenttab() {
    var linestr = Editor.GetLineStr(0); // カーソル行の文字列
    var cursor = parseInt(Editor.ExpandParameter("$x"), 10) - 1; // カーソル位置

    if(linestr.charAt(cursor - 1) == "\t") {
    // カーソルの左が TAB 文字の場合、TAB 文字削除
    Editor.DeleteBack();
    return true;
    } else {
    // カーソルの左が半角スペースの場合、TAB 幅の倍数のところまで削除
    var tw = Editor.ChangeTabWidth(0); // TAB 幅
    var sw = Editor.GetStrWidth(linestr.substr(0, cursor)); // カーソル位置までの文字幅
    var dw = (sw - 1) % tw + 1; // 削除する文字数

    // Undo 時にカーソル位置が元に戻るように、一旦左に移動した後に右選択してから削除する
    var i;
    for(i = 0; i < dw && linestr.charAt(cursor - i - 1) == " "; i++) { Editor.Left(); }
    if(i > 0) {
    for(; i > 0; i--) { Editor.Right_Sel(); }
    Editor.Delete();
    return true;
    }
    }

    return false;
    }

    if(Editor.IsTextSelected()) {
    // テキスト選択時は通常の逆TABインデント
    Editor.UnindentTab(0);
    } else {
    Editor.SetDrawSwitch(0);
    var ret = unindenttab();
    Editor.SetDrawSwitch(1);
    Editor.ReDraw(0);

    if(!ret) { Editor.StatusMsg("★逆インデントは選択時のみ"); }
    }