簡易検索一覧などをアウトプット

提供: MeryWiki
ナビゲーションに移動 検索に移動

概要[編集]

簡易検索一覧などをパス付きでアウトプットバーに表示します。

機能[編集]

  1. カーソル位置をフルパス(行番号,桁数) 付きでアウトプットバーに表示します
  2. ブックマーク一覧をフルパス(行番号,桁数) 付きでアウトプットバーに表示します
  3. 簡易検索一覧をフルパス(行番号,桁数) 付きでアウトプットバーに表示します

アウトプットされたパスなどをダブルクリック、または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;	// 
}
スポンサーリンク