bash 命令行中的自定义 readline 函数?

标签 c bash readline

代码来自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"'

另请参阅:Complex keybinding in bash

关于bash 命令行中的自定义 readline 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224657/

相关文章:

c - 用 C 序列化包

c - 成员方法有 C 宏吗?

python - 在 Python 中读取分布在多个输入行的记录

R 语言 - 等待用户输入 scan 或 readline

c++ - 获取Windows版本的正确方法

bash - 从另一个目录获取 bash 文件并返回当前目录的别名

python - 在 python 中连接 Bash 命令

linux - 检查视频文件是否有字幕

java - BufferedReader 如何跟踪已读取的行?

c# - float* 从 C 到 C#