BV1AL 之無所不記

2012-10-01

用shell script 寫個輸入法

最近使用mk802 一開始是遇到microSD 速度的問題, 以致在量稍微大一點的寫入時,
會把系統檔案弄亂, 所以先不裝Xorg.

因為用debootstrap 做出來的初步系統不大, 要裝Xorg 的話會depend 很多檔案, 在
apt-get 進行安裝時會從幾十到上百MB, 這在Class 4 卡上面就會出亂子(屨試不爽).

另方面也是MK802 只能以framebuffer 方式跑 xserver-xorg-video-fbdev, 但是
framebuffer 之下的效率是不好的, 所以不如只用text mode 回到石器時代體驗
另一種人生 XD (要說我自虐也可以啦).

由於自己compile 的kernel 有支援fbcon, 因此只要跑fbterm 就可以顯示CJK,
這樣在沒有Xorg 環境的石器時代下, 己經可以有效閱讀漢字了, 就算只能用w3m 的
web-browser 也能夠收發gmail, 所以原始人在text mode 下也可以跟現代人通訊,
也能生存了, 只差最後一里路, 就是漢字的輸入法.

目前現成的漢字輸入法能用於UTF 環境的只有ucimf, 但是試了一下debian 裡的ucimf,
才打幾個字就crash 掉, 幾乎等同不能用, 這樣好像非裝Xorg 不可.

一開始想是不是可以從現有輸入法的table(xxxx.cin)裡, grep漢字的拆碼, 瀘出所要
的漢字出來再copy/paste, 不過這樣的人力耗費實在太多, 之後查閱tmux 的用法時,
發現它支援buffer copy/paste, 就是說可以利用tmux 來自動化.

tmux 幾乎可以說在text mode 下屬於必用的軟體, 這樣只要藉由tmux 的config 來
搭配grep 輸入法table 所產出的字串, 就可以自動把漢字copy/paste 到目的區,
這樣跟使用現成的漢字輸入法軟體幾乎相同.

開始試著寫一個shell script 來達到這個目的, 經過幾天慢慢修改, 終於完成與現有
Xorg 環境下輸入法主要功能相同的功能, 例如可以切換輸入法(注音table 還未完成)
以及可以打正出簡(只要用正體字的拆碼就可以打出簡體字).

S=輸入的一長串漢字的拆碼(英文字母中間有空白分隔,就像一般打倉頡那樣的打法)
  (例如:onf aj ym sbn ymy nn ene(你早上刷卡了沒))
for i in $S; do
   k=$(grep ^"$i " $CJKtable)
   if [ ${#k} -gt 0 ]; then # 這是有grep 出漢字
      j=$(echo -n $k|sed -e "s/$i //g" -e 's/ />/g')
      if [ ${#j} -gt 2 ]; then  # 如果grep 出超過一個以上的漢字
         再提示選字,再剪出所要的字
     echo -n $j; read J
     SELECT=$(echo -n $j|cut -d'>' -f $J)
     STR="${STR}$SELECT"
      else  # 只瀘出一個漢字的話
         就以grep 出來的漢字
   else
      如果沒有grep 出漢字, 那它就將原字串貼出(例如漢英混打)

最後將泣出的漢字整句推進buffer 裡
echo -n "$STR"|tmux loadb -
再藉由tmux 自動貼到目標區
tmux paste-buffer -t top-left

這裡其實還有稍微要施工的就是輸入法的table, 讓同碼字減少.

致於Ctrl-space 的切換鍵就由tmux config 來定義
bind-key -n C-Space select-pane -l

而tmux 工作區要切出像是一大塊跟一小塊
bind-key -n F1 run \
"tmux split-window -v -p 9 ; tmux split-window -h -p 40; tmux select-pane -U"
(右下側區塊留做其它用途)

這樣一個沒有Xorg 環境的Linux 幾乎像一部悍馬車, 可以在各種地型行駛,
如果用在server(大都沒裝Xorg 吧?) 也是很方便的.

其實在framebuffer 環境下(就是沒跑fbterm 的環境), 利用w3m-img 就可以顯示
網頁裡的圖片, 原始人過的生活也不是太原始啦!!

標籤: ,

1 Comments:

張貼留言

<< Home