選択中に runex を実行すると変になる件No.07521
yamashita さん 15/03/03 11:31
 
選択中に runex を実行すると変になる件

秀丸は、8.52 Beta 1 です。

以下の手順で、runex などでの表示が乱れることがあります。

ざっくり言うと「選択中に runex を実行中すると表示が乱れる」という症状です。


(1)準備その1
どこかの作業フォルダに test1.bat というファイルを作ります。
内容は以下です。
ここから >>>>
@echo off
echo this is test
<<<< ここまで

(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 を実行します。

実行すると、新しい秀丸が開き、
this is test
と表示されます。期待通りの動作です。

(4)実行その2
test1.bat を開き、たぶんどこでもいいのですが、例えば1行目の echo を選択状態
にして、
test1.mac を実行します。

すると、
・新しい秀丸が開かず、
・先ほど選択状態にした echo の部分に、test1.bat の実行結果が出てきます。

いままでも、何かのタイミングで、上記症状が出てびっくりしていたのですが、
先日ようやく「選択状態」が論点であることに気づきましたので、ご報告します。

普通は選択状態にして実行しないので、私としては急ぐ件ではないです。

[ ]
RE:07521 選択中に runex を実行すると変No.07523
秀丸担当 さん 15/03/03 13:11
 

マクロで確かにそうなることが確認できました。

runexの第4パラメータが1になっている場合は、[その他]→[プログラム実行]の、
標準出力が「(自動)」相当になっています。
[その他]→[プログラム実行]の「詳細指定」がOFFの場合は「>con」としたとき
と同じになっています。
この「(自動)」や「>con」のときは、状況によって自動的に出力先が変わるよう
になっています。
例えば、範囲選択して「sort.exe <con >con」とすれば、範囲をソートして置き
換えます。

範囲選択されていても、常に新規の秀丸エディタに出力するには、第4パラメー
タを4にするといいです。

[ ]
RE:07523 なるほど + ヘルプに要望No.07524
yamashita さん 15/03/03 16:14
 
なるほど、仕様でしたか!

指定を 1 = auto ではなく、4 = new にしたところ、
選択しても新規の秀丸に出力されることを確認しました。


ちょっと関連して。

(1)お願い
マクロヘルプ runex 文のところ、

runex文は他のプログラムを実行します。(V8.00以降)
run文等の拡張版です。

となっていますが、この直後に

ここから >>>>
各項目の意味については、秀丸エディタヘルプの
「プログラム実行の詳細(オプション指定時)」の項目を参照して下さい。
<<<< ここまで

と書いておいて、リンクで飛べるようにしておいて頂けませんでしょうか。


ちょっと考えれば、秀丸ヘルプのこういうページがあることを思いついて
しかるべきですが、実は今まで気がつきませんでした。:-(
「runex の各項目の意味、一部わからん。auto ってなんだ?」
と何度も思いながら、とりあえず動くので「まぁいいや」と思って
放置してました。


(2)疑問点
マクロヘルプ runexe 文の

> 標準エラー出力フラグ(数値)

のところに

> 標準出力フラグが指定されているときは、4〜8の指定はできません。

との記述があります。
マクロヘルプと秀丸ヘルプを読み比べた限りですが、おそらくこれは

> 標準出力フラグが 0 以外の時は、2 か 3 か、標準出力フラグと同じ値
> しか指定できません。

が正しいように思います。


(3)
たぶんですが、run 文、runsync2 文って、runex の
サブセットですよね?
これまた何年も放置してた疑問なんですが、これをヘルプに書いて
おいてもらえませんでしょうか。具体的には、

マクロヘルプ 
run 文、runsync 文、runsync2 文って、runex の末尾のところの

参照:runex

のすぐ上か下(下の方がいいかも知れません)に、たとえば

ここから >>>>
ちなみに run 文、runsync2 文を拡張した、runex 文というのがあります。
runex 文はパラメータで細かく動作を指定できます。

run "...";

runex "...", 0, 1, "", 1, "", 1, "", 1, "", 0, 0, 0;
は同じです。

runsync2 "...";

runex "...", 1, 1, "", 1, "", 1, "", 1, "", 0, 0, 0;
は同じです。
<<<< ここまで

みたいな(注意:パラメータは適当です)のが入ってると、以下のような
ユーザ(=数年前の私)が助かります。

「現状、run や runsync2 を使っていて、○○○○の不満がある。
 runex を見つけたが、パラメータを端から理解する時間と意欲がない。
 まず runex で run を再現し、それっぽいパラメータをいじって
 解決できればうれしい」
「逆に、runex で run っぽいものを自分で作って使うのは、
 思わぬところで run の動作と違うと面倒だ・・・」

再現の例示があれば、これらのものぐさは、かなり解決します。

もしかして、runsync 文も、表示フラグを 6 = SW_MINIMIZE にすれば
同じですかね? ならばそれも・・・


諸々、お手数をおかけします。

[ ]
RE:07524 なるほど + ヘルプに要望No.07525
秀丸担当 さん 15/03/03 16:51
 

ヘルプは説明が不十分で、申し訳ありません。
秀丸ヘルプに誘導するような文章なども追記させていただきます。

> 標準出力フラグが 0 以外の時は、2 か 3 か、標準出力フラグと同じ値
> しか指定できません。

これもそのように修正します。

>たぶんですが、run 文、runsync2 文って、runex の
>サブセットですよね?

run文については、サブセットのようなものになります。
runsysnc2文については、標準入出力は扱えないので、違うものになります。

run文のヘルプにも、runexの簡単な説明などを追記させていただきます。

[ ]
RE:07525 再びなるほどNo.07529
yamashita さん 15/03/04 15:21
 
> runsysnc2文については、標準入出力は扱えないので、違うものになります。

あ、そうか。理解してないで適当に書いてるのがバレちゃうな。


蛇足ながら、マクロヘルプの「run,runsync,runsync2文」の項を改めて読むと、わ
かりにくいところもあるようなので、ちょっと順番を入れ替えるなどしてみました。
ご参考まで。わからないところは適当に推察して書いてます。

ここから>>>>
 run文、runsync文、runsync2文は他のプログラムを実行します。
 パラメータとしてコマンドの文字列を指定してください。
 この3つの他に、runex文というのもあります。参照:runex

 run文はプログラムを起動したあと、マクロの次行以降をすぐに続行します。
 runsync文はプログラムを起動したあと、コマンドが終了するまで秀丸をアイコン
状態にして待ちます。
 runsync2文はrunsync文と同様ですが、アイコン状態にしないで待機します。

 run文は、"<con", ">con" などを付けることにより標準入出力のリダイレクトが可
能です。
 参照:[その他]-[プログラム実行]
 runsync文とrunsync2文はリダイレクトはできません。

 「<con」は、現在の秀丸の内容をShift-JISに変換してプログラムに渡します。
 「>con」は、プログラムからの出力をShift-JISであると解釈して新しい秀丸に出
力します。ただし、新しい秀丸で実行した場合は、その新しい秀丸に出力します。
 エンコードをそのまま扱いたい場合は、「<filename 」や「>filename」で直接入
出力してください。
 参照:ファイルのエンコードのまま実行するマクロ

 run文で「>con」し、秀丸が新しく起動する場合でも、マクロを実行する秀丸は移
動しません。
 マクロを実行する秀丸を移動して実行結果に対して操作を行う場合は、newfile;し
て新しい秀丸にマクロの実行を移してからrun文を実行してください。
 ※V4.14のヘルプまで、run文で標準出力がリダイレクトされている場合、run文はr
unsync文同様に、待機するようになります、と書いてありましたが、これは誤りでし
た。
(以下 %f の説明など同じ。末尾の 参照:runex は残した方がいいと思います。)
<<<<ここまで

[ ]
RE:07529 再びなるほどNo.07530
秀丸担当 さん 15/03/04 16:27
 

ご提案ありがとうございます。

参考にさせていただき、また修正させていただきます。

[ ]