- 作成者投稿
- 2010年7月15日 6:08 pm #9592jinsei参加者
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/rubyno=1
while line=gets
puts “#{no}:#{line}”
no+=1
end
————————————–というソースに対して入力を文書にすると固まります。
DOS窓で
type addlineno.rb | ruby addlineno.rb
とすれば正常に動作します。
(行番号が付与された結果が標準出力に得られる)2010年7月16日 3:08 am #9593Yutaka Emuraキーマスターjinsei さま
いつも EmEditor Professional をお使いいただき、ありがとうございます。
誠に勝手ながら、現在出張中のため、帰ってから同じ環境を再現したいと思いますので、しばらくお待ちください。
できるだけ同じ環境で再現テストを行いたいため、ご利用の OS、Ruby、EmEditor のバージョンなどの情報を教えていただけると幸いです。
どうぞよろしくお願い申し上げます。
2010年7月16日 4:46 am #9594jinsei参加者環境は以下の通りです
WindowsXP(32bit) SP3
EmEditor 10.0.0
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]2010年7月16日 8:06 am #9595takuya参加者そういうとき、僕は、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処理系が遅いからではないでしょうか。。。
2010年7月16日 10:17 am #9596jinsei参加者takuya様
コメントありがとうございます。
そうですね、マクロも検討してみます。
ツールダイアログからの起動は、rubyが無限ループに入った場合などに止める術が無さそうで危険な気もしていますし。>固まるのはRuby処理系が遅いからではないでしょうか。。。
最初に書いたコードで入力は自分自身なので処理時間は一瞬です。
標準入力がうまく渡ってないのかもしれません。2010年7月21日 11:00 pm #9617Yutaka Emuraキーマスターjinsei 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
ご利用の Ruby バイナリは、ActiveScriptRuby でしょうか? もし可能でしたら、ダウンロードできるバイナリへの直接リンクを教えていただけると幸いです。よろしく御願い申し上げます。
2010年7月22日 2:49 am #9620jinsei参加者http://rubyinstaller.org/downloads/
にある
Ruby 1.8.6-p26 (Final)
です。リンクとしては以下になります。
http://rubyforge.org/frs/download.php/29263/ruby186-26.exe2010年7月22日 4:40 am #9622Yutaka 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)” とだけ指定して実行してみましたが、アウトプット バーには何も表示されませんでした。固まることもありませんでした。
もし、テスト方法が異なる場合は、できるだけ詳細な再現手順を教えていただけると幸いです。
大変ご迷惑をお掛けして申し訳ありません。
他にもご質問がございましたらご連絡ください。
今後もどうぞよろしく御願い申し上げます。2010年7月22日 3:08 pm #9627jinsei参加者確認ありがとうございます。
■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を追加」にチェックを入れてみましたが、現象変りませんでした。2010年7月23日 1:21 am #9631Yutaka Emuraキーマスターjinsei 様
いつも EmEditor Professional をお使いいただき誠にありがとうございます。ご連絡ありがとうございます。
「入力」の設定値は「文書」にしています。
Ruby の場合、EOF 文字を見ているのではなく、標準入力がファイルのようにクローズするのを監視しているようです。EmEditor の外部ツールでは、アウトプット バーに直接タイプして文字を入力することができるようにするため、標準入力をクローズしていませんでした。でも、これだとツールによって不具合が発生してしまうため、次のメジャー バージョンでは、「ユーザー入力を有効にする」といったチェック ボックスを追加したいと思います。
それまでの間、次のマイナー バージョンでは、標準入力の文字列が設定によって渡されている場合には、その文字列をすべて渡した時点でクローズしたいと思います。これで、ほとんどの場合問題なく動作するはずです。
大変ご迷惑をお掛けして申し訳ありません。
他にもご質問がございましたらご連絡ください。
今後もどうぞよろしく御願い申し上げます。 - 作成者投稿
- このトピックに返信するにはログインしてください。