
單詞量小,閱讀或編輯文檔常查單詞。
打開瀏覽器,輸入,查詞,再從網(wǎng)頁內(nèi)容里挑自己需要的部分。
想聽單詞讀音,得看網(wǎng)絡(luò)狀況,有時等好幾秒也不一定聽得到。
在編輯文檔的過程中,難免會去做其他事,得切換窗口,麻煩。
于是我就想,有沒有這樣的編輯器:
- 支持 Markdown 語法高亮。
- 能有 shell 窗口來操作電腦。
- 能查單詞,有大概的翻譯即可。
- 單詞真人語音發(fā)聲。
答案是沒有。(或許是我沒找到,2015 年 05 月 13 日。)
混跡碼農(nóng)圈多年的呵呵俠表示不服,哥想去試試,看能不能搞出個能編輯能高亮能查詞能發(fā)聲的小東西。
需求分析
- 語法高亮
- shell 窗口
- 簡單查詞
- 人聲單詞
解決思路
- 編輯器 gedit 可以有語法高亮。
- 編輯器 gedit 可以有 shell 窗口。
- 調(diào)用網(wǎng)絡(luò)詞典的 API,在 shell 里查單詞。
- 搞個單詞音頻庫,通過命令行播放人聲單詞。
咦,貌似問題可以解決哎!
折騰 gedit
Ubuntu 自帶 gedit,新版本 Markdown 高亮已經(jīng)有了。
嗯,我去找找 Terminal 的插件。
安裝 gedit 插件
$ sudo apt-get install gedit-plugins
開啟 Terminal
1 在 gedit 窗口里依次點擊 Edit -> Preferences -> Plugins,勾選 Embedded Terminal 插件。

2 在 gedit 窗口里依次點擊 View -> Bottom Panel,選擇 Terminal 窗口。

以上,語法高亮和 shell 窗口都有了,繼續(xù)努力!
用有道 API 查詞
經(jīng)過一番考察,決定用有道 API 來查單詞。
先 申請 key

得到 key 后用 HTTP GET 方法查詞
如查 precious 這個詞:
$ http -b get "http://fanyi.youdao.com/openapi.do?keyfrom=nlz137&key=1042337191&type=data&doctype=json&version=1.1&q=precious"
會得到的是服務(wù)器返回的 JSON 數(shù)據(jù),多且亂,得解析一下抽取自己想要的內(nèi)容。
太陽底下沒有新鮮事兒,肯定有人已經(jīng)造過輪子了。
果然,在 全球最大同性別程序員社交網(wǎng)站 找到了 命令行 JSON 處理工具。
下載,解壓,改屬性,丟進 ~/bin 里待執(zhí)行。
$ chmod 755 jq-linux-x86_64-static
$ cp jq-linux-x86_64-static ~/bin/clijq
現(xiàn)在能提取到單詞的基本釋譯了。
$ http get "http://fanyi.youdao.com/openapi.do?keyfrom=nlz137&key=1042337191&type=data&doctype=json&version=1.1&q=precious" | clijq '.basic.explains'
[
"adj. 寶貴的;珍貴的;矯揉造作的",
"n. (Precious)人名;(英)普雷舍斯,普雷舍絲(女名)"
]
每次都輸入一長串是不是很「二」?
莫慌,查詞命令先放著,最后會整合到腳本里。
單詞真人發(fā)音
又不是「二代」哪有錢雇小妹來現(xiàn)場發(fā)音,用人聲語音庫嘛,網(wǎng)上一搜就找到了。
設(shè)置 142000 單詞語音庫
下載,解壓,然后人聲單詞就安靜地躺在硬盤里了。
$ ls ~/Music/voice/
a b c d e f g h i j k l m n o p q r s t u v w x y z
安裝 SoX 播放器
$ sudo apt-get install sox
$ sudo apt-get install sox libsox-fmt-all
安裝完成即可播放音頻,執(zhí)行以下命令聽個聲音先。
$ play /home/han/Music/voice/p/precious.wav
還是老規(guī)矩,播放命令先放著,最后會整合到腳本里的。
接下來得去看看 Shell 編程基礎(chǔ),很久沒弄 bash 了,都忘了……
寫個 say 腳本
$ touch ~/bin/say
$ chmod 755 ~/bin/say
vim ~/bin/say 寫腳本內(nèi)容如下:
#! /bin/bash
if [ $# -ne 1 ]; then
echo "One word at a time."
else
WORD=$1
FILENAME="${WORD}.wav"
VOICEDIR="/home/han/Music/voice/"
FILE=$(find ${VOICEDIR} -iname ${FILENAME})
play ${FILE} 1> /dev/null 2>&1
fi
if [ $? == 0 ]; then
DATE=`date +%Y'-'%m'-'%d'_'%I':'%M':'%S`
LOG="/home/han/Music/say.log"
echo -e "${DATE}\n$1\n" >> $LOG &
http -b get "http://fanyi.youdao.com/openapi.do?keyfrom=nlz137&key=1042337191&type=data&doctype=json&version=1.1&q=$1" | clijq '.basic.explains'
else
echo "Vocabulary not found."
fi
大功告成
來來來,咱們來 say hello :
$ say hello

什么,為什么是 say? 因為 MBP 里有 say,任性咯。
對于習慣 Vim 的同學,稍加改動就會更順手好用。
方法我就不寫了,Vimer 都愛自己折騰 2333