Macro/投稿/249

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F249


Top > Macro > 投稿 > 249

アウトデント

  • ページ: Macro/投稿
  • 作者: kourii?
  • カテゴリー: js
  • 投稿日: 2022-04-29 (金) 16:39:45

メッセージ

fileoutdentLines.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
/*
* @file   outdentLines.js
* @brief  インデントを左に
* 
* ・VSCodeの Ctrl + [ と同等の動きになるよう作成
* 
*/
 
 
function getOpenMode(){
    return Editor.ExpandParameter("${R?r$:$:$}");
}
 
 
function getCursorLogicCoordinates() {
    var cursorLine = ExpandParameter('$y') - 0;
    var cursorColumn = ExpandParameter('$x') - 0;
    return [cursorLine, cursorColumn];
}
 
 
function getSelectLogicCoordinatesFrom() {
    var layoutSelectLineFrom = GetSelectLineFrom();
    var selectLineFrom = LayoutToLogicLineNum(layoutSelectLineFrom);
    var selectColumnFrom = LineColumnToIndex(layoutSelectLineFrom, GetSelectColumnFrom());
    return [selectLineFrom, selectColumnFrom];
}
 
 
function getSelectLogicCoordinatesTo() {
    var layoutSelectLineTo = GetSelectLineTo();
    var selectLineTo = LayoutToLogicLineNum(layoutSelectLineTo);
    var selectColumnTo = LineColumnToIndex(layoutSelectLineTo, GetSelectColumnTo());
    return [selectLineTo, selectColumnTo];
}
 
 
function isEqualArray(array1, array2) {
    var i = array1.length;
    if (i != array2.length) return false;
    while (i--) {
    if (array1[i] !== array2[i]) return false;
    }
    return true;
};
 
 
function keepSelect(cursor, selectFrom, selectTo) {
    if (isEqualArray(cursor, selectFrom)) {
        MoveCursor(selectTo[0], selectTo[1], 0);
    } else {
        MoveCursor(selectFrom[0], selectFrom[1], 0);
    }
    MoveCursor(cursor[0], cursor[1], 1);
}
 
 
function getLastLine() {
    goFileEnd();
    return ExpandParameter('$y') - 0;
}
 
 
function isLastLine(line) {
    return line == getLineCount(0) + 1;
}
 
 
function outdentLine(line) {
    if (isLastLine(line)) return false;
    moveCursor(line, 1, 0);
    goLineEnd(4);
    var col1 = expandParameter('$x') - 0;
    if (col1 == 1) return false;
    UnindentTab();
    Up();
    goLineEnd();
    var col2 = expandParameter('$x') - 0;
    return col2 < col1;
}
 
 
function outdentLines() {
    if (getOpenMode() == "r") return;
    var cursor = getCursorLogicCoordinates();
    CommitUndoBuffer(); AddRefUndoBuffer(); AppendUndoBufferCursor(); SetDrawSwitch(0);
    if (isTextSelected()) {
        var selectFrom = getSelectLogicCoordinatesFrom();
        var selectTo = getSelectLogicCoordinatesTo();
        var len = selectTo[0] - selectFrom[0] + 1;
        MoveCursor(selectFrom[0], 1, 0);
        var outdentLineHash = {};
        for (var i = 0; i < len; i++) {
            outdentLineHash[selectFrom[0] + i] = outdentLine(selectFrom[0] + i);
        }
        if (outdentLineHash[cursor[0]] && 1 < cursor[1]) cursor[1]--;
        if (outdentLineHash[selectFrom[0]] && 1 < selectFrom[1]) selectFrom[1]--;
        if (outdentLineHash[selectTo[0]] && 1 < selectTo[1]) selectTo[1]--;
        keepSelect(cursor, selectFrom, selectTo);
    } else {
        if (outdentLine(cursor[0]) && 1 < cursor[1]) cursor[1]--;
        MoveCursor(cursor[0], cursor[1], 0);
    }
    SetUndoBuffer(); SetDrawSwitch(1); ReDraw();
}
 
 
outdentLines();


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル: fileoutdentLines.js 32件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2022-04-29 (金) 16:44:11 (1111d)