文書の先頭か末尾

2019年3月29日 (金) 03:50時点におけるSukemaru (トーク | 投稿記録)による版 (修正・更新)

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

  • トグル移動のパターンは 2in1 モードと 4in1 モードを選択可


#title = "文頭か文末"
#tooltip = "文書の先頭か末尾にカーソルを移動する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",232

/**
 * つぎのとおりにカーソルの位置を移動します(実行するごとにトグル移動)
 * 
 * 2in1モードの場合: ① ⇔ ② のトグル移動
 *   ① 文書の先頭
 *   ② 文書の末尾
 * 
 * 4in1モードの場合: ① → ② → ③ → ④ → ① ... のトグル移動
 *   ① 文書の先頭
 *   ② 文書先頭の空白文字・空白行のうしろの位置(空白文字以外の "文字列" の開始位置)
 *   ③ 文書末尾の空白文字・空白行のまえの位置(空白文字以外の "文字列" の終了位置)
 *   ④ 文書の末尾
 *   ※ 文頭空白・文末空白のないドキュメントでは ②・③ をスキップする
 */

// ■トグルパターン設定: 2in1モード or 4in1モード
var toggleMode2 = true;
	// true のとき	2in1トグルモード(文書先頭⇔文書末尾)
	// false のとき	4in1トグルモード(文書先頭→文字列開始位置→文字列終了位置→文書末尾)

var d = document, s = document.selection;

// 2in1 トグルモード
if ( toggleMode2 ) {
  if ( s.GetActivePos() != 0 ) {
    // ①文頭に移動
    s.StartOfDocument();
  }
  else {
    // ②文末に移動
    s.EndOfDocument();
  }
}

// 4in1 トグルモード
else {
  var pos = s.GetActivePos();
  var st = d.Text;
  var sId = st.search( /[^ \s]/ );
  var eId = st.search( /[ \s]*$/ );
  
  if ( pos == 0 && sId > 0 ) {
    // ②文字列開始位置に移動
    s.SetActivePos( sId );
  }
  else if ( pos != eId && ( pos == 0 || pos == sId ) ) {
    // ③文字列終了位置に移動
    s.SetActivePos( eId );
  }
  else if ( pos == 0 || pos == eId || pos == sId ) {
    // ④文末に移動
    s.EndOfDocument();
    if ( s.GetActivePos() == pos ) {
      // (③をスキップしたときは)①文頭に移動
      s.StartOfDocument();
    }
  }
  else {
    // ①文頭に移動
    s.StartOfDocument();
  }
}


メモ

  • 2019/03/19 (sukemaru)
4in1 トグルモードが "空白行だけの文書" で正しく機能しなかったのを修正
スポンサーリンク