範囲選択中の [行削除] の挙動No.33169
NORI_ さん 14/05/01 01:55
 
範囲選択中に[行削除](デフォルトキー割り当ての Ctrl + Enter)を実行した場合、
現状ではカーソル行のみが削除されます。

この挙動を、選択されているすべて行が削除されるように変更していただけないでし
ょうか?

複数選択を考慮しなければマクロでも実現可能だと思いますが、出来れば秀丸エディ
タ本体で対応していただきたいです。

よろしくお願いいたします。

[ ]
RE:33169 範囲選択中の [行削除] の挙動No.33172
秀丸担当 さん 14/05/01 09:49
 

行削除コマンドが、範囲選択をしていても範囲選択を対象とせず、カーソル位置
だけとなるのは確かに不自然な気がします。
インデント/逆インデントをしてからDeleteキーを押す操作のように、範囲選択
を行単位にしてから削除としたほうが期待通りになると思います。
もしやるとしたら、コマンドの動作変更になると、マクロのdeletelineにも影響
するのでパラメータを追加したりするなどの変更が必要になってくると思います。
そういう変更ができないか今後のバージョンで検討します。

[ ]
RE:33172 範囲選択中の [行削除] の挙動No.33179
IKKI さん 14/05/05 03:02
 
秀丸担当さん、こんにちは。
NORI_ さん、横から失礼します。

>インデント/逆インデントをしてからDeleteキーを押す操作のように、範囲選択
>を行単位にしてから削除としたほうが期待通りになると思います。

行選択コマンドと selectline 文も同様に、選択中のすべての行について、選択範囲
を論理行全体に拡張するような動作にしてほしいです。
マクロで書くとこんな感じ:

