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

提供: MeryWiki
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
1行目: 1行目:
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。
Mery 本体 Ver1.0.14.2780 では論理行頭での SelectLine が効かないらしいので参考文字列は表示されません。
Mery Ver.1.1.2.2840 および Ver.2.0.9.3936 での動作を確認しています。
(2012.09.24)


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

2012年9月24日 (月) 22:21時点における版

ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。 Mery Ver.1.1.2.2840 および Ver.2.0.9.3936 での動作を確認しています。 (2012.09.24)

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