[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("★逆インデントは選択時のみ"); }
}