「ブックマーク一覧ジャンプ」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
with文を使用しないソースコードに修正
MSY-07 (トーク | 投稿記録)
配列を修正、文の末尾にセミコロンを追加
23行目: 23行目:
var sY = ScrollY;
var sY = ScrollY;


var bookmarks = new Array();
var bookmarks = [];
sel.StartOfDocument(false);
sel.StartOfDocument(false);
// 先頭行がブックマークされてないか
// 先頭行がブックマークされてないか
54行目: 54行目:
for(var i = 0; i < bmcount; i++){
for(var i = 0; i < bmcount; i++){
//メニューのアクセスキーも1から始まるほうが便利
//メニューのアクセスキーも1から始まるほうが便利
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1)
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1);
}
}
var ret = BookmarkMenu.Track(0);
var ret = BookmarkMenu.Track(0);
79行目: 79行目:
// 描画再開
// 描画再開
Redraw = true;
Redraw = true;
})()
})();
</syntaxhighlight>
</syntaxhighlight>


88行目: 88行目:


; 変更前
; 変更前
  18.    var bookmarks = new Array();
  18.    var bookmarks = [];
  19.    <span style="color:#c00;">sel.StartOfDocument(false);</span>
  19.    <span style="color:#c00;">sel.StartOfDocument(false);</span>
  20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>
  20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>
96行目: 96行目:
  24.        isTopMarked = true;
  24.        isTopMarked = true;
; 変更後
; 変更後
  18.    var bookmarks = new Array();
  18.    var bookmarks = [];
  19.    <span style="color:#c00;">'''//''' sel.StartOfDocument(false);</span>
  19.    <span style="color:#c00;">'''//''' sel.StartOfDocument(false);</span>
  20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>
  20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>

2025年1月8日 (水) 02:57時点における版

概要

ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。

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 = [];
	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 = [];
19.    sel.StartOfDocument(false);
20.    // 先頭行がブックマークされてないか
21.    var isTopMarked = false;
22.    sel.CharRight(false);
23.    if(sel.PreviousBookmark()){
24.        isTopMarked = true;
変更後
18.    var bookmarks = [];
19.    // sel.StartOfDocument(false);
20.    // 先頭行がブックマークされてないか
21.    var isTopMarked = false;
22.    sel.SetActivePoint(mePosLogical, 1, 2);
23.    if(sel.PreviousBookmark()){
24.        isTopMarked = true;
スポンサーリンク