2015/3/18 (水) 23:02:24 返信 削除
[592] 逆TABインデント

勉強がてら、なんとなく作ってみました。
逆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("★逆インデントは選択時のみ"); }
}
貧弱
Mozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81