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

提供: MeryWiki
ナビゲーションに移動 検索に移動
編集の要約なし
MSY-07 (トーク | 投稿記録)
変数の宣言を追加
 
(3人の利用者による、間の25版が非表示)
1行目: 1行目:
== 概要 ==
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
Mery 本体 Ver1.0.14.2780 では論理行頭での SelectLine が効かないらしいので参考文字列は表示されません。


<source lang="javascript">
== ソースコード ==
//ブックマーク一覧をポップアップメニューにして選択ジャンプ
<syntaxhighlight lang="javascript" copy>
#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 = [];
Redraw = false;
var menuKey = "";
with(document.selection){
// 先頭行がブックマークされてないか
  //現在位置の記憶
var isTopMarked = false;
  var cursolX = GetActivePointX(mePosLogical);
sel.SetActivePoint(mePosLogical, 1, 2);
  var cursolY = GetActivePointY(mePosLogical);
if(sel.PreviousBookmark()){
  var sX = ScrollX;
isTopMarked = true;
  var sY = ScrollY;
sel.SelectLine();
 
menuKey = sel.Text.slice(0,24).replace(/\t/g, "\\t");
  var shift = !IsEmpty;
sel.Collapse();
  if(shift){
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
    //選択範囲の記憶
} else {
    var anchorX = GetAnchorPointX(mePosLogical);
sel.StartOfDocument(false);
    var anchorY = GetAnchorPointY(mePosLogical);
}
    var topX = GetTopPointX(mePosLogical);
while(sel.NextBookmark()){
    var topY = GetTopPointY(mePosLogical);
sel.SelectLine();
    var bottomX = GetBottomPointX(mePosLogical);
menuKey = sel.Text.slice(0, 24).replace(/\t/g, "\\t");
    var bottomY = GetBottomPointY(mePosLogical);
sel.Collapse();
  }
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
  var bookmarks = new Array;
}
  var menyKey;
var bmcount = bookmarks.length;
  StartOfDocument(false);
if(bmcount == 0){
  //先頭行がブックマークされてないか
//カーソル位置の復帰
  var isTopMarked = false;
sel.SetActivePos(activePos);
  CharRight(false);
sel.SetAnchorPos(anchorPos);
  if(PreviousBookmark()){
ScrollX = sX;
    isTopMarked = true;
ScrollY = sY;
    SelectLine();
} else {
    menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
var BookmarkMenu = CreatePopupMenu();
    bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
for(var i = 0; i < bmcount; i++){
  } else {
//メニューのアクセスキーも1から始まるほうが便利
    //もう一回先頭行に戻る
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1);
    StartOfDocument(false);
}
  }
var ret = BookmarkMenu.Track(0);
  while(NextBookmark()){
if(ret == 0){
    SelectLine();
//カーソル位置の復帰
    menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
sel.SetActivePos(activePos);
    bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
sel.SetAnchorPos(anchorPos);
  }
ScrollX = sX;
  var bmcount = bookmarks.length;
ScrollY = sY;
  if(bmcount == 0){
} else {
    //カーソル位置と選択範囲の復帰
sel.StartOfDocument(false);
    SetActivePoint(mePosLogical, cursolX, cursolY, false);
if(isTopMarked){
    if(shift){
ret--;
      SetAnchorPoint(mePosLogical, anchorX, anchorY);
}
    }
for(i = 0; i < ret; i++){
    SCrollX = sX;
sel.NextBookmark();
    SCrollY = sY;
}
  } else {
}
    var BookmarkMenu = CreatePopupMenu();
}
    for(var i = 0; i < bmcount; i++){
if(flgBlock){
      BookmarkMenu.Add("&" + i + " " + bookmarks[i], i + 1)
//ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
    }
sel.SetAnchorPos(anchorPos);
    var ret = BookmarkMenu.Track(0);
}
    if(ret == 0){
// 描画再開
      //カーソル位置と選択範囲の復帰
Redraw = true;
      SetActivePoint(mePosLogical, cursolX, cursolY, false);
})();
      if(shift){
</syntaxhighlight>
        SetAnchorPoint(mePosLogical, anchorX, anchorY);
      }
      SCrollX = sX;
      SCrollY = sY;
    } else {
      StartOfDocument(false);
      if(isTopMarked){ ret--; }
      for(i = 0; i < ret; i++){ NextBookmark(); }
    }
  }
  if(shift){
    if(GetActivePointY(mePosLogical) > topY){
      SetAnchorPoint(mePosLogical, topX, topY);
    }else{
      SetAnchorPoint(mePosLogical, bottomX, bottomY);
    }
  }
}
// 描画再開
Redraw = true;
</source>

2025年11月25日 (火) 16:53時点における最新版

概要[編集]

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

ソースコード[編集]

#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 = [];
	var menuKey = "";
	// 先頭行がブックマークされてないか
	var isTopMarked = false;
	sel.SetActivePoint(mePosLogical, 1, 2);
	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;
})();
スポンサーリンク