タブ切り替え時にタスクバーの不具合とカNo.08423
ぷっぴす さん 05/06/25 20:27
 
タブ化しておいて次のタブに移動したとき、
タスクバーにある秀丸の順番が一番最後になってしまいます。
この現象を改善できないでしょうか?
(環境はWindowsXPです)

また要望ですが、カーソル移動で単語区切りで移動することは
できないでしょうか?
たとえば単語として
ABC
があるとして
1.AからBの頭へ
2.BからCの頭へ
3.CからCの最後へ
またその逆方向でも逆にしたようなカーソルの移動方法です。

よろしくお願いします。

[ ]
RE:08423 タブ切り替え時にタスクバーの不No.08424
ぎんNaN さん 05/06/25 22:00
 
>カーソル移動で単語区切りで移動することは
[Shift]+[→]([←])

[ ]
RE:08424 タブ切り替え時にタスクバーの不No.08425
ぎんNaN さん 05/06/25 22:01
 
>>カーソル移動で単語区切りで移動することは
>[Shift]+[→]([←])
大嘘書いた。。。。。

[Ctrl]+[→]([←])

[ ]
RE:08425 タブ切り替え時にタスクバーの不No.08426
ぷっぴす さん 05/06/26 20:36
 
>[Ctrl]+[→]([←])
それで移動できることは知っていたのですが、
たとえば
 abc = 123;
のようなときに
1.aの先頭に移動
2.cの次に移動
3.=の先頭に移動
と行ったような移動がしたかったのですが
「単語」という認識方法が難しいのかもしれませんね。

[ ]
RE:08423 タブ切り替え時にタスクバーの不No.08435
秀丸担当 さん 05/06/27 15:29
 

>タブ化しておいて次のタブに移動したとき、
>タスクバーにある秀丸の順番が一番最後になってしまいます。
>この現象を改善できないでしょうか?
>(環境はWindowsXPです)

これは、タブモードのときは1つのウィンドウではなく、複数のウィンドウを擬
似的に1つに見せているため、仕方ないです。
V4.10βの段階でタスクバーをなんとかうまく制御してみようと試みてみました
が、うまくいかず断念しました。

[ ]
RE:08426 タブ切り替え時にタスクバーの不No.08436
秀丸担当 さん 05/06/27 15:32
 

>それで移動できることは知っていたのですが、
>たとえば
> abc = 123;
>のようなときに
>1.aの先頭に移動
>2.cの次に移動
>3.=の先頭に移動
>と行ったような移動がしたかったのですが
>「単語」という認識方法が難しいのかもしれませんね。

期待される動作とは違いますが、Ctrl+[→]に「単語右(サルネン風)」を割り
当てておくと、少し動きが違うのでいいかもしれません。
単語の認識に関しての要望はいままでにもありましたが、互換性などを考えると、
仕様を変えるのは慎重に考えないといけないです。

[ ]
RE:08426 タブ切り替え時にタスクバーの不No.08437
bouz さん 05/06/27 17:14
 
>たとえば
> abc = 123;
>のようなときに
>1.aの先頭に移動
>2.cの次に移動
>3.=の先頭に移動
>と行ったような移動がしたかったのですが
>「単語」という認識方法が難しいのかもしれませんね。

厳密に「単語」となると難しいと思いますが、単に
「スペース以外」「スペース」「スペース以外」「スペース」...
のそれぞれの頭にカーソルを持っていきたい、ということならば(勝手に単純化(^_^;))
次のようなマクロが出来ます。(少なくとも abc = 123;ならいける)

