2003年08月03日

Ruby/Qteでgrepスクリプト作成

HIDAKA Takahiroさんの Ruby/Qte をLinuxザウルスにインストールすると、お手軽にQtopiaプログラミングができます。

ためしに、Qtopiaのインターフェイスをつけたgrepスクリプトを作ってみました。

まだテスト段階ですが、説明書とインストール用ipkをzipで固めたものを http://noir.s7.xrea.com/pub/zaurus/ruby-rqgrep-0.0.5.zip に置いておきます。

(以上、2003-01-04 22:08:42)

(追記) スクリーンショットです。rqgrep_screenshot.png

(以上、2003-01-05 15:29:18)

(追記) 0.0.2にバージョンアップしました。
* 検索前に結果リストボックスをクリックすると異常終了するのを修正。
* 検索開始時に、検索文字列と対象ファイル名をコンボボックスに保存。
* 結果リストボックス選択(メモ帳起動)を十字キー押下でもできるようにした。
* VGA画面でレイアウトが崩れるのを防いだ (つもり)。

(以上、2003-01-11 21:40:30)

(追記) 0.0.3にバージョンアップしました。
* 高速起動に仮対応。(アイコンを長押しして高速起動をオンにすることができるようになっただけ。高速起動をオンにすると、検索前で2MB、検索後では3~4MB程度メモリを消費します。)

(以上、2003-01-13 17:30:00)

(追記) すみません、0.0.3 には正しい .desktop ファイルが入っていませんでした。しばらくして気がついて入れ替えたのですが、その間にダウンロードされた方がおられたようです。0.0.3をアンインストールして0.0.4のほうをお試しください。

(以上、2003-01-13 20:56:00)

(追記) ようやく、検索文字列と検索対象ファイル名の履歴保存をつけました (0.0.5)。

(以上、2003-07-24 22:36:00)

(追記) すみません、zipのリンク先が0.0.4のままでした。

Posted by Hiroyuki KUROSAKI at 2003年08月03日 00:45 このエントリーを含むはてなブックマーク
この記事の TrackBack URL:
http://noir.s7.xrea.com/mt/mt-tb.cgi/25
Comments

はじめまして。マツイともうします。
C700で、やっとテキスト検索ができることに、感激しています。
バージョン0.003で高速対応にされ早速インストールしましたが、アイコン長押ししても
高速対応のチェックする部分が出てきません。
起動してhelpのバージョンを見ると0.002のままです。
旧バージョンは削除しておりますが・・。
ruby/qteのソフトは他のものとは、扱いが違うのでしょうか?
ついでですが、検索されたファイルの中で検索文字を反転などしていただけるとその後の作業がらくになります。
今後の発展を楽しみにしております。
初心者でプログラムの事はよくわかりません。
よろしくお願いいたします。

Posted by: Anonymous on 2003年01月13日 19:53

はじめまして。マツイともうします。
C700で、やっとテキスト検索ができることに、感激しています。
バージョン0.003で高速対応にされ早速インストールしましたが、アイコン長押ししても
高速対応のチェックする部分が出てきません。
起動してhelpのバージョンを見ると0.002のままです。
旧バージョンは削除しておりますが・・。
ruby/qteのソフトは他のものとは、扱いが違うのでしょうか?
ついでですが、検索されたファイルの中で検索文字を反転などしていただけるとその後の作業がらくになります。
今後の発展を楽しみにしております。
初心者でプログラムの事はよくわかりません。
よろしくお願いいたします。

Posted by: Anonymous on 2003年01月13日 19:53

マツイさん、はじめまして。よろしくお願いします。
0.0.3に入れた.desktopファイルの、高速起動を許可するオプションの名前が間違っていました。

その点を直した0.0.4を作りましたので、お試しください。

Posted by: noir on 2003年01月13日 20:58

無事、高速起動になり素早い検索が可能になりました。

Posted by: マツイ on 2003年01月13日 23:29

検索にマッチした文字列の反転表示ですが、私もあったらいいなと思っています。

