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

ページの作成:「;説明 ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。 Mery 本体 Ver1.0.14.2780 ...」
 
MSY-07 (トーク | 投稿記録)
変数の宣言を追加
 
(4人の利用者による、間の26版が非表示)
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>
スポンサーリンク