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

$ service ssh0 start

from everything import *

便利な常用シェルスクリプト - web検索ダイアログfirefox-search.sh

今回は,僕が毎日利用しているシェルスクリプトの紹介をしたいと思います.これがないと,本当に困るという種類のスクリプトで,確認したところ,日に最低5回は使っているみたいです.最後に全部載せておきますので,自由に改変して使ってもらって結構です(とは言ったものの,ターゲットは誰なんだ・・・?).

さて,ではまずこのスクリプトの名称とコンセプトから.

名前はfirefox-search.shです.その名の通り,firefoxを立ち上げて検索するシェルスクリプトです.

次にコンセプト.

皆さんがパソコンを立ち上げてすることと言ったら何でしょうか?ネットサーフィン?プログラミング?それともレポート作成でしょうか.こうしたことをするときに,webで検索するという場面が多いはずです.その時にどういう操作をしていますか?次のような操作が一般的ではないでしょうか.

1. ブラウザにフォーカス(または立ち上げる)

2. Ctrl+LなりCtrl+Kなり,マウスでクリックするなりで検索用のダイアログに入力,Enter

3. GoogleとかBingで検索が開始され,

4. 結果が出るまで待ち,(長い!)

4. その結果が表示され,

5. その検索結果リストから,めぼしいものをクリック(また待つ!)

僕にはこれが非常に面倒くさい.特に,特定のサイト,たとえばCiniiWikipediaYoutubeなどに欲しい結果があるのがわかっていているのに,わざわざGoogle経由でクリックするのが,とんでもなく面倒でした.ということで,シェルスクリプトの練習もかね,また勉強の効率化のために,キーボードショートカットで一発で立ち上がり,オプションを入力することで特定のサイトの検索結果に飛ぶようなスクリプトを書こうと思ったわけです.また,このスクリプトGUIで動くものでなくては効果がありません.端末にいちいちフォーカスして・・・とやっていたら,結局面倒くさいままです.なのでGUIは譲れないポイントです.

ということで,コンセプトは

・ キーボードショートカットで一発起動

・ オプションつけると違うサイトに

GUIで簡単操作

となり,使うときは

1. ショートカットを押す

2. ダイアログに検索キーワードとオプションを入力,Enter

3. 検索結果が新しいタブで(またはブラウザを起動して)表示

4. 3.と同時進行でブラウザにフォーカス

これは便利なはずですよ!

作ってみた

コンセプトも決まったところで,GUIについていろいろ(イライラしながら笑)調べていたら,ubuntuではZenityというのが使えることが分かりました.これは,GTKを用いて様々なダイアログを表示するもので,エントリーボックスやチェックボタンなどを簡単に作ることができます.まずはこれらの仕様を調べまして,いくつか参考になるサイトを見つけました.

Zenity マニュアル:

13.9.1. Zenityの各ダイアログごとの説明と使用例 - まとめドキュメント - 試験運用中なLinux備忘録・別館:

これらのサイトから,エントリーボックスを表示して,そこに入力した文字列を取り出すことができるようになりました.

bun=`zenity --entry \

--title="Firefox-search" \

--text="Search or enter address" \

--window-icon=/home/yuzugosho/.icons/Faenza-Dark/actions/scalable/edit-find.svg`

のようにすれば,エントリーダイアログが表示されて,そこに入力した文字列がbunに代入されます.また,--window-iconに使いたいアイコンのパスを書いておくことで,そのアイコンを表示させることができます.

次にこれらをどのように処理するかということですが,オプションで場合分け,オプションを取り除いたものを検索に使えばいいことくらいは分かります.全くの素人だったので,場合分けの方法も調べまして,

case ${bun} in

-[wW]*) # Wikipediaで検索

何か処理

;;

*) # Google検索

何か処理

;;

esac

のようにすれば良いことが分かりました.最後に実際にこれらのキーワードをリンクの適切な位置に放り込んでfirefoxを開くことが必要です.これは端末からは
firefox -new-tab アドレス
とすれば良いことがわかっていたので,この"アドレス"の部分に,それぞれの場合についてのアドレスを渡せばいいだけであることが分かります.ということで簡単なものは以下のように作ることができます.
bun=`zenity --entry \

--title="Firefox-search" \

--text="Search or enter address" \

--window-icon=/home/yuzugosho/.icons/Faenza-Dark/actions/scalable/edit-find.svg`

if [ $? -ne 0 ] || [ -z "$bun" ]; then

exit 0

else

case ${bun} in

-[wW]*) # Wikipediaで検索

pattern="https://ja.wikipedia.org/wiki/${bun#-[wW] }"

;;

*) # Google検索

pattern="https://www.google.co.jp/#q=$bun"

