|
|
| (同じ利用者による、間の9版が非表示) |
| 1行目: |
1行目: |
| | == 概要 == |
| ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。 | | ポップアップメニューでジャンプ先を選択。範囲指定中はジャンプ先まで選択範囲を拡大します。 |
|
| |
|
| 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; |
|
| |
|
| <syntaxhighlight lang="javascript">
| | var bookmarks = []; |
| #title="ブックマーク一覧"
| | var menuKey = ""; |
| /*
| | // 先頭行がブックマークされてないか |
| * ブックマーク一覧をポップアップメニューにして選択ジャンプ
| | var isTopMarked = false; |
| * Mery標準のブックマークが対象
| | sel.SetActivePoint(mePosLogical, 1, 2); |
| * 範囲選択中の場合は選択範囲を拡大
| | if(sel.PreviousBookmark()){ |
| */
| | isTopMarked = true; |
| (function(){
| | sel.SelectLine(); |
| // 描画停止
| | menuKey = sel.Text.slice(0,24).replace(/\t/g, "\\t"); |
| Redraw = false;
| | sel.Collapse(); |
| with(document.selection){
| | bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey); |
| var flgBlock = !isEmpty;
| | } else { |
| //カーソル位置の保存
| | sel.StartOfDocument(false); |
| var activePos = GetActivePos();
| | } |
| var anchorPos = GetAnchorPos();
| | while(sel.NextBookmark()){ |
| var sX = ScrollX;
| | sel.SelectLine(); |
| var sY = ScrollY;
| | menuKey = sel.Text.slice(0, 24).replace(/\t/g, "\\t"); |
|
| | sel.Collapse(); |
| var bookmarks = new Array();
| | bookmarks.push("Line " + sel.GetActivePointY(mePosLogical) + ":\t" + menuKey); |
| StartOfDocument(false);
| | } |
| // 先頭行がブックマークされてないか
| | var bmcount = bookmarks.length; |
| var isTopMarked = false;
| | if(bmcount == 0){ |
| CharRight(false);
| | //カーソル位置の復帰 |
| if(PreviousBookmark()){
| | sel.SetActivePos(activePos); |
| isTopMarked = true;
| | sel.SetAnchorPos(anchorPos); |
| SelectLine();
| | ScrollX = sX; |
| menuKey = Text.slice(0,24).replace(/\t/g, "\\t");
| | ScrollY = sY; |
| Collapse();
| | } else { |
| bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
| | var BookmarkMenu = CreatePopupMenu(); |
| } else {
| | for(var i = 0; i < bmcount; i++){ |
| StartOfDocument(false);
| | //メニューのアクセスキーも1から始まるほうが便利 |
| }
| | BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1); |
| while(NextBookmark()){
| | } |
| SelectLine();
| | var ret = BookmarkMenu.Track(0); |
| menuKey = Text.slice(0, 24).replace(/\t/g, "\\t");
| | if(ret == 0){ |
| Collapse();
| | //カーソル位置の復帰 |
| bookmarks.push("Line " + GetActivePointY(mePosLogical) + ":\t" + menuKey);
| | sel.SetActivePos(activePos); |
| }
| | sel.SetAnchorPos(anchorPos); |
| var bmcount = bookmarks.length;
| | ScrollX = sX; |
| if(bmcount == 0){
| | ScrollY = sY; |
| //カーソル位置の復帰
| | } else { |
| SetActivePos(activePos);
| | sel.StartOfDocument(false); |
| SetAnchorPos(anchorPos);
| | if(isTopMarked){ |
| ScrollX = sX;
| | ret--; |
| ScrollY = sY;
| | } |
| } else {
| | for(i = 0; i < ret; i++){ |
| var BookmarkMenu = CreatePopupMenu();
| | sel.NextBookmark(); |
| for(var i = 0; i < bmcount; i++){
| | } |
| //メニューのアクセスキーも1から始まるほうが便利
| | } |
| BookmarkMenu.Add("&" + (i+1) + " " + bookmarks[i], i+1)
| | } |
| }
| | if(flgBlock){ |
| var ret = BookmarkMenu.Track(0);
| | //ジャンプ前の選択開始位置からジャンプ後のカーソル位置まで範囲選択 |
| if(ret == 0){
| | sel.SetAnchorPos(anchorPos); |
| //カーソル位置の復帰
| | } |
| SetActivePos(activePos);
| | // 描画再開 |
| SetAnchorPos(anchorPos);
| | Redraw = true; |
| 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;
| |