「選択範囲を上下に移動」の版間の差分
空白の除去 |
行番号をクリック&ドラッグで行を範囲選択した状態でマクロを実行すると移動する行が1行増える不具合を修正 |
||
| (同じ利用者による、間の4版が非表示) | |||
| 11行目: | 11行目: | ||
=== 選択範囲を上へ移動 === | === 選択範囲を上へ移動 === | ||
<syntaxhighlight lang="javascript" copy> | <syntaxhighlight lang="javascript" copy> | ||
#title="選択範囲を上へ移動" | #title = "選択範囲を上へ移動" | ||
var s = | var s = document.selection; | ||
var ty = s.GetTopPointY(mePosLogical); | var ty = s.GetTopPointY(mePosLogical); | ||
var by = s.GetBottomPointY(mePosLogical); | var by = s.GetBottomPointY(mePosLogical); | ||
var bx = s.GetBottomPointX(mePosLogical); | |||
// 選択範囲の末尾が行頭にあるときの調整 | |||
if (ty != by && bx == 1) { | |||
by--; | |||
} | |||
if (ty > 1) { | if (ty > 1) { | ||
Redraw = false; | |||
var sx = ScrollX; | |||
var sy = ScrollY; | |||
// ブックマークの待避 | |||
var bookmarkList = GetBookmarkList(document, ty - 1, by, true); | |||
// 選択行を上へ移動 | |||
SelectLine(s, ty - 1, by); | |||
var a = s.Text.split("\n"); | |||
a.push(a.shift()); | |||
s.Text = a.join("\n"); | |||
// ブックマークの復元 | |||
for (var i = 0; i < bookmarkList.length; i++) { | |||
var y = bookmarkList[i] - 1; | |||
if (y == ty - 2) { | |||
y = by; | |||
} | |||
s.SetActivePoint(mePosLogical, 1, y); | |||
s.SetBookmark(); | |||
} | |||
// 選択の復元 | |||
ScrollX = sx; | |||
ScrollY = sy; | |||
SelectLine(s, ty - 1, by - 1); | |||
Redraw = true; | |||
} | } | ||
function SelectLine(s, ty, by) { | function SelectLine(s, ty, by) { | ||
s.SetAnchorPoint(mePosLogical, 1, ty); | |||
s.SetActivePoint(mePosLogical, 1, by, true); | |||
s.EndOfLine(true, mePosLogical); | |||
} | } | ||
| 55行目: | 63行目: | ||
// キャレットおよびスクロール位置が変更されるため必要なら待避 | // キャレットおよびスクロール位置が変更されるため必要なら待避 | ||
function GetBookmarkList(doc, top, bottom, isClear) { | function GetBookmarkList(doc, top, bottom, isClear) { | ||
var lines = doc.GetLines(0); | |||
top = (top == null || top < 1) ? 1 : top; | |||
bottom = (bottom == null || bottom > lines) ? lines : bottom; | |||
var s = doc.selection; | |||
var b = []; | |||
if (lines == 1) { | |||
s.SetActivePoint(mePosLogical, 2, 1); | |||
if (s.PreviousBookmark()) { | |||
b.push(1); | |||
} | |||
return b; | |||
} | |||
if (top == 1) { | |||
s.SetActivePoint(mePosLogical, 1, 2); | |||
if (s.PreviousBookmark()) { | |||
b.push(1); | |||
} | |||
} | |||
s.SetActivePoint(mePosLogical, 1, top - 1); | |||
while (s.NextBookmark()) { | |||
var y = s.GetActivePointY(mePosLogical); | |||
if (y > bottom) { | |||
break; | |||
} | |||
b.push(y); | |||
if (isClear) { | |||
s.ClearBookmark(); | |||
} | |||
} | |||
return b; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 90行目: | 98行目: | ||
=== 選択範囲を下へ移動 === | === 選択範囲を下へ移動 === | ||
<syntaxhighlight lang="javascript" copy> | <syntaxhighlight lang="javascript" copy> | ||
#title="選択範囲を下へ移動" | #title = "選択範囲を下へ移動" | ||
var s = | var s = document.selection; | ||
var ty = s.GetTopPointY(mePosLogical); | var ty = s.GetTopPointY(mePosLogical); | ||
var by = s.GetBottomPointY(mePosLogical); | var by = s.GetBottomPointY(mePosLogical); | ||
if ( | var bx = s.GetBottomPointX(mePosLogical); | ||
// 選択範囲の末尾が行頭にあるときの調整 | |||
if (ty != by && bx == 1) { | |||
by--; | |||
} | |||
if (document.GetLines(0) > by) { | |||
Redraw = false; | |||
var sx = ScrollX; | |||
var sy = ScrollY; | |||
// ブックマークの待避 | |||
var bookmarkList = GetBookmarkList(document, ty, by + 1, true); | |||
// 選択行を下へ移動 | |||
SelectLine(s, ty, by + 1); | |||
var a = s.Text.split("\n"); | |||
a.unshift(a.pop()); | |||
s.Text = a.join("\n"); | |||
// ブックマークの復元 | |||
for (var i = 0; i < bookmarkList.length; i++) { | |||
var y = bookmarkList[i] + 1; | |||
if (y == by + 2) { | |||
y = ty; | |||
} | |||
s.SetActivePoint(mePosLogical, 1, y); | |||
s.SetBookmark(); | |||
} | |||
// 選択の復元 | |||
ScrollX = sx; | |||
ScrollY = sy; | |||
SelectLine(s, ty + 1, by + 1); | |||
Redraw = true; | |||
} | } | ||
function SelectLine(s, ty, by) { | function SelectLine(s, ty, by) { | ||
s.SetAnchorPoint(mePosLogical, 1, ty); | |||
s.SetActivePoint(mePosLogical, 1, by, true); | |||
s.EndOfLine(true, mePosLogical); | |||
} | } | ||
| 134行目: | 150行目: | ||
// キャレットおよびスクロール位置が変更されるため必要なら待避 | // キャレットおよびスクロール位置が変更されるため必要なら待避 | ||
function GetBookmarkList(doc, top, bottom, isClear) { | function GetBookmarkList(doc, top, bottom, isClear) { | ||
var lines = doc.GetLines(0); | |||
top = (top == null || top < 1) ? 1 : top; | |||
bottom = (bottom == null || bottom > lines) ? lines : bottom; | |||
var s = doc.selection; | |||
var b = []; | |||
if (lines == 1) { | |||
s.SetActivePoint(mePosLogical, 2, 1); | |||
if (s.PreviousBookmark()) { | |||
b.push(1); | |||
} | |||
return b; | |||
} | |||
if (top == 1) { | |||
s.SetActivePoint(mePosLogical, 1, 2); | |||
if (s.PreviousBookmark()) { | |||
b.push(1); | |||
} | |||
} | |||
s.SetActivePoint(mePosLogical, 1, top - 1); | |||
while (s.NextBookmark()) { | |||
var y = s.GetActivePointY(mePosLogical); | |||
if (y > bottom) { | |||
break; | |||
} | |||
b.push(y); | |||
if (isClear) { | |||
s.ClearBookmark(); | |||
} | |||
} | |||
return b; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
スポンサーリンク