8.56からブロック選択後Shift-Tabでタブ削No.34831
m3snow さん 16/02/12 01:57
 
いつも秀丸エディタを愛用させていただいています。

Ver.8.54からVer.8.56にバージョンアップしたところ、
ブロック選択後、Shift-Tabでタブ削除が動作しなくなりました。
Ver.8.54では、選択したブロック範囲のタブ削除ができていたのですが、
Ver.8.56では、ブロック選択が解除され、通常の行選択に変更になってしまい、
意図した動作になりません。
ちなみに、ブロック選択後、Tabでタブ追加は、正常に動作します。

当機能を愛用していたため、かなり困っており、調査をお願いしたいです。
よろしくお願いします。

[ ]
RE:34831 8.56からブロック選択後Shift-TaNo.34836
秀丸担当 さん 16/02/12 11:34
 

V8.58では確かに関連する修正がありました。

BOX選択時の行単位の変換が、行単位でなく複数選択になるという問題があり、
それを修正したのがV8.58でした。
この問題はV8.40〜V8.42あたりから起きていました。
例えばBOX選択のソートができないという問題があります。

もともと、[編集]→[変換]のうち、自動的に行単位になる変換として「インデン
ト」「逆インデント」「ソート...」があります。
これらは行の途中から選択しても、行単位になります。
BOX選択の場合も同様に行単位になります。
ただし複数選択の場合は、ばらばらのままです。

Shift+Tabは状況によって動作が違いますが、通常選択とBOX選択時は「逆インデ
ント」として働いています。

一方で、Tabキーも状況によって動作が違いますが、通常選択では「インデン
ト」として動作し、BOX選択時は「各行に挿入」の動作をしています。
「各行に挿入」とは、例えばBOX選択時に英字を入力するのと同じです。
[その他]→[動作環境]→[編集]→[高度な編集1]→[BOX選択中にキーを押すとそ
の文字を各行に挿入する]の設定がONのときの動作です。
これをOFFにするとBOX選択時も「インデント」になり行単位になります。

いい解決方法が思いつかないですが、現状でマクロで回避するとしたら、Shift+
Tabに以下のマクロを割り当てるといいと思います。

//shifttab.mac
if( selecting ) {
    if( multiselecting || rectselecting ){
        setcompatiblemode 0x00100000;
        tomultiselect;
        filter "","UnIndent";
        endmacro;
    }
}
shifttab;
endmacro;

または、マクロを割り当てなくても、CtrlとShiftを両方押しながらドラッグし
て「複数選択化されたBOX」として選択され、行単位ではなくなります。

そもそもTabキーとShift+Tabが非対称なのが良くないと思います。
これを対称的にするには両方とも複数選択化に仕様変更するといいですが、そう
なるとTabキーの操作が以前とは少し違うことになり、対称的にするのは難しそ
うです。

[ ]
RE:34836 8.56からブロック選択後Shift-TaNo.34838
m3snow さん 16/02/12 15:03
 
いつもお世話になっております。連絡をありがとうございました。
少しわからないことがあるので教えてください。
まず、先に書いたブロック選択は、BOX選択が正しい説明でした。

> V8.58では確かに関連する修正がありました。
>
> BOX選択時の行単位の変換が、行単位でなく複数選択になるという問題があり、
> それを修正したのがV8.58でした。

V8.58より前は、
[BOX選択中にキーを押すとその文字を各行に挿入する](※1)のON/OFFに関係なく、
Tab/Shift+Tabキーでは、BOX選択の前に各行タブが挿入/削除されました。
これは、BOX選択時の行単位の変換が、行単位でなく複数選択に変更され
実行された結果ということでしょうか。なるほど。

ですが、
(※1)がONの場合、TabキーではBOX選択の前に各行タブが挿入され、
その後英字入力では、タブの後ろに各行英字が入力されました。
この動作では、TABキーは「インデント」としてでなく、英字入力同様
タブ入力として特別の動作しているということでしょうか。
これは、V8.58でも同じでした。

#これは、複数選択の動作ではないですよね?
#(※1)がOFFでは、BOX選択の内容が削除され、選択先頭に1文字英字が入力
#されました。これが、複数選択の動作ですよね。

