他の秀丸が見つからないNo.03927
ひろくん さん 03/10/30 16:48
 
はじめまして、ひろくんといいます。

 目的の動作ができず、何か対応策がないかと思い、お知恵を拝借
致したく、投稿します。

 目的は、とあるマクロで複数のファイルの内容を検索したい時に、
  ・既に開いてあるファイルは、setactivehidemaruで切り替え
  ・開いていないファイルは、openfile "/h"+$FileNameで開く
とする時に、上記の処理の判断でfindhidemaruを使ったのですが、
既に開いているにもかかわらず、存在しないと戻りが発生するのです。
(findhidemaru("hogehoge.c") == -1 が成立してしまう。)

 原因はわかっていて、MicrosoftのTweak UIのX-Mouseで
 ”ポインタに追従して、アクティブウインドウをを切り替える”を有効
 ”ウインドウを手前に移動する”を無効
にして、

再現試験
 1.対象マクロをキーに割り当てておく(私の場合、ctrl+_)
 2.マクロを実行するファイル(File1)を検索対象のファイル(File2)と関係の無いフ
ァイル
  (File3)を開く
 3.File3をマウスでクリックして、アクティブにする
 4.File2をマウスでクリックして、アクティブにする
 5.マウスをFile1に移動(X-Mouseの機能でアクティブになる)
 6.マクロを実行する→検索に失敗する。

 これが、発生しているときに、hidemarucountを実行してみると、開いてある
秀丸より、少ない値が出ます。場合によっては、"1"になってしまいました。
 (File3は、無くても発生します)

 どうも、X-MouseでActiveを切り替えた時にうまくないようなのです。

 私の方で試したのは、
  ・"setactivehidemaru 0;"を実行を追加 → 効果なし
  ・"setactivehidemaru 1;","setactivehidemaru 0;"の実行を追加 → 効果なし
  ・"nexthidemaru;","prevhidemaru;"の実行を追加 → 効果なし
  ・"message "hoge";"の実行を追加 → 効果あり(しかし、処理が連続しない
の不採用)

 X-Mouseは使用しないというのは、無しでなにか対応方法がないかと...m(_^_)m

ちなみに、OSはWindowsXPです。

テスト環境
File1 = src.txt
File2 = ref1.txt
File3 = dummy.txt

