「行頭か行末 または 選択範囲の始点か終点」の版間の差分

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




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


var s = document.selection;
// ■トグルパターン設定: 2in1モード or 4in1モード
var act = s.GetActivePos();
var toggleMode2 = false;
// true のとき 2in1トグルモード(行頭 ⇔ 行末)
// false のとき 4in1トグルモード(行頭 → 行頭空白の後ろ → 行末空白の前 → 行末)
 
 
var d = document, s = document.selection;
 
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 );
}


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 )
// 2in1 トグルモード
    // ② 字下げ位置に移動
else if ( toggleMode2 ) {
    s.SetActivePos( act + id );
  // 「行頭か行末」マクロ
  else if ( x == 1 || x == id + 1 )
  if ( s.GetActivePointX( mePosLogical ) == 1 ) { // キャレット位置が行頭
     // ③ 行末に移動
     // ②行末に移動
     s.EndOfLine( false, mePosLogical );
     s.EndOfLine( false, mePosLogical );
   else
  }
     // ① 行頭に移動
   else {
     // ①行頭に移動
     s.StartOfLine( false, mePosLogical );
     s.StartOfLine( false, mePosLogical );
  }
}
}


else { // 選択範囲あり
// 4in1 トグルモード
   // wiki キーアサイン集の「選択範囲の始点終点を交替」マクロを改変
else {
   var anc = s.GetAnchorPos();
  Redraw = false;
   s.SetActivePos( act );
  var x = s.GetActivePointX( mePosLogical );
   s.SetActivePos( anc, true );
  var y = s.GetActivePointY( mePosLogical );
  var pos = s.GetActivePos(); // 現在位置
   var top = pos + 1 - x; // 行頭位置
   var st = d.GetLine( y, 0 );
  var sId = st.search( /[^  \s]/ ); // 行頭の空白文字数
  var eId = st.replace( /[ \s]*$/, "" ).length; // 行末の空白を除いた文字数
   var ind = top + sId; // インデントの後ろ位置
  var end = top + eId; // 行末空白の前の位置
 
  if ( pos == top && sId > 0 ) {
    // ②文字列開始位置に移動(インデントの後ろ)
    s.SetActivePos( ind );
   }
  else if ( pos != end && ( pos == top || pos == ind ) ) {
    // ③文字列終了位置に移動(行末空白の前)
    s.SetActivePos( end );
  }
  else if ( pos == top || pos == end || pos == ind ) {
    // ④文末に移動
    s.EndOfLine( false, mePosLogical );
    if ( s.GetActivePos() == pos ) {
      // (③をスキップしたときは)①文頭に移動
      s.StartOfLine( false, mePosLogical );
    }
  }
  else {
    // ①文頭に移動
    s.StartOfLine( false, mePosLogical );
  }
  Redraw = true;
}
}
</source>
</source>
== メモ ==
* 2019/03/19 (sukemaru)
: 4in1 トグルモードを追加

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

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

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


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

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

// ■トグルパターン設定: 2in1モード or 4in1モード
var toggleMode2 = false;
	// true のとき	2in1トグルモード(行頭 ⇔ 行末)
	// false のとき	4in1トグルモード(行頭 → 行頭空白の後ろ → 行末空白の前 → 行末)


var d = document, s = document.selection;

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.GetActivePointX( mePosLogical ) == 1 ) {	// キャレット位置が行頭
    // ②行末に移動
    s.EndOfLine( false, mePosLogical );
  }
  else {
    // ①行頭に移動
    s.StartOfLine( false, mePosLogical );
  }
}

// 4in1 トグルモード
else {
  Redraw = false;		
  var x = s.GetActivePointX( mePosLogical );
  var y = s.GetActivePointY( mePosLogical );
  var pos = s.GetActivePos();				// 現在位置
  var top = pos + 1 - x;				// 行頭位置
  var st = d.GetLine( y, 0 );
  var sId = st.search( /[^  \s]/ );			// 行頭の空白文字数
  var eId = st.replace( /[ \s]*$/, "" ).length;	// 行末の空白を除いた文字数
  var ind = top + sId;					// インデントの後ろ位置
  var end = top + eId;					// 行末空白の前の位置

  if ( pos == top && sId > 0 ) {
    // ②文字列開始位置に移動(インデントの後ろ)
    s.SetActivePos( ind );
  }
  else if ( pos != end && ( pos == top || pos == ind ) ) {
    // ③文字列終了位置に移動(行末空白の前)
    s.SetActivePos( end );
  }
  else if ( pos == top || pos == end || pos == ind ) {
    // ④文末に移動
    s.EndOfLine( false, mePosLogical );
    if ( s.GetActivePos() == pos ) {
      // (③をスキップしたときは)①文頭に移動
      s.StartOfLine( false, mePosLogical );
    }
  }
  else {
    // ①文頭に移動
    s.StartOfLine( false, mePosLogical );
  }
  Redraw = true;
}

メモ

  • 2019/03/19 (sukemaru)
4in1 トグルモードを追加
スポンサーリンク