「文書の先頭か末尾」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
修正・更新
Sukemaru (トーク | 投稿記録)
更新
1行目: 1行目:
= 文書の先頭か末尾に移動 =
ショートカットキーやツールバーアイコンを削減するために、自分がよく使う機能をひとまとめにしてみました <br>
ショートカットキーやツールバーアイコンを削減するために、自分がよく使う機能をひとまとめにしてみました <br>
(i.e. ショートカットの割りあては「Ctrl+End」キーひとつで済み、ツールバーアイコンやマウスボタンへの割りあてもこれひとつで)。
(i.e. ショートカットの割りあては「Ctrl+End」キーひとつで済み、ツールバーアイコンやマウスボタンへの割りあてもこれひとつで)。
* トグル移動のパターンは '''2in1''' モードと '''4in1''' モードを選択可
* トグル移動のパターンは '''2in1''' モードと '''4in1''' モードを選択可


== ソースコード ==


<source lang="javascript">
<source lang="javascript">
30行目: 35行目:


var d = document, s = document.selection;
var d = document, s = document.selection;
Redraw = false;


// 2in1 トグルモード
// 2in1 トグルモード
58行目: 64行目:
     s.SetActivePos( eId );
     s.SetActivePos( eId );
   }
   }
   else if ( pos == 0 || pos == eId || pos == sId ) {
   else if ( pos != st.length && ( pos == 0 || pos == eId || pos == sId ) ) {
    // ④文末に移動
    s.EndOfDocument();
  }
  else {
    // ①文頭に移動
    s.StartOfDocument();
  }
}
Redraw = true;
</source>
 
 
 
= 文書の先頭か末尾 または 選択範囲の始点か終点 =
 
「[[行頭か行末 または 選択範囲の始点か終点]]」マクロと同じように、「文書の先頭か末尾に移動」マクロと [[キーアサイン集]] の「[[キーアサイン集#選択範囲の始点終点を交替|選択範囲の始点終点を交替]]」マクロのコードと統合したものです。
 
 
== ソースコード ==
 
<source lang="javascript">
#title = "行頭か行末 または 選択範囲の始点か終点"
#tooltip = "行の先頭か末尾 または 選択範囲の始点か終点 にカーソルを移動する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",129
 
/**
* つぎのとおりにカーソルの位置を移動します(実行するごとにトグル移動)
*
* 選択範囲がある場合
*
*  選択範囲の開始位置と終了位置を入れ替え
*  ※ 開始位置:キャレットのない側
*  ※ 終了位置:キャレットのある側
*
*
* 選択範囲がない場合
*
* 2in1モードの場合: ① ⇔ ② のトグル移動
*  ① 論理行の先頭
*  ③ 論理行の末尾
*
* 4in1モードの場合: ① → ② → ③ → ④ → ① ... のトグル移動
*  ① 行頭
*  ② 行頭の空白文字のうしろの位置(空白文字以外の "文字列" の開始位置)
*  ③ 行末の空白文字のまえの位置(空白文字以外の "文字列" の終了位置)
*  ④ 行末
*  ※ 行頭空白・行末空白のない行では ②・③ をスキップする
*
*/
 
 
// ■トグルパターン設定: 2in1モード or 4in1モード
var toggleMode2 = false;
// true のとき 2in1トグルモード(文書先頭⇔文書末尾)
// false のとき 4in1トグルモード(文書先頭→文字列開始位置→文字列終了位置→文書末尾)
 
var d = document, s = document.selection;
Redraw = false;
 
if ( s.Text ) {
  // 「選択範囲の始点終点を交替」マクロ
  var act = s.GetActivePos();
  var anc = s.GetAnchorPos();
  var tp = ( anc < act ) ? anc : act; // 選択範囲の先頭位置
  var bp = ( anc < act ) ? act : anc; // 選択範囲の末尾位置
 
  s.SetActivePos( act );
  s.SetActivePos( anc, true );
}
 
// 2in1 トグルモード
else 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 != st.length && ( pos == 0 || pos == eId || pos == sId ) ) {
     // ④文末に移動
     // ④文末に移動
     s.EndOfDocument();
     s.EndOfDocument();
    if ( s.GetActivePos() == pos ) {
      // (③をスキップしたときは)①文頭に移動
      s.StartOfDocument();
    }
   }
   }
   else {
   else {
71行目: 171行目:
   }
   }
}
}
Redraw = true;
</source>
</source>




== メモ ==
= メモ =


* 2019/03/19 (sukemaru)
* 2019/03/29 (sukemaru)
: 4in1 トグルモードが "空白行だけの文書" で正しく機能しなかったのを修正
: 4in1 トグルモードが "空白行だけの文書" で正しく機能しなかったのを修正
: 「選択範囲の始点終点を交替」マクロとの統合版を追加
: (個人的に「行頭か行末に移動」マクロを使う機会がすくないので「文書の先頭か末尾に移動」マクロで統合版を作りなおしました。自分用のコードでは [[GetKeyState.exe(キー状態取得実行ファイル) |GetKeyState]] を利用しての "選択範囲の前後を1文字ずつ拡張/縮小」機能も追加していたり)

2019年3月29日 (金) 04:39時点における版

文書の先頭か末尾に移動

ショートカットキーやツールバーアイコンを削減するために、自分がよく使う機能をひとまとめにしてみました
(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;
Redraw = false;

// 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 != st.length && ( pos == 0 || pos == eId || pos == sId ) ) {
    // ④文末に移動
    s.EndOfDocument();
  }
  else {
    // ①文頭に移動
    s.StartOfDocument();
  }
}
Redraw = true;


文書の先頭か末尾 または 選択範囲の始点か終点

「行頭か行末 または 選択範囲の始点か終点」マクロと同じように、「文書の先頭か末尾に移動」マクロと キーアサイン集 の「選択範囲の始点終点を交替」マクロのコードと統合したものです。


ソースコード

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

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


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

var d = document, s = document.selection;
Redraw = false;

if ( s.Text ) {
  // 「選択範囲の始点終点を交替」マクロ
  var act = s.GetActivePos();
  var anc = s.GetAnchorPos();
  var tp = ( anc < act ) ? anc : act;	// 選択範囲の先頭位置
  var bp = ( anc < act ) ? act : anc;	// 選択範囲の末尾位置

  s.SetActivePos( act );
  s.SetActivePos( anc, true );
}

// 2in1 トグルモード
else 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 != st.length && ( pos == 0 || pos == eId || pos == sId ) ) {
    // ④文末に移動
    s.EndOfDocument();
  }
  else {
    // ①文頭に移動
    s.StartOfDocument();
  }
}
Redraw = true;


メモ

  • 2019/03/29 (sukemaru)
4in1 トグルモードが "空白行だけの文書" で正しく機能しなかったのを修正
「選択範囲の始点終点を交替」マクロとの統合版を追加
(個人的に「行頭か行末に移動」マクロを使う機会がすくないので「文書の先頭か末尾に移動」マクロで統合版を作りなおしました。自分用のコードでは GetKeyState を利用しての "選択範囲の前後を1文字ずつ拡張/縮小」機能も追加していたり)
スポンサーリンク