としたとき、test.macで、
title "file:ref1.txt count:"+str(hidemarucount)+" No:"+str(findhidemaru("ref
1.txt"));
title -1;

を記述して、文中の再現試験をしていただけると再現します。

以上、よろしくお願いいたします。(長文、失礼しました)

[ ]
RE:03927 他の秀丸が見つからないNo.03928
アルビレオ さん 03/10/30 19:11
 
秀丸ユーザーのアルビレオです。

> どうも、X-MouseでActiveを切り替えた時にうまくないようなのです。

これはどちらかというと、X-Mouseが抱える本質的な問題です。

> ”ポインタに追従して、アクティブウインドウを切り替える”を有効

というのは言い換えると「アプリケーション側からのアクティブウィンドウの切
り替えを無効にしてしまう」ということになります。
(nexthidemaruと「ポインタに追従してアクティブ...」が機能として矛盾するの
は想像できますよね?)
そのため、秀丸エディタに限らずアクティブウィンドウ関係を制御するアプリ
ケーションでは問題が起きることが非常に多く、ひどい場合はフリーズしたり異
常終了することもありました。

私もWin95のころにX-Mouseを使ってみたことがありますが、あまりのトラブルの
多さに使わなくなりました。

> X-Mouseは使用しないというのは、無しでなにか対応方法がないかと...m(_^_)m

秀丸側で対応を期待するのはたぶん無理です。
理由をあげることもできますが、私は単なるユーザーなので詳しい話は控えます。

X-Mouseによって問題が起きるのは秀丸に限った話ではないので、X-Mouseを使う
ならこれぐらいのトラブルは覚悟しておいた方がいいでしょう。
Tweak UIがあくまでユーザーの自己責任の上で使用することになっているのはそ
のためです。

[ ]
RE:03928 他の秀丸が見つからないNo.03929
ひろくん さん 03/10/31 09:28
 
ひろくんです。

 早速のコメントありがとうございます。

>秀丸ユーザーのアルビレオです。
>
>> どうも、X-MouseでActiveを切り替えた時にうまくないようなのです。
>
>これはどちらかというと、X-Mouseが抱える本質的な問題です。
>
>> ”ポインタに追従して、アクティブウインドウを切り替える”を有効
>
>というのは言い換えると「アプリケーション側からのアクティブウィンドウの切
>り替えを無効にしてしまう」ということになります。
>(nexthidemaruと「ポインタに追従してアクティブ...」が機能として矛盾するの
>は想像できますよね?)
>そのため、秀丸エディタに限らずアクティブウィンドウ関係を制御するアプリ
>ケーションでは問題が起きることが非常に多く、ひどい場合はフリーズしたり異
>常終了することもありました。
>
>私もWin95のころにX-Mouseを使ってみたことがありますが、あまりのトラブルの
>多さに使わなくなりました。

 そうでしたか。
 私もWin95のころから、ずーっと使ってたのですが、全くトラブル
無しだったので、安定したソフトだと考えていました。

 しかしながら、X-Mouseがトリッキー気味なことをしているのは
わからないわけではないのですが、前述にある、

 ”ポインタに追従して、アクティブウインドウを切り替える”を有効

だけでは、特に問題は発生せず、

 ”ウインドウを手前に移動する”を無効

とした時に問題が発生するのです。
 と考えると、”ウインドウを手前に移動する”を無効にしたときに
マウスでアクティブが切り替わったとき、文字入力ができるわけです
から、秀丸に飛んでくるシステムからのメッセージが少ないのかな
(無いわけではない?)と、思ったわけです。

 で、
 1.その少ないメッセージで、何とかならないか
 2.ダミーでもいずれかのマクロを実行すると、直らないか
 等の打開策がないかと思った次第です。

 時々フォーラムに出てきている、ウインドウの度重なる切り替えで
再現性が低いがおかしくなるというのが出ているようですが、これと
同類の問題(複数のメッセージで一部がロスト?)になるのではとも
考えているのですが...
(的をはずしていたらすみません)

>> X-Mouseは使用しないというのは、無しでなにか対応方法がないかと...m(_^_)m
>
>秀丸側で対応を期待するのはたぶん無理です。
>理由をあげることもできますが、私は単なるユーザーなので詳しい話は控えます。
>
>X-Mouseによって問題が起きるのは秀丸に限った話ではないので、X-Mouseを使う
>ならこれぐらいのトラブルは覚悟しておいた方がいいでしょう。

 トラブルを回避したいので、できれば相性の悪いソフトを教えて
いただけないでしょうか?
 今のところであったことが無いのですが購入に際し、材料に
したいので、お願いします。

>Tweak UIがあくまでユーザーの自己責任の上で使用することになっているのはそ
>のためです。

[ ]
RE:03929 他の秀丸が見つからないNo.03932
アルビレオ さん 03/10/31 15:37
 
アルビレオです。

> 私もWin95のころから、ずーっと使ってたのですが、全くトラブル
>無しだったので、安定したソフトだと考えていました。

トラブルが起きるソフトウェアは数としてはそんなに多くないと思います。
よく使うソフトは人によってまるで違うこともありますし、使わないわけにはい
かないソフトがまともに動かなくなると「X-Mouseは使い物にならない」となっ
てしまうわけで、誰にでも当てはまるわけではないんでしょうね。

> ”ポインタに追従して、アクティブウインドウを切り替える”を有効
>
>だけでは、特に問題は発生せず、
>
> ”ウインドウを手前に移動する”を無効
>
>とした時に問題が発生するのです。
> と考えると、”ウインドウを手前に移動する”を無効にしたときに
>マウスでアクティブが切り替わったとき、文字入力ができるわけです
>から、秀丸に飛んでくるシステムからのメッセージが少ないのかな
>(無いわけではない?)と、思ったわけです。

内部の動作を知っているわけではないのではっきりしたことはいえませんが、た
とえばhidemarucountがアクティブウィンドウより奥にあるウィンドウの数を数
えるようになっていて、findhidemaruは内部的にhidemarucountをつかって検索
対象をカウントしてるのかもしれません。
常駐秀丸を検索対象から除外するためにそういう動作になっているとか。
(あくまで想像です)

ところで、”ウインドウを手前に移動する”をONにしていると nexthidemaru も
正しく動作するのでしょうか?
もしも私が作者だったら、
・nexthidemaruはX-Mouseに対応しようがない
 ↓
・findhidemaruやhidemarucountだけ対応しても動作しないマクロが残る
 ↓
・そんな中途半端なX-Mouse対応ならやりたくない
と考えます。
ごく一部の機能だけをX-Mouse対応にするよりも「秀丸はX-Mouseでは正しく動作
しない」と宣言してしまった方が楽だし。

>>X-Mouseによって問題が起きるのは秀丸に限った話ではないので、X-Mouseを使う
>>ならこれぐらいのトラブルは覚悟しておいた方がいいでしょう。
>
> トラブルを回避したいので、できれば相性の悪いソフトを教えて
>いただけないでしょうか?
> 今のところであったことが無いのですが購入に際し、材料に
>したいので、お願いします。

すみません、ずいぶん昔のことなので覚えていません。
まあSDI系のソフトで他のウィンドウに対する制御も行なうようなものはそう多
くないかもしれませんね。

[ ]
RE:03932 他の秀丸が見つからないNo.03933
ひろくん さん 03/10/31 17:39
 
ひろくんです。

>内部の動作を知っているわけではないのではっきりしたことはいえませんが、た
>とえばhidemarucountがアクティブウィンドウより奥にあるウィンドウの数を数
>えるようになっていて、findhidemaruは内部的にhidemarucountをつかって検索
>対象をカウントしてるのかもしれません。
>常駐秀丸を検索対象から除外するためにそういう動作になっているとか。
>(あくまで想像です)

 マクロの動作を見ていると、hidemarucount等秀丸のwindowは、
クリックやタスク切換え時に再生成しているようです。
 似たような事で、マクロを動かしたまま、他の秀丸をマウスで
普通にアクティブにしても、hidemarucount等はおかしくなるようです。
(hidemarucount等の流れを見るかぎりではですが...)

>ところで、”ウインドウを手前に移動する”をONにしていると nexthidemaru も
>正しく動作するのでしょうか?

 この場合は、動作しています。

[ ]
RE:03933 他の秀丸が見つからないNo.03934
アルビレオ さん 03/10/31 18:27
 
アルビレオです。

> マクロの動作を見ていると、hidemarucount等秀丸のwindowは、
>クリックやタスク切換え時に再生成しているようです。
> 似たような事で、マクロを動かしたまま、他の秀丸をマウスで
>普通にアクティブにしても、hidemarucount等はおかしくなるようです。
>(hidemarucount等の流れを見るかぎりではですが...)

考えてみると普通の状態でも時間のかかるマクロを実行中にアクティブウィンド
ウを切り替えるとおかしくなることもありそうですね。
X-Mouseを使うとそういうことが簡単に起こってしまうといえそうです。

作りかけやできたばかりのソフトなら対策を考えられるかもしれませんが、秀丸
のように歴史のあるソフトだと下手にいじるとマクロなどにいろいろと矛盾が出
てきそうで、手を入れにくい部分のような気がします。

>>ところで、”ウインドウを手前に移動する”をONにしていると nexthidemaru も
>>正しく動作するのでしょうか?
>
> この場合は、動作しています。

ということはX-Mouseによるアクティブウィンドウの切り替えはマウスが移動し
たときだけに実行されるのでしょうね。(普通に考えればそうなるけど)

とりあえずの対策として、マクロの先頭に

nexthidemaru;
prevhidemaru;

を追加して強制的にアクティブウィンドウを手前に持ってくる、
ウィンドウ切り替えを行なうマクロ実行中にはマウスを動かさないように気をつ
ける、とか。
あ、nexthidemaruも機能しないのか。うーむ。

[ ]