読者です 読者をやめる 読者になる 読者になる

$ service ssh0 start

from everything import *

キーワードを自動補完して入力できるweb検索ダイアログ【Python】【Gtk】

out-1_13-100_20140921211605e7d.gif

以前に,シェルスクリプトでZenityを使って,firefoxで検索を行う簡単なアプリケーションを作りました(便利な常用シェルスクリプト - web検索ダイアログfirefox-search.sh)が,今回はそれをPythonに移植したものを紹介します.Gtkのお勉強を兼ねて作りました.

全体的なコンセプトはシェルスクリプトで作った時と変わりませんが,今回は履歴を活用して,打った文字の自動補完をするように改良しました.

これはgi.repositoryのGtk.EntryCompletionを用いると簡単に実装できます.

gtk.EntryCompletion:

16.4. EntryCompletion Objects:

ただし,これはスペースごとに区切られた単語それぞれに対して変換を行うことができないため,Githubで見つけた

https://gist.github.com/evoL/1650115

をもとにして,スペースで区切られた単語ごとに変換を行うように,ルールを変更してやりました.evoLさんありがとうございます.ちなみに,上のサイトの50行目の

 # add the matching word

current_text = "%s %s" % (current_text, model[iter][0])

は削除する必要があります.これがあると,途中まで打って補完したキーワードが二重に入力されることになります.

("ubu"まで打って,"ubuntu"を選択すると"ubuntu ubuntu"と入力されてしまう)

また,今回はよりアプリケーションらしくするために,ファイルを分けて,設定は別ファイルで管理できるようにしてみました.全体の構成としては

- websearch.py

- websearch

- __init__.py

- config.py

- prediction.py

のようになっていて,ここのconfig.pyを書き換えることでさまざまなブラウザで使うことができ,またオプションで指定するサイトの変更や追加も簡単にできます.__init__.pyはモジュールとして扱うために必要なだけのファイルで,今回は中身は空です.バージョンチェックなんかはここで処理した方が良いようですね.

また,最近Gitの簡単な使い方を勉強したので,GitHubにコードをあげてみました.

http://github.com/ssh0/web_search

clone,forkして頂いてもOKです.

websearch.pyを実行すると,

Selection_005_20140921203310ded.png

のようなシンプルなエントリーボックスがでて,そして文字を入力していくと記事冒頭のような挙動をします.入力が完了したらEnterキーを押せば,config.pyで指定したブラウザで,新しいタブに検索結果が表示されます.

今後は,一般的なwebの検索バーのように,単語の関連度から関連する単語を予測して表示する機能をつけたいです.それからタイプミスが激しいので(今回こんなのを作ったのもそれが一つの理由),ミスしたものは削除するとかの機能もほしいですね.Google先生検索エンジンをそのまま借りる方法もありますが.それから,シェルの機能とかは簡単に実装できそうです.使い方としてはファイル検索とかでしょうか?Ubuntuのデスクトップ環境であるUnityのレンズでも同じことができますが,重くなってしまうので今は機能を切っているんですよね.locateを実行するだけの簡単なものだったら,こっちに組み込んだほうが軽くて快適かもしれません.

ともかく,今まで役に立っていなかった自分の検索履歴が,役に立つ日がやってきたというわけです.

それに,Gtkでも何か作れそうだなぁという感覚もついてきました.今後もいろいろ触ってみたいですね.

最後にコードを晒します.解説は,コメントを見ればだいたい何やってるか解ると思います.それから上にあげた公式のreferenceなんかを参考にしてください.