`
tcspecial
  • 浏览: 910411 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

readline 命令补全

阅读更多

    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);
}

 

 

 

 

分享到:
评论

相关推荐

    readline-6.2.4.1.tar.gz

    IPython 是一个增强的Python交互式 shell,它利用了 `readline` 库来提供更好的交互体验,如命令补全、历史记录等。如果没有 `readline`,IPython 的交互性将会大打折扣。 4. **解决yum安装问题**: 如果在CentOS...

    Python (Win)readline和tab补全的安装方法

    在Python开发环境中,readline模块和Tab补全是提高命令行交互效率的重要工具。尤其是对于习惯使用Unix/Linux shell的开发者,在Windows环境下也能获得类似的体验是非常重要的。本文详细介绍了在Windows系统中安装...

    readline-6.2.tar.gz

    3. **命令补全**:readline库支持命令和文件名的自动补全功能,用户只需按下Tab键,就可以自动完成命令或路径,大大提高了输入效率。 4. **宏定义**:用户可以通过宏定义来组合一系列操作,例如定义一个宏来快速执行...

    readline-7.0

    3. **补全功能**:readline支持命令和参数的自动补全,只需按下Tab键,就可以列出可能的选项,减少了手动输入的工作量。 4. **自定义绑定**:用户可以根据个人习惯自定义键盘快捷键,或者编写宏来执行一系列操作,...

    Go-Readline是一个纯go(golang)实现GNU-Readlinekind库

    3. **补全功能**:Go-Readline提供了命令补全的功能,允许用户通过tab键自动完成部分输入,这在处理大量命令或路径时非常实用,减少了输入错误的可能性。 4. **键盘快捷键**:除了基本的上下键和Tab键,Go-Readline...

    readline-5.0.tar.gz

    - **自动补全**:支持基于文件名、命令名或自定义函数的命令补全功能,只需按下Tab键即可完成补全,减少误输入的可能性。 - **宏定义和键绑定**:用户可以自定义宏,将一系列操作绑定到特定的按键上,提高工作效率...

    使用readline的一个实例

    2. **补全功能**:如果程序提供了一组可能的命令或选项,`readline`可以根据用户输入的部分内容自动完成整个单词,提高输入效率。 3. **编辑功能**:用户可以通过各种编辑快捷键(如Ctrl+U清空输入,Ctrl+W删除当前...

    python tab 自动补全

    可以使用前面提到的 `python -2 -m pip install pyreadline` 命令来指定安装 Python 2.7 的 Readline 版本。 2. **提示 readline 不是 DLL %1**: 如果遇到这样的错误提示,可能是因为下载了未经正确编译的 ...

    readline

    3. **补全功能**:`Readline`支持命令和文件名的自动补全,只需用户输入部分命令或文件名,然后按下Tab键,`Readline`会尝试完成剩余的部分。这对于频繁使用长命令或在目录结构复杂的系统中非常有用。 4. **绑定与...

    Python实现Tab自动补全和历史命令管理的方法.pdf

    总之,通过结合`readline`、`rlcompleter`和`atexit`模块,以及创建自定义的启动文件,我们可以为Python命令行界面提供Tab自动补全和历史命令管理,提升开发和交互体验。这在日常编程和调试过程中非常实用,尤其对于...

    readline-4.3.tar.gz

    - **历史记录**:`readline`保存了用户输入的命令历史,方便用户通过上/下箭头键快速访问和重复使用历史命令。 - **自动补全**:用户可以通过Tab键进行命令或文件名的自动补全,极大地提高了输入效率。 - **宏...

    readline-6.3.tar

    3. **补全功能**:当用户在输入命令时,可以使用Tab键进行自动补全,大大减少了输入错误并节省了时间。 4. **自定义绑定**:用户或开发者可以自定义快捷键绑定,以实现特定的功能,提高工作效率。 5. **宏定义**:...

    readline-6.3.tar.gz,

    readline库是Unix/Linux系统中广泛使用的命令行交互工具,它为应用程序提供了一套强大的输入处理功能,如历史记录、编辑功能和自动补全等。本文将详细探讨readline-6.3版本的实现原理和关键特性,帮助读者深入理解这...

    readline.zip

    `readline`还支持自定义补全功能,允许用户根据输入的部分字符串自动完成命令或文件名。 在`readline`源代码中,开发者可以学习到如何管理用户输入、处理终端I/O、实现复杂的行编辑功能,以及如何与程序的其他部分...

    readline-5.1.tar.gz

    - **补全功能**:自动补全命令、文件名或变量,减少了输入错误。 在编程中,`readline` 提供了 API,可以让开发者集成到自己的应用程序中,提供这些高级的命令行交互特性。它通常与其他库一起使用,比如 `ncurses`...

    Windows下python自动补全模块

    首先,Windows系统默认的Python解释器并不自带`readline`模块,这是一个在Unix/Linux系统中广泛使用的命令行交互工具,提供了包括自动补全在内的诸多功能。为了在Windows上获得类似的功能,我们需要借助第三方库`...

    rlwrap-0.42 和 readline-7.0

    readline库是GNU项目的一个组件,提供了命令行编辑功能,包括命令历史、光标移动、补全等功能。很多Linux命令行工具如bash、python等都使用了readline库。当rlwrap与readline结合使用时,可以进一步增强sqlplus的...

    readline-6.1

    - **补全功能**:可以实现基于文件名、命令、变量等的自动补全。 - **宏定义**:允许用户定义和保存命令序列,方便重复执行。 - **绑定功能**:用户可以自定义键盘绑定,改变默认的命令行操作方式。 - **插件支持**...

    前端开源库-readline

    3. **补全功能**:Readline支持命令或路径的自动补全,提高了用户输入的效率。 4. **行编辑**:用户可以使用一系列键盘快捷键(如Ctrl+U清空当前行,Ctrl+K剪切从光标到行尾的部分)来编辑正在输入的行。 5. **...

    Term-ReadLine-Gnu-1.18.tar.gz。

    2. **命令补全**:Term-ReadLine-Gnu支持自动完成功能,当用户开始输入SQL命令或数据库对象名时,它可以提供匹配的建议,减少输入错误。 3. **多行编辑**:用户可以在同一行内输入多行SQL语句,这对于编写复杂的...

Global site tag (gtag.js) - Google Analytics