「ファイルへ移動(物理座標ジャンプ)」の版間の差分
ナビゲーションに移動
検索に移動
細 Sukemaru がページ「ファイルへ移動(物理座標)」を「ファイルへ移動(物理座標ジャンプ)」に移動しました |
編集の要約なし |
||
| 15行目: | 15行目: | ||
// ※カッコの中に (y,x) 以外の文字列がある場合は表示行にジャンプしないかも | // ※カッコの中に (y,x) 以外の文字列がある場合は表示行にジャンプしないかも | ||
// ※折り返しの多いファイルではうまく機能しない(とくに「指定文字数で折り返し」のとき) | // ※折り返しの多いファイルではうまく機能しない(とくに「指定文字数で折り返し」のとき) | ||
var d = document, s = d.selection; | var d = document, s = d.selection; | ||
| 32行目: | 31行目: | ||
var docuName = dd.Name.toLowerCase(); | var docuName = dd.Name.toLowerCase(); | ||
var len = docuName.length; | var len = docuName.length; | ||
var id1 = line.indexOf( docuName ); | var id1 = line.indexOf( docuName ); // ヒットなしなら -1 | ||
if ( id1 >= 0 ) { | |||
/* または if ( dd != d || ss.GetActivePointY( mePosLogical ) != ay ) */ | |||
var docuStr = line.substr( id1, len ); | |||
var id2 = id1 + len; | /* 「ファイル名」のうしろの (y,x) をさがす */ | ||
try { | var id2 = id1 + len; | ||
var y, x; | |||
try { | |||
} catch ( e ) { ; } // 正規表現がマッチしなくても続行 )) | y = /\([^\d]*(\d+)/.exec( line.substr( id2 ) )[1]; | ||
x = /\(\d+,(\d+)/.exec( line.substr( id2 ) )[1]; | |||
} catch ( e ) { ; } // 正規表現がマッチしなくても続行 )) | |||
/** | |||
* 文字列に「ファイル名」がない(F10 ジャンプなし)ときはアウトプットなし | |||
* (y,x) がないときは "undefined" | |||
*/ | |||
// OutputBar.Writeln( "\n「ファイルへ移動」もどき\n" | |||
// + "ファイル名:\t" + docuStr + "\n" | |||
// + "y,x 座標:\t" + y + ", " + x ); | |||
/** | /** | ||
* アクティブタブが「ファイル名」と一致し | |||
* かつ「y 座標」が数値として評価できるなら | |||
* 物理座標にジャンプする( x が省略されているときは行頭 ) | |||
*/ | |||
if ( | if ( 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 ) ); | |||
} | |||
} | } | ||
</source> | </source> | ||
2019年5月15日 (水) 23:03時点における版
ショートカット 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 ); // ヒットなしなら -1
if ( id1 >= 0 ) {
/* または if ( dd != d || ss.GetActivePointY( mePosLogical ) != ay ) */
var docuStr = line.substr( id1, len );
/* 「ファイル名」のうしろの (y,x) をさがす */
var id2 = id1 + len;
var y, x;
try {
y = /\([^\d]*(\d+)/.exec( line.substr( id2 ) )[1];
x = /\(\d+,(\d+)/.exec( line.substr( id2 ) )[1];
} catch ( e ) { ; } // 正規表現がマッチしなくても続行 ))
/**
* 文字列に「ファイル名」がない(F10 ジャンプなし)ときはアウトプットなし
* (y,x) がないときは "undefined"
*/
// OutputBar.Writeln( "\n「ファイルへ移動」もどき\n"
// + "ファイル名:\t" + docuStr + "\n"
// + "y,x 座標:\t" + y + ", " + x );
/**
* アクティブタブが「ファイル名」と一致し
* かつ「y 座標」が数値として評価できるなら
* 物理座標にジャンプする( x が省略されているときは行頭 )
*/
if ( 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 ) );
}
}
スポンサーリンク