;;

esac

firefox -new-tab "$pattern"

fi

ここで,
if [ $? -ne 0 ] || [ -z "$bun" ]; then

exit 0

の部分は,キャンセルボタンを押したとき,またはエントリーが空のときには処理を行わないようにするために場合分けしてあるものです.

一応動作するものはできたのですが,これではせっかくのGoogle検索の履歴機能が無駄になってしまいます.あれは便利なものです.ということで,検索したキーワードは,自分のローカルファイルに上書きしていくことにしました.こうしておけば,好きなときに自分の検索キーワードを振り返ることもできますし,あとで追加しようと思っている,予測変換機能のデータベースにもなります.ちなみに,現在僕のlog.txtには,使い始めた2014年2月14日から,2014年8月8日までの171日間で1816個の検索履歴が保存されていました.平均して1日10回ほど検索していることになりますね.改めて計算してみると,本当に頻繁に使っていることが分かります.

それから,今は研究室のパソコンと,自分のノートパソコンで,Dropboxを使って同期しているので,Dropboxフォルダ内のlog.txtに記録するようにしています.これで,どちらのPCから検索したキーワードも,一つのファイルで管理できるようになっています.

あとは,よく検索するサイトにオプションを割り当て,仕上げにキーボードショートカットなどに割り当てれば,便利な検索ダイアログの完成です.今のところ僕が登録しているのは,Wikipediaニコニコ動画YoutubeGoogle画像検索,Yahooリアルタイム検索,Google Scholar検索,Weblio辞書,Google検索,cinii検索です.あと,httpで始まるときはそのサイトに直接接続するようにしました.

キーボードショートカットの設定は,まずこのファイルを,ホームディレクトリ直下のbinディレクトリ内に保存し,

sudo chmod u+x firefox-search.sh
として実行権限をつけておいて,設定>キーボードから,ショートカットのタブを開き,カスタムショートカットの欄で好きなキーに割り当てれば完了です.僕はCtrl+Alt+Fに割り当てて使っています.

使用例

Ctrl+Alt+Fを押すと,,,

Selection_001.png

のようにダイアログが現れ,キーワードを入れてEnterキーを押すと,CPUが動き出す感じがします.

おもむろにFirefoxを見ると,

Python numpy - Google 検索 - Mozilla Firefox_003

のように表示されます.

では,最後にスクリプトの全体を晒しておしまいにしたいと思います.フォルダのパスなど,適宜自分で変更する必要はありますが,本当にこのスクリプトでさっと調べ物ができるようになり,助かっているので,ぜひ使ってみてください.アドバイスなどあれば,コメントいただけると幸いです.

#!/bin/sh

# firefox-search 検索キーワードとオプションからfirefoxを起動するシェルスクリプト

bun=`zenity --entry \

--title="Firefox-search" \

--text="Search or enter address" \

--window-icon=/home/yuzugosho/.icons/Faenza-Dark/actions/scalable/edit-find.svg`

if [ $? -ne 0 ] || [ -z "$bun" ]; then

exit 0

else

if [ "$bun" = "-c" ] ; then

cinii.sh

else

hiduke=`date +%F_%T`

echo "$hiduke $bun" >> /home/yuzugosho/Dropbox/log.txt

case ${bun} in

-[wW]*) # Wikipediaで検索

pattern="https://ja.wikipedia.org/wiki/${bun#-[wW] }"

;;

-[nN]*) # ニコニコ動画で検索

pattern="http://www.nicovideo.jp/search/${bun#-[nN] }"

;;

-[yY]*) # Youtubeで検索

pattern="http://www.youtube.com/results?search_query=${bun#-[yY] }&sm=3"

;;

-[pP]*) # Google画像検索

pattern="https://www.google.com/search?hl=ja&site=imghp&tbm=isch&source=hp&q=${bun#-[pP]}&oq=${bun#-[pP] }"

;;

-rt*) # Yahooリアルタイム検索

pattern="http://realtime.search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=&p=${bun#-rt }"

;;

-sc*) # Google Scholar検索

pattern="http://scholar.google.co.jp/scholar?lr=&q=${bun#-sc }&hl=ja&as_sdt=0,5&as_vis=1"

;;

-[tT]*) # 翻訳

pattern="http://ejje.weblio.jp/content/${bun#-[tT] }"

;;

http*) # 直接URL貼り付け

pattern="$bun"

;;

*) # Google検索

pattern="https://www.google.co.jp/#q=$bun"

;;

esac

firefox -new-tab "$pattern"

fi

fi

いや,探せばこれよりいいフリーソフトとかあるのかもしれないけど,でも,自分で書くのって大事よね.好きに拡張できるし.