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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
セクションの追加、句点の位置を修正
MSY-07 (トーク | 投稿記録)
変数の宣言を追加
 
(同じ利用者による、間の8版が非表示)
2行目: 2行目:
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。


Mery Ver.1.1.2.2840 および Ver.2.0.9.3936 での動作を確認しています (2012.09.24)
== ソースコード ==
<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 = [];
<syntaxhighlight lang="javascript">
var menuKey = "";
#title="ブックマーク一覧"
// 先頭行がブックマークされてないか
/*
var isTopMarked = false;
* ブックマーク一覧をポップアップメニューにして選択ジャンプ
sel.SetActivePoint(mePosLogical, 1, 2);
* Mery標準のブックマークが対象
if(sel.PreviousBookmark()){
* 範囲選択中の場合は選択範囲を拡大
isTopMarked = true;
*/
sel.SelectLine();
(function(){
menuKey = sel.Text.slice(0,24).replace(/\t/g, "\\t");
  // 描画停止
sel.Collapse();
  Redraw = false;
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
  with(document.selection){
} else {
    var flgBlock = !isEmpty;
sel.StartOfDocument(false);
    //カーソル位置の保存
}
    var activePos = GetActivePos();
while(sel.NextBookmark()){
    var anchorPos = GetAnchorPos();
sel.SelectLine();
    var sX = ScrollX;
menuKey = sel.Text.slice(0, 24).replace(/\t/g, "\\t");
    var sY = ScrollY;
sel.Collapse();
bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey);
    var bookmarks = new Array();
}
    StartOfDocument(false);
var bmcount = bookmarks.length;
    // 先頭行がブックマークされてないか
if(bmcount == 0){
    var isTopMarked = false;
//カーソル位置の復帰
    CharRight(false);
sel.SetActivePos(activePos);
    if(PreviousBookmark()){
sel.SetAnchorPos(anchorPos);
      isTopMarked = true;
ScrollX = sX;
      SelectLine();
ScrollY = sY;
      menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
} else {
      Collapse();
var BookmarkMenu = CreatePopupMenu();
      bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
for(var i = 0; i < bmcount; i++){
    } else {
//メニューのアクセスキーも1から始まるほうが便利
      StartOfDocument(false);
BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1);
    }
}
    while(NextBookmark()){
var ret = BookmarkMenu.Track(0);
      SelectLine();
if(ret == 0){
      menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
//カーソル位置の復帰
      Collapse();
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);
      SetActivePos(activePos);
if(isTopMarked){
      SetAnchorPos(anchorPos);
ret--;
      ScrollX = sX;
}
      ScrollY = sY;
for(i = 0; i < ret; i++){
    } else {
sel.NextBookmark();
      var BookmarkMenu = CreatePopupMenu();
}
      for(var i = 0; i < bmcount; i++){
}
        //メニューのアクセスキーも1から始まるほうが便利
}
        BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1)
if(flgBlock){
      }
//ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
      var ret = BookmarkMenu.Track(0);
sel.SetAnchorPos(anchorPos);
      if(ret == 0){
}
        //カーソル位置の復帰
// 描画再開
        SetActivePos(activePos);
Redraw = true;
        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;
})()
</syntaxhighlight>
</syntaxhighlight>
== Mery ver 2.7.0 以降への対応 ==
<span style="color:#c00;">'''Mery ver 2.7.0 以降'''で使用する場合は、'''20''' 行目付近を以下のように書き換えてください。</span>
変更しない場合、ドキュメントの 1 行目がブックマークされていてもポップアップメニューに表示されなくなります (2019/04/16 sukemaru) 。
; 変更前
18.    var bookmarks = new Array();
19.    <span style="color:#c00;">StartOfDocument(false);</span>
20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>
21.    var isTopMarked = false;
22.    <span style="color:#c00;">CharRight(false);</span>
23.    if(PreviousBookmark()){
24.      isTopMarked = true;
; 変更後
18.    var bookmarks = new Array();
19.    <span style="color:#c00;">'''//''' StartOfDocument(false);</span>
20.    <i style="color:#408080;">// 先頭行がブックマークされてないか</i>
21.    var isTopMarked = false;
22.    <b style="color:#c00;">SetActivePoint(mePosLogical, 1, 2);</b>
23.    if(PreviousBookmark()){
24.      isTopMarked = true;

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;
})();
スポンサーリンク