範囲指定箇所の移動方法についてNo.18886
kuma_matsu さん 05/02/23 11:20
 
文章中において移動させたい箇所をまず範囲指定します。でこの状態でマウスカーソ
ルを範囲指定した箇所に置いたのちドラッグ&ドロップすると、任意の位置にその文
字列を移動できますよね。
さて、これと同じ動作をキーボードで実現したいのです。具体的な操作イメージとし
ては、1)シフトキーを押しながらカーソルキーによって範囲指定、2)範囲指定終
端まできたところで、シフトキーにさらにALTキーを追加して押下して“移動モー
ド”に入り、カーソルキーを上下に押すなどして文字列を任意の位置に移動、という
感じです。こういう動作割り当ては可能でしょうか。
要するに質問のポイントは、「範囲指定した箇所の移動機能を“キー割り当て”でき
るか」ということです。

[ ]
RE:18886 範囲指定箇所の移動方法についてNo.18889
どみにか さん 05/02/23 13:19
 
どみにかと申します。
未熟者ながらコメントつけさせてもらいます。

範囲選択 → Ctrl+X(切取り) → 移動 →  Ctrl+V(貼付け)

上記の手順では何らかの理由があって、
希望を満足できないってことですよね?

昔、似たような動きをするマクロを作ったことがありましたので、
流用してマクロを作ってみました。
このマクロを「Shift + Alt + Z」あたりに割り当てて使用すれば、
希望に近い動作をするのではないかと思います。
ダメですかね?

-------------------------------------------------------

  #ESC    = 0x1B; #ENTER  = 0x0D;
  #LEFT   = 0x1C; #UP     = 0x1D;
  #RIGHT  = 0x1E; #DOWN   = 0x1F;

  if(!selecting)  endmacro;               // 範囲選択されていない場合は終了
  $$SelText = gettext(seltopx,seltopy,selendx,selendy); // 選択範囲文字列を取得
  ##SelLen  = strlen($$SelText);          // 選択範囲文字列長を取得
  ##StX   = x;        ##StY   = y;        // 開始位置の座標を取得
  ##SeltX = seltopx;  ##SeltY = seltopy;  // 選択開始位置の座標を取得
  ##SeleX = selendx;  ##SeleY = selendy;  // 選択終了位置の座標を取得

  endsel; escape;
  moveto ##SeltX, ##SeltY;
  beginsel;   moveto ##SeleX, ##SeleY;

  while(1){
    ##InputKey  = inputchar("移動モード(ENTER:決定, ESC:キャンセル)");  //
 キー操作取得
    ##SeleX = selendx;  ##SeleY = selendy;  // 選択終了位置の座標を取得
    delete; endsel; escape;                 // いったん削除

    if(##InputKey == #ESC)        { moveto ##SeltX, ##SeltY;  // ESCが押され
た場合、元に戻して終了
                                    insert $$SelText;
                                    moveto ##StX, ##StY;
                                    endmacro;     }
    else if(##InputKey == #ENTER) { insert $$SelText;   // ENTERが押された場
合、確定して終了
                                    moveto ##SeleX, ##SeleY;
                                    endmacro;     }
    else if(##InputKey == #UP)    { up;           } // "↑"を押された場合
    else if(##InputKey == #DOWN)  { down;         } // "↓"を押された場合
    else if(##InputKey == #LEFT)  { left;         } // "←"を押された場合
    else if(##InputKey == #RIGHT) { right;        } // "→"を押された場合
    else                          { continue;     } // 上記以外をを押された
場合はリトライ
    ##NowX  = x;  ##NowY  = y;    // 現在位置の座標を取得
    insert $$SelText;
    ##SeleX = x;  ##SeleY = y;  // 選択終了位置の座標を取得
    beginsel;   moveto ##NowX, ##NowY;
  }

-------------------------------------------------------



[ ]
RE:18886 範囲指定箇所の移動方法についてNo.18892
秀丸担当 さん 05/02/23 18:01
 

>要するに質問のポイントは、「範囲指定した箇所の移動機能を“キー割り当て”でき
>るか」ということです。

ドラッグ&ドロップ編集と同じことはキー操作ではできません。
普通は、コピーまたは切り抜きをして、カーソル移動して、貼り付け、という操
作が同じ操作だと思いますが、クリップボードに痕跡を残すことになります。

[ ]
RE:18886 範囲指定箇所の移動方法についてNo.18896
IKKI さん 05/02/23 20:42
 
ユーザーの IKKI と申します。
私も同様のマクロを公開しています。ご参考までに。
http://www18.big.or.jp/~fujiwara/ikki/hidemaru/misc/#cmdDragUp

# こういう小物マクロもライブラリに公開した方がいいのかな?

[ ]
RE:18886 範囲指定箇所の移動方法についてNo.18897
kuma_matsu さん 05/02/24 09:59
 
素早いご教示をいろいろと賜り、ありがとうございました。

>「範囲指定した箇所の移動機能を“キー割り当て”できるか」ということです。
標準では割り当て方法はないとのことで、どみにか様、IKKI様などが作成されたマク
ロをご参考にさせていただくことといたします。

なお同機能(のキー割り当て)がなくても、もちろん範囲指定後に、通常のカットア
ンドペーストをすればほぼ同等の操作が可能ですが、歳をとると、直前にカットした
文字列すら覚えていないという情けない状況が起こることがままあり、範囲指定した
文字列をカットによって画面から消すことなく、挿入したい位置へ移動できる操作が
キーボードで実現できないかと思った次第です。(これはアウトライン操作ができる
ソフトなどでは時々みかける操作です)

ぜひいずれ秀丸での実装を希望します。

[ ]