星期一, 8月 03, 2009

custom keymap in readline

readline 的功能強大,也包括了很好用的 vi mode ,在 .inputrc 裡面就可以設定,不過這是使用者自己的設定,若程式想要直接指定,那就要設定 keymap 了。
我翻了一下 readline 的 原始碼,發現使用者若是設定了 vi mode (set editing-mode vi) 那麼程式自訂的 keymap 會失效,不知道這算不算 bug,因為在初始化的時候會看如果有設定 vi-mode 就會把keymap 覆蓋掉變成 vi_insertion_keymap。
所以要嘛就把所有的設定全部綁在 vi_insertion_keymap, vi_movement_keymap 上面,不然就是設定 rl_pre_input_hook 在使用者之前再把自訂 keymap 加載上去。我是選擇後者.. 實作起來大概就是這樣:
int reset_keymap()
{
  rl_set_keymap(custom_keymap);
}
rl_pre_input_hook = reset_keymap;
這樣應該就能保證不管使用者的設定如何都能夠套用自己的keymap 才對。

沒有留言: