readline是linux下常用的CLI交互式开源库,readline可以实现命令编辑,自动命令补全,历史命令搜索等人性化的交互方式。
系统实现了rl_filename_completion_function和rl_username_completion_function自动补全,实现自定义命令的自动补全需要实现rl_attemped_completion_function函数。
工作原理:
1.通过rl_complete()调用rl_completion_matches()来产生补全字符。
2.rl_completion_matches() 使用程序提供的generator函数产生补全字符。
3.generator函数会在rl_completion_matches()中不断调用,每次返回一个字符串。
Generator( const char *text,int state ) 第一个参数为当前输入字符,state为调用次数。第一次调用返回补全字符串,第二次必须返回0,终止匹配过程,否则会陷入死循环(不知API为何如此设计)。
具体补全参见:$(READLINE)/examples/fileman.c
调用代码:
initialize_readline() rl_attempted_completion_function = fileman_completion; fileman_comletion() matches = rl_completion_matches (text, command_generator);
// 命令补全 char *command_generator ( const char *text, int state ) { static int list_index, len; char *name; // 第一次查找 if (!state) { list_index = 0; // 注:该list_index一定要设置为static,下次再调用时无法找到name而结束匹配过程 len = strlen (text); } // 遍历命令列表 while (name = commands[list_index].name) { list_index++; // 如部分匹配,则返回该name if (strncmp (name, text, len) == 0) { return dupstr(name); } } // 无名称匹配,找到NULL return ((char *)NULL); }
相关推荐
IPython 是一个增强的Python交互式 shell,它利用了 `readline` 库来提供更好的交互体验,如命令补全、历史记录等。如果没有 `readline`,IPython 的交互性将会大打折扣。 4. **解决yum安装问题**: 如果在CentOS...
在Python开发环境中,readline模块和Tab补全是提高命令行交互效率的重要工具。尤其是对于习惯使用Unix/Linux shell的开发者,在Windows环境下也能获得类似的体验是非常重要的。本文详细介绍了在Windows系统中安装...
3. **命令补全**:readline库支持命令和文件名的自动补全功能,用户只需按下Tab键,就可以自动完成命令或路径,大大提高了输入效率。 4. **宏定义**:用户可以通过宏定义来组合一系列操作,例如定义一个宏来快速执行...
3. **补全功能**:Go-Readline提供了命令补全的功能,允许用户通过tab键自动完成部分输入,这在处理大量命令或路径时非常实用,减少了输入错误的可能性。 4. **键盘快捷键**:除了基本的上下键和Tab键,Go-Readline...
3. **补全功能**:readline支持命令和参数的自动补全,只需按下Tab键,就可以列出可能的选项,减少了手动输入的工作量。 4. **自定义绑定**:用户可以根据个人习惯自定义键盘快捷键,或者编写宏来执行一系列操作,...
- **自动补全**:支持基于文件名、命令名或自定义函数的命令补全功能,只需按下Tab键即可完成补全,减少误输入的可能性。 - **宏定义和键绑定**:用户可以自定义宏,将一系列操作绑定到特定的按键上,提高工作效率...
2. **补全功能**:如果程序提供了一组可能的命令或选项,`readline`可以根据用户输入的部分内容自动完成整个单词,提高输入效率。 3. **编辑功能**:用户可以通过各种编辑快捷键(如Ctrl+U清空输入,Ctrl+W删除当前...
可以使用前面提到的 `python -2 -m pip install pyreadline` 命令来指定安装 Python 2.7 的 Readline 版本。 2. **提示 readline 不是 DLL %1**: 如果遇到这样的错误提示,可能是因为下载了未经正确编译的 ...
3. **补全功能**:`Readline`支持命令和文件名的自动补全,只需用户输入部分命令或文件名,然后按下Tab键,`Readline`会尝试完成剩余的部分。这对于频繁使用长命令或在目录结构复杂的系统中非常有用。 4. **绑定与...
总之,通过结合`readline`、`rlcompleter`和`atexit`模块,以及创建自定义的启动文件,我们可以为Python命令行界面提供Tab自动补全和历史命令管理,提升开发和交互体验。这在日常编程和调试过程中非常实用,尤其对于...
- **历史记录**:`readline`保存了用户输入的命令历史,方便用户通过上/下箭头键快速访问和重复使用历史命令。 - **自动补全**:用户可以通过Tab键进行命令或文件名的自动补全,极大地提高了输入效率。 - **宏...
`readline`还支持自定义补全功能,允许用户根据输入的部分字符串自动完成命令或文件名。 在`readline`源代码中,开发者可以学习到如何管理用户输入、处理终端I/O、实现复杂的行编辑功能,以及如何与程序的其他部分...
3. **补全功能**:当用户在输入命令时,可以使用Tab键进行自动补全,大大减少了输入错误并节省了时间。 4. **自定义绑定**:用户或开发者可以自定义快捷键绑定,以实现特定的功能,提高工作效率。 5. **宏定义**:...
readline库是Unix/Linux系统中广泛使用的命令行交互工具,它为应用程序提供了一套强大的输入处理功能,如历史记录、编辑功能和自动补全等。本文将详细探讨readline-6.3版本的实现原理和关键特性,帮助读者深入理解这...
- **补全功能**:自动补全命令、文件名或变量,减少了输入错误。 在编程中,`readline` 提供了 API,可以让开发者集成到自己的应用程序中,提供这些高级的命令行交互特性。它通常与其他库一起使用,比如 `ncurses`...
首先,Windows系统默认的Python解释器并不自带`readline`模块,这是一个在Unix/Linux系统中广泛使用的命令行交互工具,提供了包括自动补全在内的诸多功能。为了在Windows上获得类似的功能,我们需要借助第三方库`...
readline库是GNU项目的一个组件,提供了命令行编辑功能,包括命令历史、光标移动、补全等功能。很多Linux命令行工具如bash、python等都使用了readline库。当rlwrap与readline结合使用时,可以进一步增强sqlplus的...
- **补全功能**:可以实现基于文件名、命令、变量等的自动补全。 - **宏定义**:允许用户定义和保存命令序列,方便重复执行。 - **绑定功能**:用户可以自定义键盘绑定,改变默认的命令行操作方式。 - **插件支持**...
3. **补全功能**:Readline支持命令或路径的自动补全,提高了用户输入的效率。 4. **行编辑**:用户可以使用一系列键盘快捷键(如Ctrl+U清空当前行,Ctrl+K剪切从光标到行尾的部分)来编辑正在输入的行。 5. **...
2. **命令补全**:Term-ReadLine-Gnu支持自动完成功能,当用户开始输入SQL命令或数据库对象名时,它可以提供匹配的建议,减少输入错误。 3. **多行编辑**:用户可以在同一行内输入多行SQL语句,这对于编写复杂的...