簡易検索一覧などをアウトプット
ナビゲーションに移動
検索に移動
概要[編集]
簡易検索一覧などをパス付きでアウトプットバーに表示します。
機能[編集]
- カーソル位置をフルパス(行番号,桁数) 付きでアウトプットバーに表示します
- ブックマーク一覧をフルパス(行番号,桁数) 付きでアウトプットバーに表示します
- 簡易検索一覧をフルパス(行番号,桁数) 付きでアウトプットバーに表示します
アウトプットされたパスなどをダブルクリック、またはF10キーを押すことにより、該当箇所へジャンプすることが出来ます(※このジャンプ機能は当マクロの機能ではなく、アウトプットバーの機能です)。
他にアウトプットバーの表示/非表示や、クリア、選択範囲の表示などの機能もあります。
注意事項[編集]
// 設定:一覧表示の行番号について、表示方法を設定できます const sLgcl = true; // 行番号表示 true:論理座標,false:表示座標
通常、「フルパス(論理行番号,論理桁数) 該当箇所の内容」の形式で表示します。
上記設定を表示座標にした場合であっても(論理行番号,桁数)の箇所は変更できないため、
「フルパス(論理行番号,桁数) (表示行番号,表示桁数) 該当箇所の内容」のようにカッコを追加する形で表示します。
マクロが検索ワードを見失った場合や文書にブックマークが存在しない場合は各項目をグレーアウトして表示します、予めご了承ください。
また、ファイルに1行しかない場合、当マクロはブックマークを見失います、予めご了承下さい。
変更履歴[編集]
- 1.0.2 (2019-04-16)
- Ver 2.7.2 ブックマークの仕様変更に伴う修正
- 1.0.1 (2018-12-31)
- 微修正
- 1.0.0 (2018-12-31)
- 初版
ソースコード[編集]
#title = "簡易検索一覧などをアウトプット"
//------------------------------------------------------------------------------
// 設定:一覧表示の行番号について、表示方法を設定できます
const sLgcl = true; // 行番号表示 true:論理座標,false:表示座標
//------------------------------------------------------------------------------
// 定数(ポップアップメニューID)
const nEsc=0; // ポップアップメニューキャンセル時の項目ID
const nSep=0; // セパレータ表示のためのダミーID
const nOutFlg=50; // アウトプットバーON/OFFのID
const nSlctOut=51; // 選択範囲をアウトプットするID
const nOutClr=52; // アウトプットバーのクリアのID
const nOutPos=53; // カーソル位置をアウトプットID
const nOutBook=54; // ブックマーク一覧をアウトプットID
const nOutFind=55; // 簡易検索一覧をアウトプットID
// 変数
var activePos; // 位置退避用
var anchorPos; // 位置退避用
var sX; // 位置退避用
var sY; // 位置退避用
var sDate = new Date(); // 処理時間計測用
var fPath = Document.FullName;
var s = document.selection;
var o = outputbar;
var str = ""; // 文字列用変数
var wd = ""; // 検索ワード
var pos; // 位置用変数
var yl; // 論理座標の行番号
var yv; // 表示座標の行番号
var xl; // 論理座標の桁数
var xv; // 表示座標の桁数
var xyl = ""; // 論理座標の文字列(yl,xl)
var xyv = ""; // 表示座標の文字列(yv,xv)
// 関数
function StPos()
{ // カーソル位置の保存
activePos = s.GetActivePos();
anchorPos = s.GetAnchorPos();
sX = ScrollX;
sY = ScrollY;
}
function LdPos()
{ // カーソル位置の復帰
s.SetActivePos(activePos);
s.SetAnchorPos(anchorPos);
ScrollX = sX;
ScrollY = sY;
}
function GetStr()
{ // カーソル位置以降の文字列を選択する
pos = s.GetActivePos();
s.EndOfLine(false, mePosLogical);
s.SetAnchorPos(pos);
str = s.Text.slice(0, 24).replace(/\n/g, "");
s.SetActivePos(pos);
}
function MkPos()
{ // 座標表示用の文字列を作成する
yl = s.GetActivePointY(mePosLogical); // 論理座標の行番号
yv = s.GetActivePointY(mePosView); // 表示座標の行番号
xl = s.GetActivePointX(mePosLogical); // 論理座標の桁数
xv = s.GetActivePointX(mePosView); // 表示座標の桁数
xyl = "(" + yl + "," + xl + ") "; // 論理座標の文字列(yl,xl)
xyv = "(" + yv + "," + xv + ") "; // 表示座標の文字列(yv,xv)
}
function OpPos()
{ // カーソル位置をアウトプット
StPos(); // カーソル位置の保存
MkPos(); // 座標表示用の文字列を作成する
GetStr(); // カーソル位置以降の文字列を選択する
if(sLgcl) o.Writeln(fPath + xyl + "\t" + str);
else o.Writeln(fPath + xyl + xyv + "\t" + str);
LdPos(); // カーソル位置の復帰
}
function ChkBook()
{ // ブックマークの存在チェック
var bmcount = 0;
StPos();
s.CharRight(false);
if(s.PreviousBookmark()) bmcount++;
s.CharLeft(false);
if(s.NextBookmark()) bmcount++;
LdPos();
return bmcount;
}
function OpBook()
{ // ブックマーク一覧アウトプット
// (goatさんの『ブックマーク一覧ジャンプ』を参照)
StPos();
// 先頭行がブックマークされてないか
s.SetActivePoint(mePosLogical,1,2,false);
if(s.PreviousBookmark())
{ // 文書内の前のブックマークの位置に移動
MkPos(); // 座標表示用の文字列を作成する
s.SelectLine();
str = s.Text.slice(0,24).replace(/\n/g, "");
s.Collapse(); // 選択範囲を解除
if(sLgcl) o.Writeln(fPath + xyl + "\tBook: " + str);
else o.Writeln(fPath + xyl + " " + xyv + "\tBook: " + str);
} else {
s.StartOfDocument(false);
}
while(s.NextBookmark())
{ // 次のブックマークが見つかる限り続ける
MkPos(); // 座標表示用の文字列を作成する
s.SelectLine(); // カーソル位置の論理行を選択
str = s.Text.slice(0, 24).replace(/\n/g, "");
if(sLgcl) o.Writeln(fPath + xyl + "\tBook: " + str);
else o.Writeln(fPath + xyl + " " + xyv + "\tBook: " + str);
s.Collapse(); // 選択範囲を解除
}
LdPos();
}
function ChkFind()
{ // 検索ワードのチェック
var findcount = 0;
StPos();
// 検索ワードの参照・決定
if( s.isEmpty )
{ // 選択範囲がない時、前回の検索ワードを取得
s.FindRepeat(meFindNext | meFindAround);
wd = s.Text;
}else{
// 選択範囲がある時、それを検索ワードとする
wd = s.Text;
}
LdPos();
// 検索ワードが無い時、0を返す
if(wd == "") return findcount;
}
function OpFind()
{ // 簡易検索一覧をアウトプット
StPos();
pos = 0; // カーソル位置
s.StartOfDocument(); // 文書の先頭に移動
while( s.Find(wd, meFindNext) == 1)
{ // 次を検索し、見つかる限り続ける
MkPos(); // 座標表示用の文字列を作成する
GetStr(); // カーソル位置以降の文字列を選択する
if(sLgcl) o.Writeln(fPath + xyl + "\tFind: " + str);
else o.Writeln(fPath + xyl + " " + xyv + "\tFind: " + str);
s.Collapse(); // 選択範囲を解除
s.SetActivePos(pos + wd.length);
}
LdPos();
}
//------------------------------------------------------------------------------
// ここからマクロ本体
//------------------------------------------------------------------------------
var fdc = ChkFind(); // 検索ワードのチェック
var bkc = ChkBook(); // ブックマークのチェック
var pm = CreatePopupMenu(); // PopupMenuオブジェクト
pm.Add("カーソル位置をアウトプット", nOutPos);
if(bkc == 0) pm.Add("ブックマーク一覧をアウトプット", nSep, meMenuGrayed);
else pm.Add("ブックマーク一覧をアウトプット", nOutBook);
if(fdc == 0) pm.Add("簡易検索一覧をアウトプット", nSep, meMenuGrayed);
else pm.Add("簡易検索一覧をアウトプット", nOutFind);
pm.Add("----", nSep, meMenuSeparator);
if(o.Visible) pm.Add("アウトプットバー", nOutFlg, meMenuChecked);
else pm.Add("アウトプットバー", nOutFlg);
pm.Add("アウトプットバーをクリアする", nOutClr);
pm.Add("選択範囲をアウトプットに表示(&V)", nSlctOut);
var mid = pm.Track(0); // ポップアップメニューを表示し、項目IDを受け取る
switch(mid)
{ // 選ばれた項目毎に処理
case nEsc: break; // キャンセル
case nOutPos: OpPos(); break; // カーソル位置をアウトプット
case nOutBook: OpBook(); break; // ブックマーク一覧をアウトプット
case nOutFind: OpFind(); break; // 検索一覧をアウトプット
case nOutFlg: o.Visible = !o.Visible; break; // アウトプットバーON/OFF
case nOutClr: o.Clear(); break; // アウトプットバーのクリア
case nSlctOut: o.Writeln( s.Text ); break; // 選択範囲をアウトプット
default: break; //
}
スポンサーリンク