ブログラムの実行をタブで指定したいNo.37352
SaLee さん 19/05/21 17:34
 
プログラムの実行で
Perl FilePath
とすれば現在のタブを標準出力としてFilePathのスクリプトを実行できますが、
これを秀丸のタブを指定したいのですが、なにか方法はありますか?

[ ]
RE:37352 ブログラムの実行をタブで指定しNo.37353
秀丸担当 さん 19/05/21 18:02
 

[その他]→[プログラム実行]で実行する場合、「詳細設定」をONにして、標準出力の
出力先を指定できますが、「(新規)」は新しいタブ(新しいウィンドウ)で、「(挿
入)」は現在の秀丸エディタになります。
特定のタブを指定してやるということはできないです。
やるとしたら、マクロで、特定の秀丸エディタにsetactivehidemaruしてから、runex
で指定するしかないです。

あるいは、[その他]→[プログラム実行]の出力先には、ファイル名を指定できるので、
ファイルを指定しておいてもいいと思います。
例えば標準出力を「c:\folder\test.txt」にしておいて、c:\folder\test.txtは秀丸
エディタで普通に開きます。
[編集]→[再読み込み]で再読み込みするか、[その他]→[動作環境]→[ファイル]→
[排他制御2]で「ファイルのタイムスタンプを時々チェックする」にすると、再読み
込みがしやすいです。

[ ]
RE:37353 ブログラムの実行をタブで指定しNo.37354
SaLee さん 19/05/22 22:50
 
>
> ......
>[編集]→[再読み込み]で再読み込みするか、[その他]→[動作環境]→[ファイル]→
>[排他制御2]で「ファイルのタイムスタンプを時々チェックする」にすると、再読み
>込みがしやすいです。



いえ、Perlに対してタブA→EOF→タブB
を送りつけたい言う意味です。
この時、PerlにとってタブAが実行する記述内容で、タブBが標準入力(秀丸からの標
準出力)となっていると思います。

[ ]
RE:37354 ブログラムの実行をタブで指定しNo.37355
秀丸担当 さん 19/05/23 09:06
 

Perlの動作がよくわかっていないのですが、Perlが標準入力で受け取ったコードを実
行して、EOFまででコードは終わって、さらに引き続きそのコード自体がEOF以降の標
準入力を追加で取得する、というようなことができるのでしょうか。
Perlがそもそもそういうことができるのかどうかわからないですが、できるとして、
秀丸エディタでタブAとタブBで分かれた内容をどちらも標準入力に送ることはできな
いです。
手動操作なりマクロなり、何らかの方法で1つの内容(1つのファイル)にまとめて
やる必要があります。

コード自体は標準入力でなくてもよくて、実行するコードに送る標準入力がタブBで
あればいいということであれば、タブBにアクティブを切り替えてから、[その他]→
[プログラム実行]で、コマンドラインのperlの引数にタブAのファイル名、標準入力
を「(現在の内容)」にするといいと思います。
または、タブAがアクティブのままであれば、[その他]→[プログラム実行]で、標準
入力を「c:\folder\Tab_B_file.txt」というようにタブBのファイル名を指定すると
できると思います。


[ ]
RE:37355 ブログラムの実行をタブで指定しNo.37356
SaLee さん 19/05/23 11:53
 
>
> ......
>



タブAをファイルに保存し、タブBを開いてプログラムの実行で
Perl TabA_FilePath
とすれば期待した実行結果は得られるのですが、
タブAを保存するのがめんどくさく、またファイルパスを記入するのもめんどくさい
のです。
加えて、TabAは一度しか使わないスクリプトなので、そのためにいちいち保存して、
実行したあと削除する、と言うのが手間なのです。

秀丸先生が タブA→EOF→タブB とインタプリタに送りつけてくれれば全ては丸く収
まるのです。








[ ]
RE:37356 ブログラムの実行をタブで指定しNo.37357
秀丸担当 さん 19/05/23 13:39
 

ActiveState Perlを入れてみて試してみたのですが、標準入力でコードを実行し、EO
Fの制御コード(0x1Aの文字)まででコードが終わり、それ以降の標準入力は、実行
されるコードで取得できるということがわかりました。
そういう使い方ができるとは知りませんでした。

秀丸エディタで制御コードを入力するには、[その他]→[制御コード入力]からできる
のですが、EOFの制御コードだけはできないようになっています。10進数では26で、1
6進数では0x1Aの文字で、制御コード入力のダイアログからは敢えて外してあります。
EOFの制御コードを入れるには、マクロで
insert "\x1A";
とする必要があります。
これを実行すると、Zが反転した文字になって見えます。
このマクロを1つ作っておいて、マクロ登録してキー割り当てしておくと便利かもし
れません。
例えば以下のような感じで、Zの反転は手動入力して、タブBの内容はその後にコピペ
して、無題ファイルのままperlに標準入力させることでできました。

for (;<STDIN>;){
  chomp($_);
  print "$_\n";
}
Z  ←これはEOF制御コードで、Zの反転として見える
タブB内容
hoge1
hoge2
hoge3


こういうコピペもせず、あくまでタブAとタブBということであれば、上記作業を自動
的にやるマクロか、タブAの内容を自動的に一時ファイルに保存するマクロなど、何
らかのマクロでやるしかないです。
例えば、タブAを一時的な環境変数TEMPのフォルダに保存して、それを実行するとし
たら、以下のような感じになります。
タブBは、何をもってしてタブBと判断するのかわからないですが、例では次の秀丸エ
ディタにしてみています。
runexのパラメータ指定は適当ですが、使い方はマクロヘルプのrunexを参照してほし
いです。

$temp = getenv("TEMP")+"\\test201905223.pl";
deletefile $temp;
appendsave $temp;  //タブAを一時ファイルに保存
nexthidemaru;      //タブBへ(次の秀丸エディタ)
runex "perl.exe " + $temp
    , 1     //
    , 4, "" //現在の内容を標準入力
    , 4, "" //新規に標準出力
    ;
deletefile $temp;  //一時ファイルを削除


[ ]