行の再選択に関する質問No.13588
izumi さん 02/12/09 01:45
 
マウスにより行単位で選択したとき、選択の開始位置がずれてしまうことがあります。

<再現手順>
1. 複数の行を含むファイルを秀丸で開きます。
2. 開いたファイルの(上下方向に対して)中央付近の一行を選択します。
3. Shiftキーを押したまま、「2」の選択行より上の行を選択します。
このとき、「2」の行から「3」の行までが選択されます。
4. さらにShiftキーを押したまま、「2」より下の行を選択します。

VisualStudioのソースエディタやWordなど、一般のアプリケーションでは、
「2」の行を「選択開始行」として記憶し、Shiftキーを継続して押している間は「選
択開始行」が有効に機能します。
つまり、「4」の操作により、「2」の行から「4」の行が選択されます。
しかし、秀丸の場合は異なり、範囲は拡張されてしまいます。
(「3」から「4」の行が選択されていると思います。)

個人的な感覚として、現在の秀丸の方式には違和感を覚えるのですが、
これは仕様なのでしょうか?

秀丸のバージョンは3.18。OSはWin98SEとWin2Kを使用しています。

[ ]
RE:13588 行の再選択に関する質問No.13604
秀丸担当 さん 02/12/09 17:18
 
><再現手順>
>1. 複数の行を含むファイルを秀丸で開きます。
>2. 開いたファイルの(上下方向に対して)中央付近の一行を選択します。
>3. Shiftキーを押したまま、「2」の選択行より上の行を選択します。
>このとき、「2」の行から「3」の行までが選択されます。
>4. さらにShiftキーを押したまま、「2」より下の行を選択します。

再現することができました。
確かに妙な動きです。
動作を変えるとマクロ等に支障があるかもしれないので、マクロに支障
がないように考えたいと思います。

[ ]
RE:13604 行の再選択に関する質問No.13611
izumi さん 02/12/09 23:45
 
再現確認していただき、ありがとうございました。
選択開始位置については、個人的に違和感を覚えるものが他にもあります。

<再現手順a>
a-1. 複数の行を含むファイルを秀丸で開きます。
a-2. 開いたファイルから、適当な1行をマウスで選択します。
a-3. Shiftキーを押したまま、キーボードの右方向キーを押します。
「a-2」で選択した範囲が、(右方向キーを押下した分)解除されてしまいます。
(個人的には、「a-2」の次行の文字が選択範囲に含まれていくイメージを持っていま
す。)

<再現手順b>
b-1. 複数の行を含むファイルを秀丸で開きます。
b-2. 開いたファイルから、適当な1行をマウスで選択します。
b-3. Shiftキーを押したまま、キーボードの下方向キーを押します。
「a-2」で選択した範囲が解除されてしまいます。
(個人的には、「b-2」の次行が選択範囲に含まれていくイメージを持っています。)

<再現手順c>
c-1. 複数の行を含むファイルを秀丸で開きます。
c-2. 開いたファイルから、適当な1行をマウスで選択します。
c-3. Shiftキーを押したまま、マウスで「c-2」の次行の途中をクリックします。
「c-2」で選択した範囲は解除され、「c-2」の次行の先頭から、クリックした「途
中」までが選択されます。
(個人的には、「c-2」の行頭から「c-3」のクリック位置までが選択されるイメージ
を持っています。)

上記の手順において、複数行を選択するケースでは、イメージ通りに動作します。
このように、選択行数により挙動が異なるようですが、これらは仕様なのでしょうか?

度々お手数をおかけしますが、ご回答のほど、よろしくお願いいたします。

[ ]
RE:13611 行の再選択に関する質問No.13615
Arimac さん 02/12/10 12:54
 
>選択開始位置については、個人的に違和感を覚えるものが他にもあります。