##bl = seltoplineno;
##dl = selendlineno + (seltoplineno == selendlineno || selendcolumn != 0);
moveto2 0, ##dl;
if (linecount2 < ##dl) gofileend;
beginsel;
moveto2 0, ##bl;
endsel;

ご検討のほどよろしくお願いします。


>> 複数選択を考慮しなければマクロでも実現可能だと思いますが
ご参考までに、複数選択を考慮したマクロを書いてみました。
http://mobitan.org/hm/misc/#cmdDeleteLine2

[ ]
RE:33179 範囲選択中の [行削除] の挙動No.33180
秀丸担当 さん 14/05/07 14:17
 

なにかにつけて行単位としたい場面はあるので、簡単にできたら便利だと思いま
す。
やるとしたら、マクロは念のため互換性を考えて selectline 1; のようにパラ
メータが付いていたら選択拡張対応というようなことになると思います。
そのようにできないか検討します。

[ ]
RE:33179 範囲選択中の [行削除] の挙動No.33181
NORI_ さん 14/05/10 22:28
 
>ご参考までに、複数選択を考慮したマクロを書いてみました。
>http://mobitan.org/hm/misc/#cmdDeleteLine2
なるほど!
カラーマーカーを利用すれば、マクロで複数選択に対応できるんですね。
とても参考になります。
ありがとうございます。

[ ]
RE:33180 範囲選択中の [行削除] の挙動No.33200
IKKI さん 14/05/16 00:11
 
秀丸担当さん、こんにちは。
早速のご対応ありがとうございました。

beginlinesel, copyline, cutline, dupline の各文と、それに対応するコマンドも、
同様に拡張してもよいかと思いますが、いかがでしょうか。

ご検討のほどよろしくお願いいたします。



[ ]
RE:33200 範囲選択中の [行削除] の挙動No.33203
秀丸担当 さん 14/05/16 12:02
 

beginlinesel, copyline, cutline でもできたらいいということで、同じように
検討します。
duplineについては、どういうものが期待される結果でしょうか。
各行について2重になるとして、複数選択のことも考えるとちょっとややこしい
ことになりそうです。必要性があまりなければ、できたらこのままとしておきた
いところです。

[ ]
RE:33203 範囲選択中の [行削除] の挙動No.33206
IKKI さん 14/05/16 15:39
 
>beginlinesel, copyline, cutline でもできたらいいということで、同じように
>検討します。
よろしくお願いします。

>duplineについては、どういうものが期待される結果でしょうか。
私は下記の動作を考えていました。【〜】が選択範囲として、

実行前:
  あああああ【ああああああああああああああ
  ええええええええええええええ】えええええ

実行後:
  あああああああああああああああああああ
  えええええええええええええええええええ
  【あああああああああああああああああああ
  えええええええええええええええええええ】

>各行について2重になるとして、
もしかして秀丸担当さんは下記の動作を考えていらしたでしょうか?

実行前:
  あああああ【ああああああああああああああ
  ええええええええええええええ】えええええ

実行後:
  あああああああああああああああああああ
  あああああ【ああああああああああああああ】
  えええええええええええええええええええ
  【ええええええええええええええ】えええええ

>複数選択のことも考えるとちょっとややこしいことになりそうです。
たしかに、複数選択で行の二重化と言われても、ユーザーが何を期待しているのか明
確でないかもしれません。
とりあえずマクロを書いてみましたが、これが万人を納得させる動作かと言われると、
ちょっと自信がないです。


setcompatiblemode 0x12020F;
begingroupundo;
if (rectselecting) {
 tomultiselect;
}
if (multiselecting) {
 call MultiSelected;
} else if (selecting) {
 call Selected;
} else {
 call NoSelected;
}
endgroupundo;
endmacro;

NoSelected:
 dupline;
 return;

Selected:
 selectline 1;
 call Core;
 return;

MultiSelected:
 $$w1 = currentmacrobasename + "#selection1";
 $$w2 = currentmacrobasename + "#selection2";
 colormarker 0xFFFFFF, 0xFF6666, 11, 1, 0, $$w1;
 ##bx = seltopx;
 ##by = seltopy;
 gofiletop;
 nextcolormarker 0x09, 0, $$w1;
 while (result) {
  beginsel;
  nextcolormarker 0x0A, 0, $$w1;
  endsel;
  question "ここ"; if (!result) endmacro;
  selectline 1;
  deletecolormarker $$w1;
  call Core;
  colormarker 0xFFFFFF, 0x993333, 11, 2, 0, $$w2;
  nextcolormarker 0x01, 0, $$w1;
 }
 moveto ##bx, ##by;
 selectcolormarker $$w2;
 deletecolormarker $$w2;
 return;

Core:
 question "これ"; if (!result) endmacro;
 ##dx = selendx;
 ##dy = selendy;
 $$text = gettext(seltopx, seltopy, selendx, selendy, false);
 moveto ##dx, ##dy;
 insert $$text;
 beginsel;
 moveto ##dx, ##dy;
 endsel;
 return;

[ ]
RE:33206 範囲選択中の [行削除] の挙動No.33207
秀丸担当 さん 14/05/16 17:19
 

マクロ作成はやいですね。
私が考えていたのは以下のようなものでしたが、これを使うシーンがあるかとい
うとよくわからないです。

実行前:
  あああああ【ああああああああああああああ
  ええええええええええええええ】えええええ

実行後:
  【あああああああああああああああああああ
  あああああああああああああああああああ
  えええええええええええええええええええ
  えええええええええええええええええええ】

やるとしたら、IKKIさんのマクロのような感じでもいいと思います。
その方法でしたら、一行ずつ複数選択すれば、上記のような結果を得ることもで
きるので。
そういう方法でできないか検討します。

[ ]
RE:33207 範囲選択中の [行削除] の挙動No.33208
IKKI さん 14/05/16 18:37
 
さっきのマクロだと、行内で完結する選択範囲と改行をまたぐ選択範囲が1行の中に
混在する場合の動作が怪しいです。
自分で書いておいてなんですが、この案は慎重に考えていただいた方がいいかもしれ
ません。

実行前:
  あああああ【あああああ】あああああ【あああああ
  ええええええええええええええ】ええええええ

たぶん期待される結果:
  ああああああああああああああああああああ
  ええええええええええええええええええええ
  【ああああああああああああああああああああ
  ええええええええええええええええええええ】

さっきのマクロの結果:
  ああああああああああああああああああああ
  【ああああああああああああああああああああ】
  ええええええええええええええええええええ
  【ええええええええええええええええええええ】

[ ]
RE:33208 範囲選択中の [行削除] の挙動No.33210
秀丸担当 さん 14/05/19 09:32
 

やるとしたら、いったん行単位に選択を揃えてから、その後行の二重化をするの
と同等ということになると思います。
試してみたら、そもそもの「行の選択」コマンドが同じ行とかぶるような場合に
うまくいっていない場合があって、場合によっては落ちる場合もありました。
まずは「行の選択」を直してから慎重に考えたいと思います。

[ ]