東西每次暫時放下了,儘管只是很短的一段時間,都好像重新去理解另一個人的記錄一樣,是不是記憶力開始衰退的跡象?
續上回, add_input() 傳回負值,表示 self.update_candidates() 也傳回否值 (add_input() 最後一行)。
還是不行,必須應用一些 debug 工具去提高效率: pdb
import pdb;
pdb.set_trace()
(when pgm encounters pdb.set_trace() it will start tracing)
彈出 (pdb)
- 'p': print [var]
- 'n': next
- 'l': list
- 'q': quit
- 'c': countinue
- 's': step in
- 'r': return
timechen119 @ #python.tw (freenode.net) 教了顯示行號的方法:
python -m trace -t --ignore-dir /usr/lib/python2.5 xxxdaemon.py
找到了更土法的方法,以 ibus 在 gcode 上的 dev guide 的步驟為依據。 在 consold 裏:
$ ibus-setup (先把 daemon 跑起來)
$ GTK_IM_MODULE=ibus gedit (在 gedit 上測試 ibus)
完成後在 console 殺掉進程:
$ killall python
(或者有更好的命令,殺 python 也許有殺掉的嫌疑 :P)
在 table.py 的任一處加入 print "xxxx" 就能得知到達那一行代碼。
請教了 ibus 作者 phuang ,在 terminal 運行:
$ ibus-daemon && ibus-ui-gtk && ibus-conf && ibus-engine-xxxx
或者 DBUS_DEBUG=true ibus-engine-table ,就會列出 dbus client 的 exception。
(那個 ‘四步曲’ 執行了,不過沒有東西發生。)
ibus-setup = ibus-daemon + ibus-conf + ibus-ui-gtk +ibus-x11 ?
用 ibus-setup -> GTK_IM_MODULE=ibus gedit 的方法加上 pdb.set_trace() 還是不行, gedit 會停在 set_trace() 的地方,不過 (pdb) 沒有在 console 出來,而是死當。
_update_ui() = _update_lookup_table() -> _update_preedit() -> _update_aux()
get_aux_strings() = get_input_chars()
get_input_chars() = self._chars[0] + self._chars[1]
能組字的會一直放在 self._chars[0] 直至不能組的會放在 self._chars[1] ,'*' 還是直接被 commit 。
ok 了,在 table_mode_process_key 裏抓 valid_char 裏加另一個 or 來抓 '*' ,再在 add_input() 裏再加個 elif 把 '*' 加到 self._chars[0] ,現在 '*' 出現在 aux 。
'*' 雖然在 aux ,但是被忽略:應該在以 self._chars[0] 呼叫 select_words 的地方加工:
當 '*' 在 self._chars[0] 的時候,用 select_words_wildcard() 而不是 select_words(),這之後也要改進成使用者選項之一。
... db 好像被弄爛了 ...