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

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


;ソース
<source lang="javascript">
<source lang="javascript">
//ブックマーク一覧をポップアップメニューにして選択ジャンプ
//ブックマーク一覧をポップアップメニューにして選択ジャンプ

2012年6月22日 (金) 17:41時点における版

ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。 Mery 本体 Ver1.0.14.2780 では論理行頭での SelectLine が効かないらしいので参考文字列は表示されません。

//ブックマーク一覧をポップアップメニューにして選択ジャンプ

// 描画停止
Redraw = false;
with(document.selection){
  //現在位置の記憶
  var cursolX = GetActivePointX(mePosLogical);
  var cursolY = GetActivePointY(mePosLogical);
  var sX = ScrollX;
  var sY = ScrollY;

  var shift = !IsEmpty;
  if(shift){
    //選択範囲の記憶
    var anchorX = GetAnchorPointX(mePosLogical);
    var anchorY = GetAnchorPointY(mePosLogical);
    var topX = GetTopPointX(mePosLogical);
    var topY = GetTopPointY(mePosLogical);
    var bottomX = GetBottomPointX(mePosLogical);
    var bottomY = GetBottomPointY(mePosLogical);
  }
  var bookmarks = new Array;
  var menyKey;
  StartOfDocument(false);
  //先頭行がブックマークされてないか
  var isTopMarked = false;
  CharRight(false);
  if(PreviousBookmark()){
    isTopMarked = true;
    SelectLine();
    menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
    bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
  } else {
    //もう一回先頭行に戻る
    StartOfDocument(false);
  }
  while(NextBookmark()){
    SelectLine();
    menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
    bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
  }
  var bmcount = bookmarks.length;
  if(bmcount == 0){
    //カーソル位置と選択範囲の復帰
    SetActivePoint(mePosLogical, cursolX, cursolY, false);
    if(shift){
      SetAnchorPoint(mePosLogical, anchorX, anchorY);
    }
    SCrollX = sX;
    SCrollY = sY;
  } else {
    var BookmarkMenu = CreatePopupMenu();
    for(var i = 0; i < bmcount; i++){
      BookmarkMenu.Add("&" + i + " " + bookmarks[i], i + 1)
    }
    var ret = BookmarkMenu.Track(0);
    if(ret == 0){
      //カーソル位置と選択範囲の復帰
      SetActivePoint(mePosLogical, cursolX, cursolY, false);
      if(shift){
        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;
スポンサーリンク