「ブックマーク一覧ジャンプ」の版間の差分
ナビゲーションに移動
検索に移動
省略された波括弧の追加 |
with文を使用しないソースコードに修正 |
||
| 15行目: | 15行目: | ||
// 描画停止 | // 描画停止 | ||
Redraw = false; | Redraw = false; | ||
var sel = document.selection; | |||
var flgBlock = !sel.IsEmpty; | |||
//カーソル位置の保存 | |||
var activePos = sel.GetActivePos(); | |||
var anchorPos = sel.GetAnchorPos(); | |||
var sX = ScrollX; | |||
var sY = ScrollY; | |||
var bookmarks = new Array(); | |||
sel.StartOfDocument(false); | |||
// 先頭行がブックマークされてないか | |||
var isTopMarked = false; | |||
sel.CharRight(false); | |||
if(sel.PreviousBookmark()){ | |||
isTopMarked = true; | |||
sel.SelectLine(); | |||
menuKey = sel.Text.slice(0,24).replace(/\t/g, "\\t"); | |||
sel.Collapse(); | |||
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey); | |||
} else { | |||
sel.StartOfDocument(false); | |||
} | |||
while(sel.NextBookmark()){ | |||
sel.SelectLine(); | |||
menuKey = sel.Text.slice(0, 24).replace(/\t/g, "\\t"); | |||
sel.Collapse(); | |||
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey); | |||
} | |||
var bmcount = bookmarks.length; | |||
if(bmcount == 0){ | |||
//カーソル位置の復帰 | |||
sel.SetActivePos(activePos); | |||
sel.SetAnchorPos(anchorPos); | |||
ScrollX = sX; | |||
ScrollY = sY; | |||
} else { | |||
var BookmarkMenu = CreatePopupMenu(); | |||
for(var i = 0; i < bmcount; i++){ | |||
//メニューのアクセスキーも1から始まるほうが便利 | |||
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1) | |||
} | } | ||
var | var ret = BookmarkMenu.Track(0); | ||
if( | if(ret == 0){ | ||
//カーソル位置の復帰 | //カーソル位置の復帰 | ||
SetActivePos(activePos); | sel.SetActivePos(activePos); | ||
SetAnchorPos(anchorPos); | sel.SetAnchorPos(anchorPos); | ||
ScrollX = sX; | ScrollX = sX; | ||
ScrollY = sY; | ScrollY = sY; | ||
} else { | } else { | ||
sel.StartOfDocument(false); | |||
if(isTopMarked){ | |||
ret--; | |||
} | } | ||
for(i = 0; i < ret; i++){ | |||
sel.NextBookmark(); | |||
} | } | ||
} | } | ||
} | |||
if(flgBlock){ | |||
//ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択 | |||
sel.SetAnchorPos(anchorPos); | |||
} | } | ||
// 描画再開 | // 描画再開 | ||
| 90行目: | 89行目: | ||
; 変更前 | ; 変更前 | ||
18. var bookmarks = new Array(); | 18. var bookmarks = new Array(); | ||
19. <span style="color:#c00;">StartOfDocument(false);</span> | 19. <span style="color:#c00;">sel.StartOfDocument(false);</span> | ||
20. <i style="color:#408080;">// 先頭行がブックマークされてないか</i> | 20. <i style="color:#408080;">// 先頭行がブックマークされてないか</i> | ||
21. var isTopMarked = false; | 21. var isTopMarked = false; | ||
22. <span style="color:#c00;">CharRight(false);</span> | 22. <span style="color:#c00;">sel.CharRight(false);</span> | ||
23. if(PreviousBookmark()){ | 23. if(sel.PreviousBookmark()){ | ||
24. isTopMarked = true; | 24. isTopMarked = true; | ||
; 変更後 | ; 変更後 | ||
18. var bookmarks = new Array(); | 18. var bookmarks = new Array(); | ||
19. <span style="color:#c00;">'''//''' StartOfDocument(false);</span> | 19. <span style="color:#c00;">'''//''' sel.StartOfDocument(false);</span> | ||
20. <i style="color:#408080;">// 先頭行がブックマークされてないか</i> | 20. <i style="color:#408080;">// 先頭行がブックマークされてないか</i> | ||
21. var isTopMarked = false; | 21. var isTopMarked = false; | ||
22. <b style="color:#c00;">SetActivePoint(mePosLogical, 1, 2);</b> | 22. <b style="color:#c00;">sel.SetActivePoint(mePosLogical, 1, 2);</b> | ||
23. if(PreviousBookmark()){ | 23. if(sel.PreviousBookmark()){ | ||
24. isTopMarked = true; | 24. isTopMarked = true; | ||
2025年1月7日 (火) 09:47時点における版
概要
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
Mery Ver 1.1.2.2840 および Ver 2.0.9.3936 での動作を確認しています。
ソースコード
#title="ブックマーク一覧"
/*
* ブックマーク一覧をポップアップメニューにして選択ジャンプ
* Mery標準のブックマークが対象
* 範囲選択中の場合は選択範囲を拡大
*/
(function(){
// 描画停止
Redraw = false;
var sel = document.selection;
var flgBlock = !sel.IsEmpty;
//カーソル位置の保存
var activePos = sel.GetActivePos();
var anchorPos = sel.GetAnchorPos();
var sX = ScrollX;
var sY = ScrollY;
var bookmarks = new Array();
sel.StartOfDocument(false);
// 先頭行がブックマークされてないか
var isTopMarked = false;
sel.CharRight(false);
if(sel.PreviousBookmark()){
isTopMarked = true;
sel.SelectLine();
menuKey = sel.Text.slice(0,24).replace(/\t/g, "\\t");
sel.Collapse();
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
} else {
sel.StartOfDocument(false);
}
while(sel.NextBookmark()){
sel.SelectLine();
menuKey = sel.Text.slice(0, 24).replace(/\t/g, "\\t");
sel.Collapse();
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
}
var bmcount = bookmarks.length;
if(bmcount == 0){
//カーソル位置の復帰
sel.SetActivePos(activePos);
sel.SetAnchorPos(anchorPos);
ScrollX = sX;
ScrollY = sY;
} else {
var BookmarkMenu = CreatePopupMenu();
for(var i = 0; i < bmcount; i++){
//メニューのアクセスキーも1から始まるほうが便利
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1)
}
var ret = BookmarkMenu.Track(0);
if(ret == 0){
//カーソル位置の復帰
sel.SetActivePos(activePos);
sel.SetAnchorPos(anchorPos);
ScrollX = sX;
ScrollY = sY;
} else {
sel.StartOfDocument(false);
if(isTopMarked){
ret--;
}
for(i = 0; i < ret; i++){
sel.NextBookmark();
}
}
}
if(flgBlock){
//ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
sel.SetAnchorPos(anchorPos);
}
// 描画再開
Redraw = true;
})()
Mery Ver 2.7.0 以降への対応
Mery Ver 2.7.0 以降で使用する場合は、20 行目付近を以下のように書き換えてください。
変更しない場合、ドキュメントの 1 行目がブックマークされていてもポップアップメニューに表示されなくなります (sukemaru) 。
- 変更前
18. var bookmarks = new Array(); 19. sel.StartOfDocument(false); 20. // 先頭行がブックマークされてないか 21. var isTopMarked = false; 22. sel.CharRight(false); 23. if(sel.PreviousBookmark()){ 24. isTopMarked = true;
- 変更後
18. var bookmarks = new Array();
19. // sel.StartOfDocument(false);
20. // 先頭行がブックマークされてないか
21. var isTopMarked = false;
22. sel.SetActivePoint(mePosLogical, 1, 2);
23. if(sel.PreviousBookmark()){
24. isTopMarked = true;
スポンサーリンク