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