ブックマーク一覧ジャンプ

提供: MeryWiki
2025年1月7日 (火) 09:32時点におけるMSY-07 (トーク | 投稿記録)による版 (省略された波括弧の追加)
ナビゲーションに移動 検索に移動

概要

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

Mery Ver 1.1.2.2840 および Ver 2.0.9.3936 での動作を確認しています。

ソースコード

#title="ブックマーク一覧"
/*
* ブックマーク一覧をポップアップメニューにして選択ジャンプ
* Mery標準のブックマークが対象
* 範囲選択中の場合は選択範囲を拡大
*/
(function(){
	// 描画停止
	Redraw = false;
	with(document.selection){
		var flgBlock = !IsEmpty;
		//カーソル位置の保存
		var activePos = GetActivePos();
		var anchorPos = GetAnchorPos();
		var sX = ScrollX;
		var sY = ScrollY;

		var bookmarks = new Array();
		StartOfDocument(false);
		// 先頭行がブックマークされてないか
		var isTopMarked = false;
		CharRight(false);
		if(PreviousBookmark()){
			isTopMarked = true;
			SelectLine();
			menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
			Collapse();
			bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
		} else {
			StartOfDocument(false);
		}
		while(NextBookmark()){
			SelectLine();
			menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
			Collapse();
			bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
		}
		var bmcount = bookmarks.length;
		if(bmcount == 0){
			//カーソル位置の復帰
			SetActivePos(activePos);
			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){
				//カーソル位置の復帰
				SetActivePos(activePos);
				SetAnchorPos(anchorPos);
				ScrollX = sX;
				ScrollY = sY;
			} else {
				StartOfDocument(false);
				if(isTopMarked){
					ret--;
				}
				for(i = 0; i < ret; i++){
					NextBookmark();
				}
			}
		}
		if(flgBlock){
			//ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
			SetAnchorPos(anchorPos);
		}
	}
	// 描画再開
	Redraw = true;
})()

Mery Ver 2.7.0 以降への対応

Mery Ver 2.7.0 以降で使用する場合は、20 行目付近を以下のように書き換えてください。

変更しない場合、ドキュメントの 1 行目がブックマークされていてもポップアップメニューに表示されなくなります (sukemaru) 。

変更前
18.    var bookmarks = new Array();
19.    StartOfDocument(false);
20.    // 先頭行がブックマークされてないか
21.    var isTopMarked = false;
22.    CharRight(false);
23.    if(PreviousBookmark()){
24.        isTopMarked = true;
変更後
18.    var bookmarks = new Array();
19.    // StartOfDocument(false);
20.    // 先頭行がブックマークされてないか
21.    var isTopMarked = false;
22.    SetActivePoint(mePosLogical, 1, 2);
23.    if(PreviousBookmark()){
24.        isTopMarked = true;
スポンサーリンク