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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
バージョンの表記を修正
MSY-07 (トーク | 投稿記録)
フォントカラーや強調の除去、日付の除去、空白の除去
2行目: 2行目:
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。


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


== ソースコード ==
== ソースコード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
#title="ブックマーク一覧"
#title="ブックマーク一覧"
/*
/*
* ブックマーク一覧をポップアップメニューにして選択ジャンプ
* ブックマーク一覧をポップアップメニューにして選択ジャンプ
* Mery標準のブックマークが対象
* Mery標準のブックマークが対象
* 範囲選択中の場合は選択範囲を拡大
* 範囲選択中の場合は選択範囲を拡大
*/
*/
(function(){
(function(){
  // 描画停止
  // 描画停止
  Redraw = false;
  Redraw = false;
  with(document.selection){
  with(document.selection){
    var flgBlock = !isEmpty;
    var flgBlock = !isEmpty;
    //カーソル位置の保存
    //カーソル位置の保存
    var activePos = GetActivePos();
    var activePos = GetActivePos();
    var anchorPos = GetAnchorPos();
    var anchorPos = GetAnchorPos();
    var sX = ScrollX;
    var sX = ScrollX;
    var sY = ScrollY;
    var sY = ScrollY;
 
    var bookmarks = new Array();
    var bookmarks = new Array();
    StartOfDocument(false);
    StartOfDocument(false);
    // 先頭行がブックマークされてないか
    // 先頭行がブックマークされてないか
    var isTopMarked = false;
    var isTopMarked = false;
    CharRight(false);
    CharRight(false);
    if(PreviousBookmark()){
    if(PreviousBookmark()){
      isTopMarked = true;
      isTopMarked = true;
      SelectLine();
      SelectLine();
      menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
      menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
      Collapse();
      Collapse();
      bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
      bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
    } else {
    } else {
      StartOfDocument(false);
      StartOfDocument(false);
    }
    }
    while(NextBookmark()){
    while(NextBookmark()){
      SelectLine();
      SelectLine();
      menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
      menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
      Collapse();
      Collapse();
      bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
      bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
    }
    }
    var bmcount = bookmarks.length;
    var bmcount = bookmarks.length;
    if(bmcount == 0){
    if(bmcount == 0){
      //カーソル位置の復帰
      //カーソル位置の復帰
      SetActivePos(activePos);
      SetActivePos(activePos);
      SetAnchorPos(anchorPos);
      SetAnchorPos(anchorPos);
      ScrollX = sX;
      ScrollX = sX;
      ScrollY = sY;
      ScrollY = sY;
    } else {
    } else {
      var BookmarkMenu = CreatePopupMenu();
      var BookmarkMenu = CreatePopupMenu();
      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);
      if(ret == 0){
      if(ret == 0){
        //カーソル位置の復帰
        //カーソル位置の復帰
        SetActivePos(activePos);
        SetActivePos(activePos);
        SetAnchorPos(anchorPos);
        SetAnchorPos(anchorPos);
        ScrollX = sX;
        ScrollX = sX;
        ScrollY = sY;
        ScrollY = sY;
      } else {
      } else {
        StartOfDocument(false);
        StartOfDocument(false);
        if(isTopMarked)ret--;
        if(isTopMarked)ret--;
        for(i = 0; i < ret; i++){ NextBookmark(); }
        for(i = 0; i < ret; i++){ NextBookmark(); }
      }
      }
    }
    }
    if(flgBlock){
    if(flgBlock){
      //ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
      //ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択
      SetAnchorPos(anchorPos);
      SetAnchorPos(anchorPos);
    }
    }
  }
  }
  // 描画再開
  // 描画再開
  Redraw = true;
  Redraw = true;
})()
})()
</syntaxhighlight>
</syntaxhighlight>


== Mery Ver 2.7.0 以降への対応 ==
== Mery Ver 2.7.0 以降への対応 ==
<span style="color:#c00;">'''Mery Ver 2.7.0 以降'''で使用する場合は、'''20''' 行目付近を以下のように書き換えてください。</span>
Mery Ver 2.7.0 以降で使用する場合は、20 行目付近を以下のように書き換えてください。


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


; 変更前
; 変更前

2024年9月5日 (木) 08:23時点における版

概要

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

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