「行頭に移動」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
(「masme版」追加。概要を変更。目次を表示。) |
||
1行目: | 1行目: | ||
インデント位置<カーソル位置の場合は、インデント位置に、<br> | |||
カーソル位置≦インデント位置の場合は、(表示)行頭に移動します。<br> | |||
「Home」キーなどに割り当ててご利用ください。 | |||
「shift」変数を「true」に書き換えると、選択しながら移動します。<br> | |||
「Shift + Home」キーなどに割り当ててご利用ください。 | |||
<div>__TOC__</div> | |||
= Kuro 版 = | |||
<source lang="javascript"> | <source lang="javascript"> | ||
53行目: | 60行目: | ||
else | else | ||
document.selection.SetActivePoint(mePosView, i + 1, y1, shift); | document.selection.SetActivePoint(mePosView, i + 1, y1, shift); | ||
</source> | |||
= masme 版 (2014/02) = | |||
* 論理行での移動に対応しました。「isLogic」変数を「true」に書き換えてください。 | |||
* 折り返し行頭の空白は無視する仕様に変更しました。インデントとみなされるのは論理行頭の空白のみとなります。<br>Mery の「インデント/逆インデント」機能が論理行単位であるため、仕様を合わせました。<br>Kuro 版と同様、表示行単位で判定したい場合は、「igWrap」変数を「false」に書き換えてください。 | |||
<source lang="javascript"> | |||
//■行頭に移動(インデント対応) | |||
// 2014/02/06 | |||
//■範囲選択(true:する/false:しない) | |||
var shift = false; | |||
//■論理行の行頭に移動(true:する/false:しない) ●標準=false (表示行) | |||
var isLogic = false; | |||
//■折り返し行頭の空白は無視(true:する/false:しない) ●標準=true (論理行単位) | |||
var igWrap = true; | |||
//■インデントの定義 ●初期値=/^[ \t]+/ (半角空白/全角空白/水平タブ) | |||
var indent = /^[ \t]+/; | |||
(function(){ | |||
var sel = Document.Selection; | |||
var meP = isLogic? mePosLogical: mePosView; | |||
var meGL = isLogic? 0: meGetLineView; | |||
var px = sel.GetActivePointX(meP); | |||
var py = sel.GetActivePointY(meP); | |||
var ly = sel.GetActivePointY(mePosLogical); | |||
var line = Document.GetLine(py, meGL); | |||
//インデント位置を探索 | |||
var ix = 1+ (line.match(indent)||{lastIndex:0}).lastIndex; | |||
if (px<=ix || (igWrap && py!=ly)) | |||
//◆px<=ix カーソル位置≦インデント位置の場合 or 折り返し行の場合 | |||
sel.StartOfLine(shift, meP); //行頭へ | |||
else | |||
//◆ix<px インデント位置<カーソル位置の場合 | |||
sel.SetActivePoint(meP, ix, py, shift); //インデント位置へ | |||
})(); | |||
</source> | </source> |
2014年2月6日 (木) 22:01時点における版
インデント位置<カーソル位置の場合は、インデント位置に、
カーソル位置≦インデント位置の場合は、(表示)行頭に移動します。
「Home」キーなどに割り当ててご利用ください。
「shift」変数を「true」に書き換えると、選択しながら移動します。
「Shift + Home」キーなどに割り当ててご利用ください。
Kuro 版
// -----------------------------------------------------------------------------
// 行頭に移動
//
// Copyright (c) Kuro. All Rights Reserved.
// www: http://www.haijin-boys.com/
// -----------------------------------------------------------------------------
// シフトの状態(オンの場合は選択、オフの場合は移動)
var shift = false;
// インデントとして認識する文字(半角空白、全角空白、タブ)
var indent = new RegExp(" | |\t");
// 現在位置取得
var x1 = document.selection.GetActivePointX(mePosView);
var y1 = document.selection.GetActivePointY(mePosView);
// 選択終了位置取得
var x2 = document.selection.GetBottomPointX(mePosView);
var y2 = document.selection.GetBottomPointY(mePosView);
// カーソルを行末に移動
document.selection.EndOfLine(false);
// カーソルを行頭に移動(これで1行選択)
document.selection.StartOfLine(true);
var s = document.selection.Text;
var i = 0;
// 行頭からタブの数を確認
for (var j = 0; j < s.length; j++) {
c = s.charAt(j);
if (indent.test(c))
i++;
else
break;
}
// シフトオンの場合、選択終了位置に移動
if (shift)
document.selection.SetActivePoint(mePosView, x2, y2, false);
// 現在位置が1より大きくてタブの数以下の場合は行頭に移動
if (x1 > 1 && x1 <= i + 1)
document.selection.StartOfLine(shift);
// それ以外の場合はタブの数だけ進める
else
document.selection.SetActivePoint(mePosView, i + 1, y1, shift);
masme 版 (2014/02)
- 論理行での移動に対応しました。「isLogic」変数を「true」に書き換えてください。
- 折り返し行頭の空白は無視する仕様に変更しました。インデントとみなされるのは論理行頭の空白のみとなります。
Mery の「インデント/逆インデント」機能が論理行単位であるため、仕様を合わせました。
Kuro 版と同様、表示行単位で判定したい場合は、「igWrap」変数を「false」に書き換えてください。
//■行頭に移動(インデント対応)
// 2014/02/06
//■範囲選択(true:する/false:しない)
var shift = false;
//■論理行の行頭に移動(true:する/false:しない) ●標準=false (表示行)
var isLogic = false;
//■折り返し行頭の空白は無視(true:する/false:しない) ●標準=true (論理行単位)
var igWrap = true;
//■インデントの定義 ●初期値=/^[ \t]+/ (半角空白/全角空白/水平タブ)
var indent = /^[ \t]+/;
(function(){
var sel = Document.Selection;
var meP = isLogic? mePosLogical: mePosView;
var meGL = isLogic? 0: meGetLineView;
var px = sel.GetActivePointX(meP);
var py = sel.GetActivePointY(meP);
var ly = sel.GetActivePointY(mePosLogical);
var line = Document.GetLine(py, meGL);
//インデント位置を探索
var ix = 1+ (line.match(indent)||{lastIndex:0}).lastIndex;
if (px<=ix || (igWrap && py!=ly))
//◆px<=ix カーソル位置≦インデント位置の場合 or 折り返し行の場合
sel.StartOfLine(shift, meP); //行頭へ
else
//◆ix<px インデント位置<カーソル位置の場合
sel.SetActivePoint(meP, ix, py, shift); //インデント位置へ
})();
スポンサーリンク