代码来自GNU readline and key bindings :
#include <stdio.h>
#include <readline/readline.h>
int my_cool_readline_func (int count, int key) {
printf ("key pressed: %d\n", key);
rl_on_new_line ();
return 0;
}
int main(void) {
rl_command_func_t my_cool_readline_func;
rl_bind_key ('\t', my_cool_readline_func);
rl_bind_key (27, my_cool_readline_func); /* ascii code for ESC */
rl_bind_keyseq ("\\C-a", my_cool_readline_func);
while (1) {
char *line = readline ("rl> ");
}
}
是否可以在 bash 命令行中使用这种自定义 readline 函数?
例如,我已经尝试过这些(当然,自定义函数可能要复杂得多):
bind '"\C-t" beginning-of-line shell-kill-word'
bind '"\C-t" beginning-of-line, shell-kill-word'
bind '"\C-t" beginning-of-line; shell-kill-word'
它们都不起作用。
最佳答案
我认为这种绑定(bind)是理解这是如何完成的关键:
"\C-x\"": "\"\"\C-b"
读取“当我按 Ctrl+X 然后按 ”
时,插入两个引号 (\"\"
) 并将光标向左移动一次 (\C-b
) 因此它最终位于两个双引号之间。
在 :
的右侧,您只能有一个 readline 函数或一个“宏”或一个 shell 函数。宏是一系列击键。
所以你需要做的就是将你想要的功能分配给按键,然后在宏中使用按键:
bind '"\C-t":"\C-a\ed"'
关于bash 命令行中的自定义 readline 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224657/