//次の区切りの頭
call isseparator;
#s = ##return;
right;
while (result) {
 call isseparator;
 if (#s*##return==1) right;
 else break;
}
endmacro;

//前の区切りの頭
left;
call isseparator;
#s = ##return;
while (result) {
 call isseparator;
 if (#s*##return==1) left;
 else {
  right;
  break;
 }
}
endmacro;


isseparator://タブ・スペース・改行が区切り
 if (strstr("\t \x0d", char(code)) >= 0) return 1;
 return -1;

[ ]
RE:08436 タブ切り替え時にタスクバーの不No.08439
たまねぎ さん 05/06/27 20:00
 
>単語の認識に関しての要望はいままでにもありましたが、互換性などを考えると、
>仕様を変えるのは慎重に考えないといけないです。

以前、私も単語の認識に関して要望を出したんですが、単語の定義を
Email,URL,ファイル名のカラー表示のカスタマイズのように、
環境設定なんかでユーザー定義可能にするというのはできないでしょうか?

[ ]
RE:08439 タブ切り替え時にタスクバーの不No.08441
アルビレオ さん 05/06/27 20:28
 
秀丸ユーザーのアルビレオです。

>以前、私も単語の認識に関して要望を出したんですが、単語の定義を
>Email,URL,ファイル名のカラー表示のカスタマイズのように、
>環境設定なんかでユーザー定義可能にするというのはできないでしょうか?

アイディア自体に反対というわけではないですが、
自分の望んだ動きにするためにはどういう設定を選択すればいいのか、わかりや
すい設定ダイアログをデザインするのは難しそうですね。

もうひとつの懸念はマクロの互換性で、カーソル移動のルールを変えるのは正し
く動かないマクロがたくさん出てきそうです。
マクロの場合は設定に影響されないことにするという方法もありますが、それは
それでちょうど#08419のような問題を増やすことになるわけでして。

[ ]
RE:08435 タブ切り替え時にタスクバーの不No.08443
ぷっぴす さん 05/06/27 23:01
 
>似的に1つに見せているため、仕方ないです。
>V4.10βの段階でタスクバーをなんとかうまく制御してみようと試みてみました
>が、うまくいかず断念しました。
なるほど。
たとえば、タブモードの場合、通常のタスクトレイで
表示しているものはタスクトレイに表示させないようにして
ダミーみたいなものをタスクトレイに表示させ、
それに対して、操作するような感じでもだめですかね?

っと思ったらALT+TABとかでダミーのものも表示されてしまいそうですが...

[ ]
RE:08441 タブ切り替え時にタスクバーの不No.08448
秀丸担当 さん 05/06/28 13:02
 

>以前、私も単語の認識に関して要望を出したんですが、単語の定義を
>Email,URL,ファイル名のカラー表示のカスタマイズのように、
>環境設定なんかでユーザー定義可能にするというのはできないでしょうか?

マクロでも互換性を維持しつつ、カスタマイズしたものをキー操作の記録などで
マクロ上で再現できるようにすることを考えると、なかなか簡単にはいかないで
す。
正規表現で書くといっても、具体的にいってどうなのでしょう。
[a-z]+ という記述があったとしても abc = xyz の = の先頭にはあてはまらな
いです。[a-z=]+としたとすると、abc=xyzは1つの単語になってしまいます。
他にも「エクスプローラーえくすぷろーらー」を2つの単語としてみなしたい場
合のカスタマイズとかにも対応できたりすることを考えて、しかもマクロでカス
タマイズ内容を再現できることを考えると、とても複雑です。
いろいろ心配事を考えずに互換性をなくして考えると複雑ではないかもしれない
ですが。

[ ]
RE:08443 タブ切り替え時にタスクバーの不No.08450
秀丸担当 さん 05/06/28 14:03
 

>たとえば、タブモードの場合、通常のタスクトレイで
>表示しているものはタスクトレイに表示させないようにして
>ダミーみたいなものをタスクトレイに表示させ、
>それに対して、操作するような感じでもだめですかね?

そのようなことも試したりしていましたが、なかなかうまくいかず、断念してし
まいました。

[ ]
RE:08448 タブ切り替え時にタスクバーの不No.08455
たまねぎ さん 05/06/28 21:22
 
>正規表現で書くといっても、具体的にいってどうなのでしょう。

とりあえず、
\s  空白文字(スペース、タブ)
\w  英数字、_
\k  半角カタカナ
\o  記号(\s,\w,\k以外の半角文字)
\S  全角空白
\W  全角英数字
\K  全角カタカナ
\H  全角ひらがな
\Z  漢字
\O  \S,\W,\K,\H,\Z以外の2バイト文字
\e  何もなし(空)
として、今の秀丸の単語の認識だと、以下の正規表現
(\w+|\k+|\S+|\W+|\K+|\H+|\Z+|\O+|\e)[\s\o]*
で表されるパターンを左優先で、論理行頭から論理行末まで
マッチした文字列で区切っていったときの文字列になります
(厳密には違うかもしれませんが)。

abc = xyz;で、=の先頭に当てはまるケースだと、
(\w+|\k+|\S+|\W+|\K+|\H+|\Z+|\O+|\o+|\e)\s*
となります。

abc = xyz;で、=と空白に当てはまるケースだと、
(\w+|\k+|\S+|\W+|\K+|\H+|\Z+|\O+|\o+|\s+|\e)
となります。

こんなかんじですかね?

[ ]
RE:08455 タブ切り替え時にタスクバーの不No.08459
秀丸担当 さん 05/06/29 13:19
 

>として、今の秀丸の単語の認識だと、以下の正規表現
>(\w+|\k+|\S+|\W+|\K+|\H+|\Z+|\O+|\e)[\s\o]*
>で表されるパターンを左優先で、論理行頭から論理行末まで
>マッチした文字列で区切っていったときの文字列になります
>(厳密には違うかもしれませんが)。

ありがとうございます。
たしかに、そのような判断方法であればできそうです。
こういった判断方法でいいかマクロで検証してみようとしたら、マクロでできた
ので載せておきます。
機能追加するより、カスタマイズしたい人はマクロで対応していただいたほうが
いいかもしれないです。


//単語右カスタマイズ
//-----以下設定
$word = "([a-z][a-z0-9]*|[0-9.]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]
+)";
#fLeftStop = 1;       //単語の左側に停止させる場合 1
#fRightStop = 0;      //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1;  //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定
$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && iskeydown( 0x10 ) ) {
 beginsel;
}
if( selecting ) {
 #fLeftStop = #fLeftStopAtSel;
 #fRightStop = #fRightStopAtSel;
}
Retry1:
#x = x;
#y = y;
Retry2:
searchdown2 $word, regular, nocasesense;
if( result == false ) goto Exit;
if( foundtopx == #x && foundtopy == #y ) {
 moveto foundendx, foundendy;
 if( #fRightStop == 0 ) goto Retry2;
} else {
 moveto foundtopx, foundtopy;
 if( #fLeftStop == 0 ) goto Retry1;
}
Exit:
endsel;
setsearch $searchbuffer, #searchoption;
endmacro;




//単語左カスタマイズ
//-----以下設定
$word = "([a-z][a-z0-9]*|[0-9.]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]
+)";
#fLeftStop = 1;       //単語の左側に停止させる場合 1
#fRightStop = 0;      //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1;  //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定

$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && iskeydown( 0x10 ) ) {
 beginsel;
}
if( selecting ) {
 #fLeftStop = #fLeftStopAtSel;
 #fRightStop = #fRightStopAtSel;
}
#c = column;
#l = lineno;
Retry:
searchup2 $word, regular, nocasesense;
if( result == false ) goto Exit;
moveto foundendx, foundendy;
if( #fRightStop != 0 && (lineno < #l || column < #c) ) {
 goto Exit;
}
#x = foundtopx;
#y = foundtopy;
#fx = foundendx;
#fy = foundendy;
while( 1 ) {
 searchup2 $word, regular, nocasesense;
 if( result == false ) break;
 if( #fx != foundendx || #fy != foundendy ) break;
 #x = foundtopx;
 #y = foundtopy;
}
moveto #x, #y;
if( #fLeftStop == 0 ) goto Retry;
Exit:
endsel;
setsearch $searchbuffer, #searchoption;
endmacro;

[ ]
RE:08459 タブ切り替え時にタスクバーの不No.08722
たまねぎ さん 05/09/09 23:56
 
>ありがとうございます。
>たしかに、そのような判断方法であればできそうです。
>こういった判断方法でいいかマクロで検証してみようとしたら、マクロでできた
>ので載せておきます。

秀丸担当さんが作成されたマクロを登録して、キーに割り当てて
使用しているのですが、単語を左に移動する場合でうまく動作
しないケースがあるのです。
数字が英字ではさまれている場合、例えば以下のような単語
  hoge1st
だと、1の前後をカーソルが行ったり来たりして、左へ移動しなく
なってしまうのです。
どうすれば期待の動作になるか、教えていただけないでしょうか。

あと、キー操作の記録開始/終了で、キー操作を記録した場合に、
これらのマクロを割り当てたキーを使用してしまうと、キー操作
の再生で正しく再生されなくなってしまいます。
キー操作を保存して、マクロの実行で実行させると正しく再生
されます。
キー操作の記録開始/終了では、キーに割り当てたマクロの
実行には対応していないのでしょうか?

[ ]
RE:08722 タブ切り替え時にタスクバーの不No.08723
秀丸担当 さん 05/09/12 10:33
 

>秀丸担当さんが作成されたマクロを登録して、キーに割り当てて
>使用しているのですが、単語を左に移動する場合でうまく動作
>しないケースがあるのです。
>数字が英字ではさまれている場合、例えば以下のような単語
>  hoge1st
>だと、1の前後をカーソルが行ったり来たりして、左へ移動しなく
>なってしまうのです。
>どうすれば期待の動作になるか、教えていただけないでしょうか。

マクロを投稿した後に、このマクロではうまくいかないケースがあることに気付
きました。
その後多少マクロを修正したりしてみましたが、$wordの設定によってはうまく
いかないこともあるようです。
$wordが固定なら大丈夫かもしれませんが、$wordによるカスタマイズ性能を完全
にするにはさらにマクロの処理を複雑にする必要があるようです。
以下のマクロはその後修正したものですが、$wordによるカスタマイズ性能は完
全ではないです。

//単語左カスタマイズ
//-----以下設定
#fShift = 0;          //Shift+Leftに割り当てて範囲選択するマクロの場合 1
$word = "([a-z_0-9]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]+)";
#fLeftStop = 1;       //単語の左側に停止させる場合 1
#fRightStop = 1;      //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1;  //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定

disabledraw;
$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && #fShift != 0 ) {
 beginsel;
}
if( selecting ) {
 #fLeftStop = #fLeftStopAtSel;
 #fRightStop = #fRightStopAtSel;
}
#c = column;
#l = lineno;

Retry:
searchup2 $word, regular, nocasesense;
if( result == false ) goto Exit;
moveto foundendx, foundendy;
if( #fRightStop != 0 && (lineno < #l || column < #c) ) {
 goto Exit;
}
#x = foundtopx;
#y = foundtopy;
#fx = foundendx;
#fy = foundendy;
movetolineno #c + 1, #l;
while( 1 ) {
 searchup2 $word, regular, nocasesense;
 if( result == false ) break;
 if( #fx != foundendx || #fy != foundendy ) break;
 #x = foundtopx;
 #y = foundtopy;
}
moveto #x, #y;
if( #fLeftStop == 0 ) goto Retry;

Exit:
endsel;
setsearch $searchbuffer, #searchoption;
enabledraw;
endmacro;


//単語右カスタマイズ
//-----以下設定
#fShift = 0;         //Shift+Rightに割り当てて範囲選択するマクロの場合 1
$word = "([a-z_0-9]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]+)";
#fLeftStop = 1;       //単語の左側に停止させる場合 1
#fRightStop = 1;      //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1;  //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定
$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && #fShift != 0 ) {
 beginsel;
}
if( selecting ) {
 #fLeftStop = #fLeftStopAtSel;
 #fRightStop = #fRightStopAtSel;
}
Retry1:
#x = x;
#y = y;
Retry2:
searchdown2 $word, regular, nocasesense;
if( result == false ) goto Exit;
if( foundtopx == #x && foundtopy == #y ) {
 moveto foundendx, foundendy;
 if( #fRightStop == 0 ) goto Retry2;
} else {
 moveto foundtopx, foundtopy;
 if( #fLeftStop == 0 ) goto Retry1;
}
Exit:
endsel;
setsearch $searchbuffer, #searchoption;
endmacro;


>あと、キー操作の記録開始/終了で、キー操作を記録した場合に、
>これらのマクロを割り当てたキーを使用してしまうと、キー操作
>の再生で正しく再生されなくなってしまいます。
>キー操作を保存して、マクロの実行で実行させると正しく再生
>されます。
>キー操作の記録開始/終了では、キーに割り当てたマクロの
>実行には対応していないのでしょうか?

これも後から気付いたのですが、shiftを押している状態によって、記録時と再
生時で異なってしまうので、#fShift=0;のマクロと#fShift=1;のマクロを両方用
意する必要がありました。
計4つのマクロを作って、Ctrl+Left, Shift+Ctrl+Left, Ctrl+Right, Shift+
Ctrl+Right それぞれに割り当てなくてはいけません。
キー操作の再生とマクロ実行の差異は無いと思います。

[ ]
RE:08723 タブ切り替え時にタスクバーの不No.08724
たまねぎ さん 05/09/12 21:22
 
>マクロを投稿した後に、このマクロではうまくいかないケースがあることに気付
>きました。
>その後多少マクロを修正したりしてみましたが、$wordの設定によってはうまく
>いかないこともあるようです。
>$wordが固定なら大丈夫かもしれませんが、$wordによるカスタマイズ性能を完全
>にするにはさらにマクロの処理を複雑にする必要があるようです。
>以下のマクロはその後修正したものですが、$wordによるカスタマイズ性能は完
>全ではないです。

マクロを実行したところ、期待通りの動作となりました。


>これも後から気付いたのですが、shiftを押している状態によって、記録時と再
>生時で異なってしまうので、#fShift=0;のマクロと#fShift=1;のマクロを両方用
>意する必要がありました。
>計4つのマクロを作って、Ctrl+Left, Shift+Ctrl+Left, Ctrl+Right, Shift+
>Ctrl+Right それぞれに割り当てなくてはいけません。
>キー操作の再生とマクロ実行の差異は無いと思います。

キー操作の再生は、Shift+F2で行っていました。
確かにShiftキーを押していました。
原因がわかって納得です。

ありがとうございました。

[ ]