【问题标题】:c console application auto-complete dynamic argumentsc 控制台应用程序自动完成动态参数
【发布时间】:2011-05-24 08:06:36
【问题描述】:

我正在寻找一种让控制台自动完成的方法 - 给定这样的应用程序:

int main (int argc, char ** argv)
{
  if (argc == 1) return EXIT_FAILURE;
  if (strcmp(argv[1], "good")==0) printf("good\n");
  if (strcmp(argv[1], "bad")==0) printf("bad\n");
  return EXIT_FAILURE;
}

运行它时,我想在命令后按 [tab],这样它会给我一个可能有用的选项。

例子:

./a.out g[tab]

会自动完成到

./a.out good

我不想编辑 /etc/bash-completion.d/,我希望有一个更强大的自动完成功能,就像可执行文件本身中的一个函数,它会被调用 - 也许这样它可以查询一个可能选项列表的数据库。或者可能会输出一条消息,让您知道选项是什么。

如果您认为这完全不可能,请告诉我!

【问题讨论】:

  • 我认为最接近的(至少使用 zsh,而不是我猜这些天相似的 bash)你可以通过添加一个 --help 选项来返回其中一个中的有效选项列表“标准”布局,然后您的 shell 完成可以理解。

标签: c console arguments


【解决方案1】:

Completions 是您运行应用程序的 shell 的一个属性。您必须为您想要支持的所有 shell 提供完成功能(bash、zsh、tcsh 和 fish 具有可自定义的完成功能)。补全函数可以调用您的应用程序(例如运行you_application --list-possible-arguments)或执行它选择的任何操作来生成补全——在您的术语中它已经是一个“强”补全。

在 bash 中,您使用 complete built-in 声明完成。查看/etc/completion.d 中的示例(gpg 是一个相当简单的示例;git 是一个相当复杂的示例)。

【讨论】:

  • 太棒了!不幸的是,我只是没有进一步研究这一点,或者对使用描述符参数请求调用应用程序本身有所了解。现在我所要做的就是安装 bash-complete(我使用的是 Mac OS - 我认为它会很相似,但似乎 Mac OS 的 bash 没有附带它)
【解决方案2】:

如果您使用 BASH,请查看此类似帖子:

Auto-complete command line arguments

=================================

如果您想提供自己的命令行,请查看Readline 库:

GNU Readline 库提供了一个 供使用的函数集 允许用户编辑的应用程序 输入的命令行。 Emacs 和 vi 编辑模式都是 可用的。阅读线图书馆 包括附加功能 维护先前输入的列表 命令行,回忆,也许 重新编辑这些行,并执行 以前的类似 csh 的历史扩展 命令。

【讨论】:

  • 这不是 shell 命令行,而是应用程序中的控制台样式命令。
猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多