1 件の投稿を表示中 (合計 10 個)
  • 作成者
    投稿
  • #9592
    jinsei
    参加者

    rubyスクリプトをemeditorで作成するときに、外部ツールとしてruby.exeを登録しておき、ツールバーからボタン一発で動作確認できるようにしています。
    具体的には
    コマンド:(省略)ruby.exe
    引数:”$(Path)”
    アウトプットバーを使用する:Enable
    出力:新規文書の作成
    と設定しています。
    このような使い方をする際に、いくつか要望があります。

    ■1.引数を渡したい。
    ruby 編集中スクリプト.rb param
    という呼出しをしたいのですが、引数を「”$(Path)” param」としても駄目なようです。「$(Path)@param」という名前のファイルは見つからないというエラーになります。
    引数を渡せるようにできないでしょうか?

    ■2.外部ツールのプロパティダイアログをモードレスにしたい。
    1に関連するのですが、paramの値を色々変えて試す際に、毎回プロパティダイアログを開き直すのが面倒そうなので。

    ■3.入力ファイルを指定したい
    フィルタプログラム(標準入力からのデータに対して何か処理して標準出力に出す)では、標準入力へ流すデータファイルを指定したいです。
    渡し方は、ファイル名指定、起動時にファイルダイアログ指定、の2種類が欲しいです。

    ■4.固まることがある
    addlineno.rb
    ————————————–
    #!/usr/bin/ruby

    no=1
    while line=gets
    puts “#{no}:#{line}”
    no+=1
    end
    ————————————–

    というソースに対して入力を文書にすると固まります。

    DOS窓で
    type addlineno.rb | ruby addlineno.rb
    とすれば正常に動作します。
    (行番号が付与された結果が標準出力に得られる)

    #9593
    Yutaka Emura
    キーマスター

    jinsei さま

    いつも EmEditor Professional をお使いいただき、ありがとうございます。

    誠に勝手ながら、現在出張中のため、帰ってから同じ環境を再現したいと思いますので、しばらくお待ちください。

    できるだけ同じ環境で再現テストを行いたいため、ご利用の OS、Ruby、EmEditor のバージョンなどの情報を教えていただけると幸いです。

    どうぞよろしくお願い申し上げます。

    #9594
    jinsei
    参加者

    環境は以下の通りです

    WindowsXP(32bit) SP3
    EmEditor 10.0.0
    ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

    #9595
    takuya
    参加者

    そういうとき、僕は、Rubyを起動するWSH書いてます。

    ダイアログを改良は確かに便利ですが、無くとも工夫すれば、不便ではないと思います。

    たとえば、現在編集中のファイルをHTML化させるRubyを起動するマクロです。

    var WshShell = new ActiveXObject(“WScript.Shell”);
    process = WshShell.Exec(“ruby D:/Users/takuya/Documents/macros/hateda_parser.rb ‘” + document.Fullname + “‘” );
    str = process.StdOut.ReadAll()
    editor.newFile()

    固まるのはRuby処理系が遅いからではないでしょうか。。。

    #9596
    jinsei
    参加者

    takuya様

    コメントありがとうございます。
    そうですね、マクロも検討してみます。
    ツールダイアログからの起動は、rubyが無限ループに入った場合などに止める術が無さそうで危険な気もしていますし。

    >固まるのはRuby処理系が遅いからではないでしょうか。。。
    最初に書いたコードで入力は自分自身なので処理時間は一瞬です。
    標準入力がうまく渡ってないのかもしれません。

    #9617
    Yutaka Emura
    キーマスター

    jinsei 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    ご利用の Ruby バイナリは、ActiveScriptRuby でしょうか? もし可能でしたら、ダウンロードできるバイナリへの直接リンクを教えていただけると幸いです。よろしく御願い申し上げます。

    #9620
    jinsei
    参加者

    http://rubyinstaller.org/downloads/
    にある
    Ruby 1.8.6-p26 (Final)
    です。

    リンクとしては以下になります。
    http://rubyforge.org/frs/download.php/29263/ruby186-26.exe

    #9622
    Yutaka Emura
    キーマスター

    jinsei 様

    いつも EmEditor Professional をお使いいただき誠にありがとうございます。ご連絡ありがとうございます。

    Virtual PC 上で、Windows XP (SP3) 日本語版をフレッシュ インストールした環境で、Ruby 1.8.6-p26 (Final) をダウンロードして試してみました。

    まず「1.引数を渡したい。」についてですが、

    puts “Hello World!”

    というスクリプトを用意して、

    コマンド:
    C:rubybinruby.exe

    引数:
    “$(Path)” param

    [アウトプット バーを使用する] にチェック

    その他の設定は、既定の通りで、試してみました。

    その結果ですが、ご指摘のような「$(Path)@param」という名前のファイルは見つからないというエラーは発生しませんでした。

    4.固まることがある

    についてですが、この通りのファイルを作成して、上記と同じツールを作成し、引数は、”$(Path)” とだけ指定して実行してみましたが、アウトプット バーには何も表示されませんでした。固まることもありませんでした。

    もし、テスト方法が異なる場合は、できるだけ詳細な再現手順を教えていただけると幸いです。

    大変ご迷惑をお掛けして申し訳ありません。
    他にもご質問がございましたらご連絡ください。
    今後もどうぞよろしく御願い申し上げます。

    #9627
    jinsei
    参加者

    確認ありがとうございます。

    ■1.引数を渡したい
    再度確認したところ、正常にparamを渡すことができました。
    どうやったのか不明ですが、もし再現したら改めて報告させて頂きます。
    お手数をおかけして申し訳ありませんでした。

    ■4.固まることがある
    アウトプットバーに何も表示されてないということは何かおかしいと思われます。
    正常に動作すれば以下のようにソースに行番号を付与した内容で出力されます。
    「入力」の設定値は「文書」にされてるでしょうか?
    —————————–
    1:#!/usr/bin/ruby
    2:
    3:no=1
    4:while line=gets
    5:puts “#{no}:#{line}”
    6:no+=1
    7:end
    —————————–

    もう少し調査する為、コードを変更してみました。
    (puts “a”ではツールから起動時に音が出なかったのでBeep使ってます)
    addlineno2.rb
    —————————–
    require ‘Win32API’ # win32apiライブラリ
    beep = Win32API.new(‘kernel32’, “Beep”, %w(l l), ‘l’)

    no=1
    while line=gets
    beep.call(440, 100)
    line.chomp!
    puts “#{no}:#{line}”
    no += 1
    sleep 0.5
    # exit if line==’end’ ←このコメントを外すとツールからも正常に終了できる
    end
    —————————–

    DOS窓で
    type addlineno2.rb | ruby addlineno2.rb
    とすると
    1秒間隔で1行毎にBeep音を鳴らしながら行番号を付与して表示されるはずです。(12回Beepが鳴る)

    EmEditorのツールで実行すると、12回Beepが鳴ったあと終了せずに固まります。
    標準入力にEOFが送信されてないようです。
    そこで「入力」を「カスタム」に切替えてカスタム「$(DocText)」にして「EOFを追加」にチェックを入れてみましたが、現象変りませんでした。

    #9631
    Yutaka Emura
    キーマスター

    jinsei 様

    いつも EmEditor Professional をお使いいただき誠にありがとうございます。ご連絡ありがとうございます。

    「入力」の設定値は「文書」にしています。

    Ruby の場合、EOF 文字を見ているのではなく、標準入力がファイルのようにクローズするのを監視しているようです。EmEditor の外部ツールでは、アウトプット バーに直接タイプして文字を入力することができるようにするため、標準入力をクローズしていませんでした。でも、これだとツールによって不具合が発生してしまうため、次のメジャー バージョンでは、「ユーザー入力を有効にする」といったチェック ボックスを追加したいと思います。

    それまでの間、次のマイナー バージョンでは、標準入力の文字列が設定によって渡されている場合には、その文字列をすべて渡した時点でクローズしたいと思います。これで、ほとんどの場合問題なく動作するはずです。

    大変ご迷惑をお掛けして申し訳ありません。
    他にもご質問がございましたらご連絡ください。
    今後もどうぞよろしく御願い申し上げます。

1 件の投稿を表示中 (合計 10 個)
  • このトピックに返信するにはログインしてください。