起動するテキストエディタかビューアがそういう機能をもっていれば、いちばん楽に対応できるんですが…。

たとえば、less の -p オプションみたいな。

Posted by: noir on 2003年01月14日 08:56

ZAURUS SL-C700でRQGrepを使わせてもってます。MI-310からC700に乗り移って一番困ったのが、メモ帳の検索が出来なかったことですので、RQGrepは大変重宝してます。有難う御座います。

厚かましいですが要望をいくつか。
1.検索対象のフォルダをしていするテキストボックスのプルダウンメニュに過去のパス指定を5つほど履歴として残すようにして欲しいです。
2.C700の横使い画面に対応して欲しいです。検索結果からタグジャンプして、C700を縦にしたり横にしたりするのはつらいです。

Posted by: ちゃんちゃん on 2003年03月11日 12:01

使っていただいてありがとうございます。

1はどうやって保存したらいいか迷ってたんですが、たしかRuby/Qte 0.4からConfigをサポートしていたと思うので、それを使って保存・次回起動時呼び出しができるようにしたいと思います。

2はA300しか持ってないので逆に情報をいただきたいのですが、.desktopファイルに何かパラメータを加えるんでしたっけ?

できれば今週末ぐらいまでにバージョンアップしたいと思いますので、もうしばらくお待ちください。

Posted by: noir on 2003年03月11日 23:06

はじめまして。

実は私もRubyでQtアプリを作りたいと思っているのですが、まだまだ初心者です。C++などはわかるのですが、Rubyについてはまだまだこれからです。そこで教えてほしいのですが、入門に最適なページはどこかにないでしょうか?RubyだけではなくSL-C700でQtアプリを作るための、知っておきたいことなどをまとめたページなんてのは、どこかにないものでしょうか?いろんなサンプルなどがあると助かるのですが。そのようなページをご存知でしたら、ぜひ教えていただきたいのです。よろしくお願い痛いたします。

Posted by: a-murata on 2003年04月14日 23:36

a-murataさん、こんにちは。

Qtの入門的なサイトですが、Ruby/Qteのひだかたかひろさんのサイトか、もしくはそこからリンクをたどっていくのがいいんじゃないかと思います。