V8.58では、
 BOX選択で(※1)がON
  TABキー:各行タブ入力、 Shift+TABキー:「逆インデント」★
 BOX選択で(※1)がOFF
  TABキー:「インデント」、Shift+TABキー:「逆インデント」
 複数選択
  TABキー:各行タブ入力、 Shift+TABキー:各行タブ削除
となり、BOX選択で(※1)がONの時のみ、TAB/Shift+TABキーが非対称です。

BOX選択で(※1)がONも
 TABキー:各行タブ入力、 Shift+TABキー:各行タブ削除★
になれば、全て対称になり、仕様的にも説明がつくと思うのですが、
いかがでしょうか。
#V8.58より前は(バグだったかもしれませんが)、動作的には全て対称でした。

こちらの我儘で申し訳ないのですが、
プログラミングのソース整形時、この操作を多用しており、
マクロ対応よりも、標準機能として、ご検討いただけたら幸いです。

[ ]
RE:34838 8.56からブロック選択後Shift-TaNo.34839
秀丸担当 さん 16/02/12 17:01
 

V8.56では、Shift+Tabは、複数選択化され、選択の中のタブ文字が削除でした。
Tabキーは、BOX選択のまま、選択の外にタブ文字が挿入されます。
ただしShift+Tab等でいったん複数選択化された後は、選択の中でインデントに
なります。

BOX選択の先頭入力の場合は「Tabキー」「/」「/」といった操作ができます。
複数選択の場合は「Tabキー」「/」「/」といった操作ができないです。「/」の
時点で削除になってしまいます。(最初に左矢印を押せば可能ですが)
複数選択化が正確な対称と言えますが、理想ではないと思います。

V8.56においても対称では無い部分がありましたが、いずれにしても対称でない
のであれば、V8.56に近い動作にしてもいいと思います。
できる限りそのように修正したいと思います。
(※1)がOFFの場合は、V8.58と同じく行単位のままか、必ず複数選択に変更する
かで、合わせることが可能だと思います。
(※1)がONの場合は、最初の操作はV8.56と同じにしようと思います。
Tabの後のShift+Tabの操作、などは変更の余地があると思います。

例えばBOX選択の英字入力の後、BackSpaceを押すとそれが削除(やり直し)にな
るという特別な動作があります。
やり直し可能な回数は英字の入力文字数によります。
この特別な動作をTab/Shift+Tabにもあてはめると、矛盾を減らせると思います
が、簡単そうではないのと、必要性があるかどうかわからないので、慎重に考え
たいと思います。

[ ]
RE:34839 8.56からブロック選択後Shift-TaNo.34843
m3snow さん 16/02/14 00:39
 
連絡をありがとうございました。
ご説明頂いたBOX選択と複数選択のTab/Shift+Tabキーの動作は、
BackSpaceをのやり直しを含めて大体理解しています。

V8.56に近い動作に修正して頂けるとのこと、大変有難く感謝いたします。
新しいバージョンを心待ちにしています。

確かに、(※1)がONの場合、Tabキー同様、Shift+Tabキーも複数選択に変更ならず、
BOX選択のまま、キーを入力しても削除されないのが理想ではありますが、
そうでなくとも、それは仕様と思えば特に不都合はないと思います。

よろしくお願いします。

[ ]
RE:34843 8.56からブロック選択後Shift-TaNo.34844
m3snow さん 16/02/14 00:55
 
すみません。送信してから気が付きました。
こちらの秀丸エディタの環境は、正式版のV8.54からV8.56へのバージョンアップで、
連絡した動作は、すべて、V8.54とV8.56の比較のものでした。

#ご連絡頂いた内容では、「V8.58では確かに関連する修正がありました。」
#とのことですが、β版のV8.58βxは未導入です。

なので、V8.54に近い動作に修正して頂ける... と理解しているのですが、
私の認識はあっているでしょうか。

[ ]
RE:34844 8.56からブロック選択後Shift-TaNo.34846
秀丸担当 さん 16/02/15 09:58
 

すみません。バージョン番号を勘違いしていました。
その通りでした。
前のコメントでV8.58と言っていたのはV8.56のことで、
V8.56と言っていたのはV8.54のことでした。

V8.58の次のβ版で、V8.54に近い動作に修正させていただきます。

[ ]