ファイルへ移動(物理座標ジャンプ)

2019年5月15日 (水) 17:24時点におけるSukemaru (トーク | 投稿記録)による版 (ページを新規作成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

ショートカット F10 キーの機能「ファイルへ移動」を表示座標ベースっぽく動作するようにマクロ化してみましたが…

  • アウトプットバーの文字列からは表示行ジャンプできない
  • (y,x) の判定基準は本来の「ファイルへ移動」に似せたつもりだけど、不完全かも?( x がないときは行頭にした)
  • 折り返しの多いファイルではうまく機能しない(とくに「指定文字数で折り返し」のとき)


ソースコード
#title = "ファイルへ移動(物理座標)"
#tooltip = "「ファイルへ移動」もどき"
// ショートカット F10 キーの機能「ファイルへ移動」を表示座標ベースにしてみたが…
// ※アウトプットバーの文字列からは表示行ジャンプできない
// ※カッコの中に (y,x) 以外の文字列がある場合は表示行にジャンプしないかも
// ※折り返しの多いファイルではうまく機能しない(とくに「指定文字数で折り返し」のとき)


var d = document, s = d.selection;
var ay = s.GetActivePointY( mePosLogical );
var line = d.GetLine( ay, 0 ).toLowerCase();

/* 「ファイルへ移動」コマンド */
editor.ExecuteCommandByID( MEID_EDIT_GO_TO_FILE = 2108 );

/**
 * ジャンプ元の論理行の文字列から「ファイル名」と「x,y 座標値」の部分を取得する
 * ※「ファイルへ移動」コマンドは作業フォルダからの相対パスでもジャンプできるので
 *   フルパスではなく「ファイル名」だけ
 */
var dd = editor.ActiveDocument, ss = dd.selection;
var docuName = dd.Name.toLowerCase();
var len = docuName.length;
var id1 = line.indexOf( docuName );
var docuStr = ( id1 == -1 )
            ? "Not Found"
            : line.substr( id1, len );
var y, x;
var id2 = id1 + len;
try {
  y = /\([^\d]*(\d+)/.exec( line.substr( id2 ) )[1];
  x = /\(\d+,(\d+)/.exec( line.substr( id2 ) )[1];
} catch ( e ) { ; }		// 正規表現がマッチしなくても続行 ))

	/**
	 * 文字列に「ファイル名」がないときは "Not Found"
	 *  (y,x) がないときは "undefined" (※空行も)
	 */
	OutputBar.Writeln( "\n「ファイルへ移動」もどき"
	                 + "ファイル名:\t" + docuStr + "\n"
	                 + "y,x 座標:\t" + y + ", " + x );

/**
 * アクティブタブが「ファイル名」と一致し
 * かつ「y 座標」が数値として評価できるなら
 * 物理座標にジャンプする( x が省略されているときは行頭 )
 */
if ( id1 >= 0 && Number( y ) > 0 ) {
  y = Number( y );
  x = Number( x ) || 1;	// undefined → 1
  ss.SetActivePoint( mePosView, x, y );
  ScrollY = y;

	OutputBar.Writeln( "表示座標:\t"
	                 + ss.GetActivePointY( mePosView ) + ", "
	                 + ss.GetActivePointX( mePosView ) + "\n"
	                 + "論理座標:\t"
	                 + ss.GetActivePointY( mePosLogical ) + ", "
	                 + ss.GetActivePointX( mePosLogical ) );
}
スポンサーリンク