行頭か行末 または 選択範囲の始点か終点

提供: MeryWiki
移動先: 案内検索

ショートカットキーやツールバーアイコンを削減するために、自分がよく使う機能をひとまとめにしてみました
(ショートカットの割りあては「End」キーひとつで済み、ツールバーアイコンやマウスボタンへの割りあてもこれひとつで)。


#title = "行頭か行末 または 選択範囲の始点か終点"
#tooltip = "行の先頭か末尾 または 選択範囲の始点か終点 にカーソルを移動する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",129

/**
 * つぎのとおりにカーソルの位置を移動します(実行するごとにトグル移動)
 * 
 * 選択範囲がない場合
 *   ① 論理行の先頭
 *   ② 論理行先頭の字下げ位置(行頭の空白文字のうしろ)
 *   ③ 論理行の末尾
 *   ※ 字下げしていない行では ① ⇔ ③ のトグル移動
 * 
 * 選択範囲がある場合
 *   選択範囲の開始位置と終了位置を入れ替え
 *   ※ 開始位置:キャレットのない側
 *   ※ 終了位置:キャレットのある側
 */

var s = document.selection;
var act = s.GetActivePos();

if ( s.IsEmpty ) {	// 選択範囲なし
  // 行頭か行末
  var x = s.GetActivePointX( mePosLogical );
  var st = document.GetLine( s.GetActivePointY( mePosLogical ), 0 );
  var id = st.search( /[^  \t]/ );

  if ( x == 1 && id > 0 )
    // ② 字下げ位置に移動
    s.SetActivePos( act + id );
  else if ( x == 1 || x == id + 1 )
    // ③ 行末に移動
    s.EndOfLine( false, mePosLogical );
  else
    // ① 行頭に移動
    s.StartOfLine( false, mePosLogical );
}

else {		// 選択範囲あり
  // wiki キーアサイン集の「選択範囲の始点終点を交替」マクロを改変
  var anc = s.GetAnchorPos();
  s.SetActivePos( act );
  s.SetActivePos( anc, true );
}
スポンサーリンク