「行頭か行末 または 選択範囲の始点か終点」の版間の差分
ナビゲーションに移動
検索に移動
更新 |
|||
| 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 ); | |||
} | |||
// 2in1 トグルモード | |||
else if ( toggleMode2 ) { | |||
// 「行頭か行末」マクロ | |||
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 トグルモード | ||
// | else { | ||
var | Redraw = false; | ||
s.SetActivePos( | var x = s.GetActivePointX( mePosLogical ); | ||
s.SetActivePos( | 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 トグルモードを追加
スポンサーリンク