私は『Qtプログラミング入門』(オライリー・ジャパン) という書籍と、Qt、Qtopia SDKのドキュメントやサンプルから基本的なことを覚えました。SLザウルス用のパッケージの作り方などについては、シャープのザウルス宝箱Proや zaurus-ja (http://zaurus-ja.sourceforge.jp/) を参考にしてます。

逆に言えば、a-murataさんが入門者用サイトを作ってしまえば第一人者になれるかも? あるいは、Linux Zaurus Wiki (http://www.windy.cx/~mona/LinuxZaurus/) でプログラミング入門用Wikiページを作っていくとか。

# chanchanさん、リクエストに答えられず、すみません。もうしばらくお待ちください。

Posted by: noir on 2003年04月15日 06:45

お返事ありがとうございます。
第一人者なんてどんでもないっす(^^;)。

今はとりあえずRubyそのものの基本というものを勉強しておるところであります。これはなかなかすごい言語ですね。めんどくさいことがとても簡単にできてしまいます。まずはSL-C700のターミナル上で動作するものをしこしこ作っています。それで基本をマスターできたら、いよいよQtへと進もうと思います。教えていただいたURLがいつか役に立つときがくるでしょう。

ところでオライリーから書籍が出ているのですか?それはSL-C700で動作するQtアプリを作るためのSDKと、互換性があるのでしょうか?そもそもQtというのがよくわかっていないんです。SLザウルス用に特注されたAPIではないような気がするのですが、基本形とでもいうべきものがほかにあるわけでしょうか?

まだまだ道のりは遠く険しい。

Posted by: a-murata on 2003年04月15日 16:53

さっそく詳しい情報をありがとうございます。オライリーから出ている書籍は、SL Zaurus上のQtと互換性があるのでしょうか?そもそもQtというもの自体まだよくわかっていないものでして(^^;)。それにしてもRubyってのはすごい言語ですね。C言語などでは手間のかかることも実に簡単にできてしまいますね。これはしばらくやみつきになるかもしれません。今はまず基本をおさえるということで、コンソール用のプログラムを書いて勉強中です。そこからQtへと進んでいこうと思っています。また質問するかもしれませんが、そのときはよろしくお願いします。

Posted by: a-murata on 2003年04月16日 01:14

あれ、2回書けてしまってますね。申し訳ありません。最初のほうは会社からなのですが、POSTでエラーになったので書けていないと思ったのです。失礼しました。

Posted by: a-murata on 2003年04月16日 10:09

『Qtプログラミング入門』は主に扱っているQtのバージョンが1なのと、Qtopia特有のクラスについての説明がないんですが、Qtライブラリを使ったアプリ作成の基本がよくわかる本だと思います。

Posted by: noir on 2003年04月17日 07:59

半年以上ブランクが空いてしまいましたが、chanchanさんのリクエストにお応えしたもの (0.0.5) を作りました。qpeのConfigクラスを使っているので、Ruby/Qte 0.4が必要です。

Posted by: noir on 2003年07月24日 22:39

RQGrepの検索結果をZEditorという、エディターで
開くようにはできないのでしょうか。
ZEditorだと行番号が表示されますので
検索が容易になります。

Posted by: マツイ on 2003年08月07日 16:43

マツイさん、こんにちは。

ZEditor (でなくてもいいですが) で /home/QtPalmtop/bin/rqgrep.rb を開いて、146行目の

@editor = ExternalEditor.new

を、

@editor = ExternalEditor.new('zeditor')

にしてみてください。

私もやってみたところ、ZEditorをバックグラウンドで動かしているとき、編集内容が警告なしに失われてしまうという問題がありました。

あと、やっぱりできれば目的の行にすぐにジャンプできると便利ですよね。これはZEditorのほうで対応していただくしかないんですが……。それより、ZEditorがgrep機能を搭載したほうが速いかもしれません。

Posted by: noir on 2003年08月07日 18:23

早速、やってみました。
1メガもないテキストデータですが、検索にちょっと時間はかかりますが、ちゃんとZeditorへ、移行しました。
標準のメモ帳はほとんどを使っておりません。
少し便利になりました。ありがとうございました。

Posted by: マツイ on 2003年08月07日 19:22

早速、やってみました。
1メガもないテキストデータですが、検索にちょっと時間はかかりますが、ちゃんとZeditorへ、移行しました。
標準のメモ帳はほとんどを使っておりません。
少し便利になりました。ありがとうございました。

Posted by: マツイ on 2003年08月07日 19:23

初めまして。 ryo_hと申します。
突然ですが、ruby-rqgrepで教えてください。
qte例等では、起動したあとアプリケーションの切り換えを行うとうまく戻ってきません。
それに反してrqgrepではきれいに動作します。
ソースのどこが効いているのでしょうか?
いろいろカット&トライを行っているのですがわかりません。

顔を洗って(本を読んで)出直しなさい、でしたら申し訳ありません。
ぜひいい石鹸(『Qtプログラミング入門』(オライリー・ジャパン)?)をお教えください。
突然"教えろ"で大変失礼致しました。お許しください。

ruby-rqgrep0.0.4
SL-C760動作OK / ruby1.6.8-1 & ruby-qte0.4

Posted by: ryo_h on 2003年09月01日 19:06

ryo_hさん、こんにちは。

使っていただいてありがとうございます。

「qte例等」というのは、ターミナルからスクリプトを起動しているんですよね?

普通のアプリのようにdesktopファイルとアイコンを用意していない場合は、ターミナルに切り替えて、

(Ctrl-Z でスクリプトの実行をいったんサスペンド)
bg [Enter]
qcop QPE/Application/スクリプト名 'raise()' [Enter]

と入力すると、スクリプトのウィンドウに戻れるはずです。試してみてください。

Posted by: noir on 2003年09月02日 00:18

Kuro-san、replyありがとうございます。 ryo_hです。

「qte例」とはTakahiroさん(とお呼びしても?)のところ
http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=Takahiro%27s+inside+out
の examples/tutorials : ruby-qte-examples-0.3.1.tar.gz です。
お察しのとおり、ターミナルで起動させています。

さて、
desktopファイル?とアイコン?がない? ???
(アイコンはわかりますが)の状態でした。
desktopファイルとは***.desktopのことかも。意味は、なるほど...そうですか... 少し勉強しました。

(0. ターミナルで起動)
1. (Ctrl-Z でスクリプトの実行をいったんサスペンド)
2. bg [Enter]
3. qcop QPE/Application/スクリプト名 'raise()' [Enter]
という順序でトライしました。
「スクリプト名」が間違っているのかも知れませんが、うまく戻りません。(戻ろうとするのですが、画面が真っ白に
なり"暫くお待ちください"から進展しません)
"ruby rqgrep.rb"で起動させたrqgrepそのものも、この手順ではうまく戻りません。

rqgrepも、jpk版だと何がinstallされているかよくわからないものですから今はuninstallして、スクリプトファイル
そのものをターミナルを使って起動させています。
この状態でkeyHelperにより見事に切り替わります。
(ちなみに、アプリケーション切り換えはKeyHelperを使って行っていました。)
desktopファイルもアイコンもないはずですから、スクリプトそのものが効いているはずでは?と推測しました。
それとも一旦installした何かが消えずに残っているのでしょうか。


何にしろ、ちょっと私のレベルが低すぎます。
出直したほうが良さそうです。
また、だらだらと長文、失礼致しました。

Posted by: ryo_h on 2003年09月02日 19:03

すみません、私はA300ユーザーなので、KeyHelperというのを使ったことがありませんでした。そのため、アプリの切り換えといえば、ホーム画面からアイコンをタップしたり、タスクバーにならんでいるアイコンをタップするというような操作を思いうかべていました。

ためしに、私のところでもtutorialsのt1e.rbを使ってqcopコマンドでのアプリケーション切り替えを試してみました。

ruby t1e.rb [Enter]
(画面の左上にボタンが表示される)
(なにか適当なアプリを起動)
(ターミナルに戻る)
Ctrl-Z
bg [Enter]
qcop QPE/Application/t1e.rb 'raise()' [Enter]
(ボタンが全画面に表示される)

で、うまくいってしまいました……。

スクリプトの違いとしては、t1e.rbは

a.setMainWidget( hello )
hello.show()

となっているのに対して、rqgrep.rbのほうはそれに相当する部分を

a.showMainWidget(hello)

のように書いています。実際にt1e.rbをこのように書き換えてみると、KeyHelperでの切り換えはどうなりますでしょうか。

Posted by: noir on 2003年09月02日 23:27

ご面倒をおかけします。 ryo_hです。

a.setMainWidget( hello ) / t1e.rb
a.showMainWidget(hello) / t1e2.rb(t1e書き直し)
の両方をトライしました。
結果は、両方"t1e"&"t1e2"とも同じです。 切り替わりません。
qcop QPE...後に一瞬全画面表示のt1eが見えますが、すぐに"しばらくお待ちください"の全画面白で上書きされてしまいます(ように見えます)。
(t1eだとkeyHelperがうまく働きません。"qcop QPE.."のキーボード切り換えを行いました。)
(example/actionで行っていました。 a.showMainWidget(mw)が使われています。)

inputスタイル(横画面)ではなくviewスタイルでしたか?縦画面でもトライしました。
操作はスタイラス&タイプライタで行いました。
結果は横画面と変わりません。 切り替わりません。

でも、やはり"ruby rqgrep.rb"では、keyHelperだろうが"qcop QPE..."だろうがrqgrep画面と起動したterminal画面がきれいに切り替わります。

どなたかSL-C760で確認していただけるとありがたいのですが(私の設定不備?)。

Posted by: ryo_h on 2003年09月03日 12:08

ひょっとしたら、rqgrepではメインウィジェットがQMainWindowのサブクラスなのが効いているのかもしれません。

examples/application_ruby/application.rb のほうはどうですか?

Posted by: noir on 2003年09月03日 14:37

うっ、examples/actionも同じくQMainWindowですね。
なぜだろう…。

Posted by: noir on 2003年09月03日 15:32

Kuro-san、こんばんは。 ryo_hです。

オリジナルRQGrepのソースを変えてみました。
(大文字小文字は区別せずに)"RQGrep"をすべて"RQG"に代えました。
ファイル名も"rqg.rb"に変更。
ruby rqg.rb で、他と同じくターミナルとの切り換えがうまくいきません。
オリジナルでのruby rqgrep.rbのみが切り替わります。
ソース変更方法は何かミスしてますでしょうか。

私のC760では切り替わらないのが普通で、切り替わるrqgrep.rbがむしろ特殊のように思えてきました。

Posted by: ryo_h on 2003年09月06日 20:27

いちどipkをインストールして、そのあとアンインストールされているんですよね。
完全にアンインストールされていないのかもしれません。「ソフトウェアの追加/削除」でランチャーに登録された情報が残っていて、それが影響しているのではないでしょうか。

/home/QtPalmtop/apps/Applications/rqgrep.desktop
が残っていればそれを削除して、
qcop QPE/System "linkChanged(QString)'
を実行してからだとどうなるでしょうか。

Posted by: noir on 2003年09月07日 01:57

ryo_hです。

desktopはありません。
qcop QPE/System 'linkChanged(QString)'
しました。
状況、変わらずです。

Posted by: Anonymous on 2003年09月07日 11:51

スクリプト実行の切り替えについては、Ruby/Qte普及委員会:質問掲示板 のほうでつづきをやりましょう。

Posted by: noir on 2003年09月11日 10:38

ryo_hです。
Kuro-san、ご存知のとおりです。
私の設定の悪さではない(だろう)と一安心しています。
RubyはまだあきらめずにKuro-sanのrqgrepのscriptを勉強しています。rqgrep_script勉強教室などを講義していただければありがたいなどと勝手に思ってもいます。
今後もよろしくお願い致します。

noirさん、よろしくお願い致します。

Posted by: ryo_h on 2003年09月12日 11:58

Ruby/Qte 0.5で動かしてみたところ、undefined method `new' for Qte::QGridLayout:Class (NoMethodError) というエラーでとまってしまいます。

Posted by: noir on 2003年09月16日 08:36

Ruby/Qte 0.5.1では正常に起動できます。hdkさん、ありがとうございます。

Posted by: noir on 2003年09月18日 07:03

ZEditor 1.3.1が、qcopメッセージで指定行番号ジャンプできるようになったそうです。

RQGrep::ExternalEditor#invoke に、次のコードを加えれば、検索にマッチした行にジャンプしてくれるかもしれません(未確認)。

def invoke(mdata)
env = QCopEnvelope.new("QPE/System", "execute(QString, QString)")
env << QString.new(progname) << QString::fromUtf8(mdata.filename)
env = nil
GC.start
env = QCopEnvelope.new("QPE/Application/zeditor", "jumpTo(int)")
env << mdata.lnumber
env = nil
GC.start
end

もしかしたら即値のintが渡せなかったかもしれないので、その場合には、
system("qcop QPE/Application/zeditor 'jumpTo(int)' " + mdata.lnumber.to_s)
と書けばいいでしょう。

Posted by: noir on 2003年10月06日 00:53

ごぶさたしております。

ZEDITORで検索にマッチした行にジャンプ・・を試みましたが、うまく動いてくれません。
やり方が間違っているかも知れませんが、system("qcop ・・・をどこにいれてよいのか分かりません。
(初歩的な質問ですみません)

>>def invoke(mdata)
env = QCopEnvelope.new・・・
は新しいコードに差し替えてあります。

Posted by: マツイ on 2004年02月01日 10:21

SLC750上で使用しています。たいへん重宝しています。

教えていただきたいのですが、検索結果の表示で、/home以下、ファイルまでのフルパス表示を、非表示にすることは可能でしょうか?

よろしくお願いします。

Posted by: asahina on 2004年02月01日 15:40

マツイさん、こんにちは。
私も ZEditor 2.0.1 で試してみましたが、ダメでした。

def invoke(mdata)
env = Qpe::QCopEnvelope.new("QPE/System", "execute(QString,QString)")
env << QString.new(progname) << QString::fromUtf8(mdata.filename)
env = nil
GC.start
system("qcop QPE/Application/zeditor 'JumpTo(int)' " + mdata.lnumber.to_s)
end

のようなコード (jumpToではなくJumpToでした) でやってみたのですが、該当行へのジャンプは起こりませんでした。

どうもよくわからないので、少し時間をください。

Posted by: noir on 2004年02月02日 08:41

asahinaさん、はじめまして。
検索結果のファイル名表示ですが、これを非表示にするのは今のコードではちょっと難しいです。

というのは、検索結果を内部表現では記憶しておらず、ファイル名:行番号:行内容 という形式で表示した文字列を再度分解して、それをもとにエディタを起動する、という手抜きをしているからです。

検索結果データの扱いと、リスト表示のところを改変すればなんとかなりそうです (ただ、そのためにメモリ不足になるおそれが出てくるのが心配です)。しばらくお待ちください。

Posted by: noir on 2004年02月02日 08:52

修正されたコードでちょっとやって見ました。
検索されたファイル名を3回ぐらいEnterキーを押せば、該当行へジャンプします。
少々、画面が乱れますが・・。

Posted by: マツイ on 2004年02月02日 10:13

ZEditorが起動済みか、高速起動がオンになっている場合は、ときどき該当行にジャンプできるみたいですね。

inueさんのTTextReaderが参考になりそうなので、ソースを読んでみます。

Posted by: noir on 2004年02月02日 18:35

asahinaと申します。

早速のご回答、有難うございます。

現在の形式でも、充分に役立つ、大変有益なプログラムです。
もちろん、お尋ねした点が可能になると嬉しいのですが、このまま使用を続けさせていただきます。

ありがとうございました。

Posted by: asahina on 2004年02月03日 21:09

ついに、FileLaunch
http://www2.gol.com/users/ikezawa/zaurus/FileLaunch.html
で、ファイルの中身で検索ができるようになってますね。
いやーこれでようやくお役御免になれました。

Posted by: noir on 2004年02月27日 18:58

FileLaunchで、テキスト検索が自分には少々敷居が高すぎるせいか、思うように動いてくれません。
場違いだとわかっておりますが、設定等、差し支えなければ、教えてくださいませ。
Document/Text_Files内の文字列データを検索するのが目的です。
以下のアプリをインストールしております。

FileLaunch 0.3.1-2
qshdlg 0.5.5.1
sudo-1.6.3p7

Posted by: Anonymous on 2004年02月28日 19:10

onさん、こんにちは。

私もようやくFileLaunchをSL-A300にインストールして「拡張ファイル検索」(fl_exfind.sh) を試してみました。が、うまく動きませんでした。

原因は、fl_exfind.sh スクリプトで呼び出している dirnameコマンドがA300には入っていないためだろうと思います。

onさんもA300ユーザーですか?

作者のinueさんの掲示板でも質問してみてはいかがでしょうか。

Posted by: noir on 2004年03月02日 09:56

FileLaunchでのgrep、結局私は難しくて挫折してしまいましたが、
jojo3さんが GUI Grep を公開。こちらは簡単そうです。
http://www.urban.ne.jp/home/kanemori/index.html

Posted by: noir on 2004年06月14日 18:09
Post a comment

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?