【发布时间】:2018-02-09 19:08:45
【问题描述】:
我正在用 C 语言开发一个带有提示符的 Linux 工具。我已经使用 GNU 库启用了“函数”和“文件”完成功能。现在我想将支持扩展到“变量”名称完成。下面是一个更好理解的例子:
工作输出:
build2:/u/anitha> linux_tool
loading history
tool>
tool> ***On pressing TAB twice, the functions are prompted***
Display all 251 possibilities? (y or n)
byte(
dim(
fncc_fft2d(
HasValue(
ifft(
load_csv(
预期的额外支持:
tool> **var_name**=create(2,2)
2x2x1 array of int, bsq format [16 bytes]
0 1
2 3
tool>
tool> ***on pressing TAB twice, I want the variable name to be prompted for auto completion. i.e.**,*
tool> var_
**var_name**
Version(
为自动完成添加代码:
char ** dv_complete_func(char *text, int start, int end);
char *dv_complete_func_generator(const char*, int);
extern struct _vfuncptr vfunclist[];
/* This array has the list of functions that the tool can support */
char **
dv_complete_func(char *text, int start, int end)
{
return rl_completion_matches(text, dv_complete_func_generator);
}
char *dv_complete_func_generator(const char *text, int state)
{
static int list_index, len;
char *name;
if(!state) {
list_index =0;
len=strlen(text);
}
while((name = vfunclist[list_index++].name)) {
if(strncmp(name,text,len)==0) {
char *namedup = strdup(name);
strcat(namedup,"(");
return strdup(namedup);
}
}
return NULL;
}
如果问题不清楚,请告诉我。请帮我解决一下。
【问题讨论】:
-
是的,问题不清楚。
-
显示您的实际代码。你在正确的轨道上。 显示绑定到
rl_attempted_completion_function的函数的源代码。所以编辑你的问题来改进它。 -
我也希望为变量扩展“选项卡完成”。即,如果我在提示符中创建一个变量,那么“在按下选项卡时”它还应该显示除函数名称之外的变量。
-
请编辑您的问题(可能应该更多更长)以提供您的实际源代码
-
在编辑时,您可能会发现这很有趣stackoverflow.com/editing-help 此外,在编辑时可以预览问题的外观。
标签: c linux autocomplete gnu libreadline