qutebrowser はアドオンが自由に追加できないのがあれだけど、spawn
コマンドで簡単なものなら割とスクリプトで対応できるのが良い点
今回はこの記事読んでそういえばポップアップの辞書ほしいな、と思ったので作ってみた
とはいってもポップアップの仕方とか Javascript とかわからないし、ものすごく単純なものだけど
用意するもの
先程の記事にもあったように ejdic-hand を使わせていただきます
まああんまり詳細なものだと表示しきれるか怪しいし、こんなもんでいいかなって…
ejdic-hand は(ワード)(タブ)(説明)のように 1 行で 1 つのワードが書かれた txt ファイルです
なので python で読み込んでそのまま検索させます
import os
import sys
word = sys.argv[1].lower()
us_dir = os.environ['HOME']+'/.local/share/qutebrowser/userscripts'
with open(us_dir+'/ejdict/EJDict/src/ejdic-hand-utf8.txt') as lines:
for line in lines:
if line.startswith(word+'\t'):
print(line)
sys.exit(0)
これだけだと少し使いづらいので、さらに追記します
with open(us_dir+'/ejdict/EJDict/src/ejdic-hand-utf8.txt') as lines:
for line in lines:
# 複数形, 三人称単数形
if word[-1] == 's':
if line.startswith(word[:-1]+'\t'):
print(line)
break
if word[-2:] == 'es':
if line.startswith(word[:-2]+'\t'):
print(line)
break
# 進行形
if word[-3:] == 'ing':
if line.startswith(word[:-3]+'\t'):
print(line)
break
# 過去形
if word[-1] == 'd':
if line.startswith(word[:-1]+'\t'):
print(line)
break
if word[-2:] == 'ed':
if line.startswith(word[:-2]+'\t'):
print(line)
break
else:
sys.exit(1)
まあ全てはカバーできないですが、基本的な変化をするワードについてはカバーできているはずです
そしてこれをシェルスクリプトを通して実行します
シェルスクリプトを通す理由は、qutebrowser で userscript を実行した際に使用できる変数を python スクリプト内から利用する方法がわからなかったからです…
#!/bin/bash
us_dir="$HOME/.local/share/qutebrowser/userscripts"
if [ $1 = "ejdict" ]; then
word='"'$(python $us_dir/ejdict/ejdict.py $QUTE_SELECTED_TEXT)'"'
if [ $? -eq 0 ]; then
echo "message-info $word" >> "$QUTE_FIFO"
else
echo "message-error 'Cannot find \"$QUTE_SELECTED_TEXT\" in a dictionary'" >> "$QUTE_FIFO"
fi
fi
$QUTE_SELECTED_TEXT
は選択したテキストを指します
これで選択したワードを python スクリプトに渡し、返り値を qutebrowser のmessage-info
を通して表示させます
こんな感じに表示されます
message-info
で表示する都合上、デフォルトの 2000ms では早すぎるはずなので 5000ms に変更しました
あとはバインドで e かなにかに設定すると、テキスト選択してキー押すだけで写真のように日本語訳が下に表示されるようになります
使った感想としては、オフラインだからかかなり高速ですが辞書が弱いからかヒットしない語句もちらほら見受けられるのがちょっと気になりました