runex で実行中にスクロールすると表示がNo.34017
yamashita さん 15/02/23 19:13
 
以下の手順で、runex などでの表示が乱れることがあります。

ざっくり言うと「実行中にスクロールすると表示が乱れる」という症状です。


(1)準備その1
どこかの作業フォルダに test1.bat というファイルを作ります。
内容は以下です。
ここから >>>>
@echo off
for /L %%i in (1, 1, 50) do (
 echo %%i
 sleep 0.3
)
<<<< ここまで

これは、
1から50までの数値を、0.3 秒毎に出力するバッチファイルです。
秀丸の縦の行数は、表示される数字の最大値(=50)よりも、
ある程度小さく、例えば25行とかだとします。

(2)準備その2
秀丸マクロフォルダに、以下のマクロ test1.mac を作成します。
ここから >>>>
runex "test1.bat"
  , 0             //sync    0:async 1:sync
  , 1, ""         //stdin   0:none 1:auto 2:file 3:(reserve) 4:all 5:select
  , 1, ""         //stdout  0:none 1:auto 2:file 3:add file  4:new 5:insert
6:replace
  , 1, ""         //stderr  0:none 1:=out/auto 2:file 3:add file  4:new 5:in
sert 6:replace
  , 1, ""         //folder  0:none 1:current 2:specify 3:(reserve) 4:exe's f
older
  , 0             //show    0:auto 1:show 2:hide
  , 0             //nodraw  0:draw 1:no draw
  , 0             //unicode 0:ansi 2:unicode
  ;
<<<< ここまで
先ほど作ったバッチファイルを実行するだけのマクロです。

(3)実行その1
test1.bat を開いて、test1.mac を実行します。
実行すると、新しい秀丸が開き、1(return) 2(return) 3(return)
という感じで順に数字が出力されていきます。

しばらくすると、数字が秀丸の下の端に到達して、スクロールし始めます。
(秀丸の縦が25行なら、「26」を出力するときからスクロールが始まります。)

(4)実行その2
「30」ぐらいまで表示されたところで、秀丸の右端のスクロールバーを上に移動し
ます。
すると、画面がスクロールしますが、その間も test1.bat が実行され続けています。

その間の test1.bat の出力が、下から3行目ぐらいに出力されてしまいます。

(5)実行その2の詳細な記述
細かく書きますと、スクロールが始まって、30まで出力されたとします。

<図1>
(略)
26
27
28
29
30  <--- 「30」まで出力された
---------------- <-- 秀丸の下の端

ここで上にスクロールして

<図2>
(略)
21
22
23
24
25  <--- 5行分、スクロールされたとすると、こんな感じに
---------------- <-- 秀丸の下の端

みたいにすると、次の出力「31」が

<図3>
(略)
21
22
23
31  <--- 「31」がここに入ってしまう
24
25
---------------- <-- 秀丸の下の端

みたいになります。以下、32 33 は、31 の下に入ります。
最終的に、50 まで出力されますが、

<図4>
(略)
48
49
50  <--- 最後の「50」まで出力された
24  <--- この
25  <--- 2行は、表示が乱れたまま残る
---------------- <-- 秀丸の下の端

となります。


上記手順は、再現用に単純なものを示しましたが、
実際のところは、1分に1回程度出力を出しながら数時間かかる計算を
しています。
で、途中でスクロールすると、後が乱れてしまう、という状況です。

何が論点なのかよくわからないのですが、

・上にスクロールして、最下部が見えなくなっている時に、
 最下部に追加されるべき新しい出力のリクエストが来たら、
 最下部が見えるように強制的にスクロールして、
 最下部に追加する。

という処理にしてもとりあえず解決していますが、
表示間隔(=今回は 0.3 秒)がさらに短いと、実質的に上をスクロールで
見ることができなくなってしまうので、

・上にスクロールして、最下部が見えなくなっている時に、
 最下部に追加されるべき新しい出力のリクエストが来たら、
 見えていない最下部に追加しておく。
 最下部までスクロールが戻ったら表示される。

となって欲しいと思っています。

あるいは

・上にスクロールしている時は表示が乱れるけど、一番下まで
 スクロールが戻った時には全部あるべき姿に戻る。

でも、現状よりはずっとうれしいです。

どうにかなるもんでしょうか。
あるいは何か私の秀丸の設定に不足があるのでしょうか。

実を言うと、これはさらに「ついで」の件なんですが、上記(図1)の状態で、
・カーソルキーや、[PageUP] [PageDown] キーなどや、
 カーソル移動にキーバインドしてあるキーでもスクロールできる。
・カーソルを動かして、キーバインドしてあるマクロを動かしたり、
 文字列を選択・コピーしたり、
 検索したりできる。
ともっとうれしいです。

[ ]
RE:34017 runex で実行中にスクロールするNo.34019
秀丸担当 さん 15/02/24 09:56
 

バグ情報ありがとうございます。
確かにそうなることが確認できました。
表示上の乱れではなく、実際にそこに挿入されてしまっているという問題でした。
スクロールと共にカーソルが移動していて、そうなっていました。
grepのときは、ご要望にあるような操作もできますが、runexはそうなっていな
いです。
grepと仕組みが違うこともありますが、必ずしもファイル末尾に結果が出るとは
限らず、runexではカーソル位置に挿入などができたりするので、カーソル位置
に意味があります。
少なくともスクロールで勝手にカーソル位置が動かないように修正させていただ
きます。
現状で回避するとしたら、[その他]→[動作環境]→[表示/操作]→[スクロールし
てもカーソル位置は固定]をONにしておくと、スクロールバーの操作でカーソル
移動しないようになります。

[ ]
RE:34019 runex で実行中にスクロールするNo.34020
yamashita さん 15/02/24 11:04
 
なるほど。バグでしたか。それは直りそうだという意味で良かったです。

> runexでは(中略)カーソル位置に意味があります。
なるほど。

> [スクロールしてもカーソル位置は固定]
は、使ったことなかったです。使ってみます。

コメント 34017 末尾に書いた「いろいろなことができるとうれしい」の件の関連で、
マクロ会議室 07514 に質問を書きましたので、よろしくお願いします。

[ ]