秀丸エディタには行選択モードが無いからですね(^^;
個人的にはizumiさんのおっしゃってるイメージの方が使いやすい気がしますが(^^;

[ ]
RE:13604 行の再選択に関する質問No.13616
アルビレオ さん 02/12/10 13:05
 
アルビレオです。

>再現することができました。
>確かに妙な動きです。

この動きって、わざわざそうなるように意識して作らない限りは考えにくい挙動です。
かなり前に要望があって、このように変更されたような気もするのですが…
個人的には普通な動きに戻すことに異論は無いのですが、今の動作に慣れていて
変更されると困る人はいないでしょうか?

>動作を変えるとマクロ等に支障があるかもしれないので、マクロに支障
>がないように考えたいと思います。

これは「shiftを押しながらマウスで行選択」の場合に限ったもので、キーボードによる
選択ではできない動きです。
マクロにはこれに相当するような文は無いようなので、ここを変更してもマクロには
影響無いように思われます。(無責任な推測ですが)

[ ]
RE:13615 行の再選択に関する質問No.13617
アルビレオ さん 02/12/10 13:09
 
アルビレオです。

>個人的にはizumiさんのおっしゃってるイメージの方が使いやすい気がしますが(^^;

んでも、
>秀丸エディタには行選択モードが無いからですね(^^;
なわけで、
修正すると今度は「shift+カーソル上」の場合などに現在の行が選択範囲に含まれなく
なると思いますが…

[ ]
RE:13616 行の再選択に関する質問No.13622
秀丸担当 さん 02/12/10 18:52
 
>この動きって、わざわざそうなるように意識して作らない限りは考えにくい挙動です。
>かなり前に要望があって、このように変更されたような気もするのですが…
>個人的には普通な動きに戻すことに異論は無いのですが、今の動作に慣れていて
>変更されると困る人はいないでしょうか?

確かに、敢えてこうしている部分もあると思います。
カーソル位置が一行だけ選択しているときは行の先頭にくるようになって
います。
複数行選択しているときは、下方向に選択しているときは次の行の先頭に
カーソルがいきます。
一行だけと複数行では動作が違います。
慎重に考えたいと思います。

[ ]
RE:13617 行の再選択に関する質問No.13629
Arimac さん 02/12/10 22:23
 
>修正すると今度は「shift+カーソル上」の場合などに現在の行が選択範囲に含まれなく
>なると思いますが…

行選択モード(勝手に命名(^^;)というのは左端余白をマウスで
クリックして行を選択した場合になるということを想定していて、
通常のShift+カーソルキーでの操作は通常通りです。

Wordがこうゆう感じになってます(^^;
ただし、Wordはマウスで上行や下行の途中をクリックしても
そこまでの(文字単位の)範囲選択にはなりませんが。
←→キーを押すと行選択モードは解除されてしまいますね。

[ ]
RE:13588 行の再選択に関する質問No.13630
Arimac さん 02/12/10 22:31
 
>VisualStudioのソースエディタやWordなど、一般のアプリケーションでは、

VC++(6.0)はシフトキーを押しながら(左端の)上や下を
クリックしているとクリックした反対側も選択されるという
へんてこりんな事になりますね(^^;

[ ]
RE:13622 行の再選択に関する質問No.13633
izumi さん 02/12/11 02:00
 
> 確かに、敢えてこうしている部分もあると思います。

その「理由」に興味があります。
「一般的」でない(と思われる)方法を採用している事柄について、
理由がはっきりしていれば、今後要望を提示する際に参考になります。

[ ]
RE:13629 行の再選択に関する質問No.13634
izumi さん 02/12/11 02:01
 
> 行選択モード(勝手に命名(^^;)というのは左端余白をマウスで
> クリックして行を選択した場合になるということを想定していて、
> 通常のShift+カーソルキーでの操作は通常通りです。
>
> Wordがこうゆう感じになってます(^^;

Wordの動作は高度ですね。
左余白をマウスでクリックしたとき、「Shift+カーソルの上下」では、完全に行単位
で選択範囲を追加/解除できます。
「選択開始位置」は「選択開始行」として扱われ、選択範囲の指定中は、最低限最初
に選択した1行が有効であり続けます。
「Shift+カーソルの左右」では文字単位での変更となり、「選択開始位置」は「選択
範囲の最終行の行末」になるようです。

[ ]
RE:13633 行の再選択に関する質問No.13635
アルビレオ さん 02/12/11 03:14
 
>その「理由」に興味があります。
>「一般的」でない(と思われる)方法を採用している事柄について、
>理由がはっきりしていれば、今後要望を提示する際に参考になります。

うろ覚えなので答える資格があるかどうかわかりませんが、
要は「そういう要望があって、特に反対が無かった」というだけだったと思います。
あと、秀まるおさんが対応する気になったことが理由かと。

確かに一般的な動作とは違いますが、そういう挙動になってもそれほど困るものでは
ないし、
そうやって選択範囲を拡張できるというのは「あれば便利かも」ぐらいの認識だった
と思います。

ひょっとすると大嘘を書いているかもしれませんが、ご容赦ください。
(当時のログを残している&見つけ出してくれる方がいればありがたいんですが)

[ ]
RE:13635 行の再選択に関する質問No.13642
秀丸担当 さん 02/12/11 18:56
 
>うろ覚えなので答える資格があるかどうかわかりませんが、
>要は「そういう要望があって、特に反対が無かった」というだけだったと思います。
>あと、秀まるおさんが対応する気になったことが理由かと。

手元にある最古のV1.48でもその動作だったので、要望があったか
どうか定かではありません。
秀丸にはWordのような行選択モードがないので、範囲選択の先端か
終端のどちらかにカーソルが必ずあります。
一行選択の場合、終端にあるより先端にあったほうが自然という
考えなのではないかと。

[ ]
RE:13642 行の再選択に関する質問No.13651
アルビレオ さん 02/12/12 01:42
 
アルビレオです。

>手元にある最古のV1.48でもその動作だったので、要望があったか
>どうか定かではありません。

てことは、要望うんぬんの話は私の勘違いですね。
このフォーラムを見るようになった頃はV2.xxでしたから。
いいかげんなことを書いてすみませんでした。

>秀丸にはWordのような行選択モードがないので、範囲選択の先端か
>終端のどちらかにカーソルが必ずあります。
>一行選択の場合、終端にあるより先端にあったほうが自然という
>考えなのではないかと。

1行選択したときの選択範囲の終端というのは、選択行の次の行の先頭になるため
カーソル位置を終端にすると選択行とカーソルのある行が一致しません。
それが大きな理由ではないでしょうか。
どうせ下に向かって複数行選択するとそうなるんですが。

[ ]
RE:13651 行の再選択に関する質問No.13662
秀丸担当 さん 02/12/12 18:33
 
>1行選択したときの選択範囲の終端というのは、選択行の次の行の先頭になるため
>カーソル位置を終端にすると選択行とカーソルのある行が一致しません。
>それが大きな理由ではないでしょうか。

そうですね。
カーソルが行の終わりにあると、改行コードが含まれないので、次の行に
いってしまいます。それが正解だと思います。

[ ]
RE:13662 行の再選択に関する質問No.13668
izumi さん 02/12/12 23:51
 
> カーソルが行の終わりにあると、改行コードが含まれないので、次の行に
> いってしまいます。それが正解だと思います。

「理由」を調査していただき、ありがとうございました。

No.13651より引用
> 1行選択したときの選択範囲の終端というのは、選択行の次の行の先頭になるため
> カーソル位置を終端にすると選択行とカーソルのある行が一致しません。
> それが大きな理由ではないでしょうか。
> どうせ下に向かって複数行選択するとそうなるんですが。

アルビレオさんもおっしゃっていますが、単一行と複数行を選択する場合で、変化し
ます。
具体的には、「範囲の開始と終了の位置」にあると気がつきました。
一行選択したときの状態を観察すると、「改行の次」から「行頭」の順に指定してい
る、とわかります。
このことは、「Shift+カーソル上」で一つ上の行が追加され、「Shift+カーソル下」
で、範囲は解除されることからも理解できます。
「基点」が「改行の次」にあるから、「先頭にカーソルがある」ということなのでし
ょう。
しかし、複数行を選択すると、この「順序」を変化させます。このことが、違和感を
与える原因なのでしょう。
統一できるなら、そうしていただければ、と思います。


いつのまにか論点がずれてしまっていたようなのですが、
もう一方の「行単位で再選択したとき」については、どのような経緯があったのでし
ょうか?
# 秀丸担当さまとアルビレオさんの間で、意識違いがあるのように感じたのですが、
気のせいでしょうか。

[ ]
RE:13668 行の再選択に関する質問No.13669
アルビレオ さん 02/12/13 02:30
 
>具体的には、「範囲の開始と終了の位置」にあると気がつきました。
>一行選択したときの状態を観察すると、「改行の次」から「行頭」の順に指定して
>いる、とわかります。
>このことは、「Shift+カーソル上」で一つ上の行が追加され、「Shift+カーソル
>下」で、範囲は解除されることからも理解できます。
>「基点」が「改行の次」にあるから、「先頭にカーソルがある」ということなので
>しょう。
>しかし、複数行を選択すると、この「順序」を変化させます。このことが、違和感
>を与える原因なのでしょう。
>統一できるなら、そうしていただければ、と思います。

表面的に動きを見ただけでの推測であることは最初にお断りしておきますが、
範囲選択の動作はキーボードによる操作の方が基本になっています。
ここを理解しないでマウスで選択した場合だけを追いかけると不自然な点はあるかと
思いますが、キーボードによる操作との矛盾を少なくするためだと考えてください。

まずマウスで一行選択してからshift+カーソルキーで選択範囲を変化させると
始点は常に選択した行の次の行の先頭にあることがわかります。
しかし、このルールでマウスによる複数行選択(上から下へ)を行うと、始点が
選択行の次の行にあるために最初の行が選択されない状態になってしまいます。
これではあまりにクセのある動きなので、マウスによる上から下への複数行選択の場
合だけ
「例外的に」始点を選択開始行の先頭に移動させています。

私が作ったわけでもソースコードを見たわけでもありませんが、まず間違いなく
こういう理由によって今の行選択の仕様が決定されたのでしょう。
キーボードによる選択との整合を考えれば妥当な動作だと思います。

[ ]
RE:13669 行の再選択に関する質問No.13670
izumi さん 02/12/13 05:30
 
はじめに、私の書いている「挙動」に関する内容は、推測です。
実際とは異なる場合がありますので、ご了承ください。


> 私が作ったわけでもソースコードを見たわけでもありませんが、まず間違いなく
> こういう理由によって今の行選択の仕様が決定されたのでしょう。

仕様決定のさらなる詳細な背景を書いていただき、ありがとうございました。
これらのことから、設計時の着目点と、例外の基準が見えたように感じました。

ここで、私からの要望の一つをまとめさせてください。
要望は、「現行の単一行の方式」を廃止し、単一行の場合も「現行の複数行の方式」
に統一してほしい、
というものです。
「現行の複数行の方式」とは、順方向に行単位で選択したとき、
・選択開始位置は、選択範囲の先頭とする
・選択終了位置は、選択行の次の行頭とする
・カーソル位置は、選択終了位置と同一とする
という動作をします。

一方、廃止を希望する「現行の単一行の方式」とは、キーボードの場合、
選択する行頭で「Shift+カーソル下」により選択したとき、
・選択開始位置は、選択範囲の先頭とする
・選択終了位置は、選択行の次の行頭とする
・カーソル位置は、選択終了位置と同一とする
という動作をします。
また、マウスで行単位に選択したとき、
・選択開始位置は、選択範囲の改行の次とする
・選択終了位置は、選択範囲の先頭とする
・カーソル位置は、選択終了位置と同一とする
という(表面上の)動作をします。
このように、「現行の単一行の方式」では、マウスとキーボードで変化し、
特にマウスでの操作において、「例外的処理」と位置付けられているようです。
この「例外的処理」の存在は、マウスとキーボードを併用したとき、
更なる「例外」(No.13611参照)を生み出している可能性があります。

しかし、「現行の複数行の方式」を単一行の指定方法としても採用すれば、
キーボードとマウスで同一方式となるため、これらの併用による破綻がなくなるもの
と考えられます。


もう一つの要望として、
選択が開始されたときの「選択開始位置」を変更しないようにしてほしい、
というものです(No.13588参照)。


以上2点について、ご検討をお願いいたします。

[ ]
RE:13670 行の再選択に関する質問No.13671
Arimac さん 02/12/13 12:35
 
参考までに他のプログラムの挙動を調べてみました(^^;
(左端余白をクリックして行選択した場合)
・Visual Basic:カーソルは行頭(秀丸エディタと同じ)
・Visual C++:カーソルは次行の行頭
・Word 2000:行選択モード(仮)になる
・メモ帳:行選択機能なし
・ワードパッド:カーソルは行末(Shift+↓を押すとひどい事に(^^;)
マイクロソフトもバラバラですなぁ(^^;

[ ]
RE:13670 行の再選択に関する質問No.13672
アルビレオ さん 02/12/13 12:44
 
アルビレオです。

今気付いたんですが、キーボードでの選択との対比にするよりも
マウスによる行単位ではない選択との対比で説明した方がよかったですね。
行頭からマウスで選択を開始したときと、行頭より左側の部分をクリックして
行選択してからの動きの違いです。

>このように、「現行の単一行の方式」では、マウスとキーボードで変化し、
>特にマウスでの操作において、「例外的処理」と位置付けられているようです。
>この「例外的処理」の存在は、マウスとキーボードを併用したとき、
>更なる「例外」(No.13611参照)を生み出している可能性があります。
>
>しかし、「現行の複数行の方式」を単一行の指定方法としても採用すれば、
>キーボードとマウスで同一方式となるため、これらの併用による破綻がなくなるも
>のと考えられます。
>
>もう一つの要望として、
>選択が開始されたときの「選択開始位置」を変更しないようにしてほしい、
>というものです(No.13588参照)。

ええと、現在の仕様で例外的処理をしているのは「マウスで行頭より左をクリックし
順方向に複数行選択したとき」だけなんですが…
(最初にあげられていた「shift+マウスドラッグ」もありますが、今の話題とは無関
係に
なってきているので無視します)
ちょっと整理しますと行なわれている例外的処理は以下のようなものです。
 「マウスで行選択を開始し、そのままドラッグで選択範囲を複数行にすると
  選択する方向によって選択開始位置を設定しなおす」
もうひとつ例外ではないが気になっている仕様として
 「マウスで行選択した場合、次の行の先頭が選択開始位置、選択行の先頭が
  カーソル位置になる」
こちらは上の例外とはある程度独立したもので、次の行頭と選択行頭のどちらを選択
開始位置に
するかというだけの問題です。当然カーソル位置は選択開始位置とは反対の場所にな
ります。

つまり要望は「行選択」という機能をなくして、マウスで行頭から選択開始したとき
と同一の動きにしようと。
ということは、1行選択するためにはマウスを上か下へ1行分ドラッグする必要があ
るということですよね。
さらに「例外的処理」をなくせば逆方向へドラッグした場合、選択開始行は
選択範囲に含めない事になります。

個人的にはクリック一発で1行選択できるのは便利だし、逆方向に複数選択したときに
最初の行が含まれないのもあまり嬉しくないので今の仕様の方がいいかな。

>この「例外的処理」の存在は、マウスとキーボードを併用したとき、
>更なる「例外」(No.13611参照)を生み出している可能性があります。

処理としては特別なことをしているわけではないので、例外というより副作用ですね。
前に書いたように、カーソル位置が選択行の次の行になってしまうよりは
今の方が好きです。

[ ]
RE:13670 行の再選択に関する質問No.13674
秀丸担当 さん 02/12/13 18:31
 
>ここで、私からの要望の一つをまとめさせてください。
>要望は、「現行の単一行の方式」を廃止し、単一行の場合も「現行の複数行の方
>式」に統一してほしい、
>というものです。

>もう一つの要望として、
>選択が開始されたときの「選択開始位置」を変更しないようにしてほしい、
>というものです(No.13588参照)。

確かに分かりづらい動作をするより、シンプルなほうがいいかもしれません。
しかし安定した仕様を維持していくことも重要と考えています。
実際反対意見もあるので、慎重に考えたいと思います。
とりあえずは保留とさせてください。

[ ]
RE:13674 行の再選択に関する質問No.13677
izumi さん 02/12/14 07:56
 
> 実際反対意見もあるので、慎重に考えたいと思います。
> とりあえずは保留とさせてください。

アルビレオさんのように、現行仕様を気に入って使用している方も多いのだろう、と
感じました。
また、私の要望に対して強く賛同する方はいないようしたから、
大多数のユーザにとっても違和感はないのでしょう。

少なくとも、致命的な問題ではありません。
秀丸担当さまにお任せします。

[ ]