我翻了一下 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()這樣應該就能保證不管使用者的設定如何都能夠套用自己的keymap 才對。
{
rl_set_keymap(custom_keymap);
}
rl_pre_input_hook = reset_keymap;
沒有留言:
張貼留言