我来自bash,正在研究tcsh的选项卡完成功能。
( 1) tcsh不能将完成委托给shell函数( bash使用“-F _func cmd”的方式)是否正确?
2)当将完成委托给外部程序时,tcsh只提供COMMAND_LINE,而bash只提供COMP_LINE和COMP_POINT。这意味着tcsh不能正确地这样做:
% cmd --foo -<tab> --bar --baz在这里,我希望程序完成给出一个没有提到的选项列表。因为tcsh只会将COMMAND_LINE作为“cmd --foo -”,而bash则会给出整行,但是给出关于COMP_POINT中光标位置的线索。
发布于 2014-11-24 17:25:15
tcsh根本没有函数,所以这是否定的。一般策略是创建一个单独的脚本,并将其称为外部程序(对于某些事情,比如alias,source也会起作用)。COMP_POINT可能并不困难;实际上,这里有一个补丁(测试不是很好):diff --git i/tc.cw/tc.co.c索引c472acc.1a69fee 100644 --i/tc.con.c@- +++ w/tc.con.c@ -469,6 +469,8 @@ Char STRPROGRAM_ENVIRONMENT[] ={ 'P','R','O','G','R','A','M',#endif /* _OSD_POSIX */ Char STRCOMMAND_LINE[] ={ 'C‘、'O’、'M‘、'M’、'A‘、'N’、'D‘、'_’、'L‘、'I’、'N‘、'E’、'\0‘};+Char STRCOMP_POINT[] ={ 'C','O','M','p','_','P','P','O','I','N','T',+ '\0‘};#ifdef WARP Char STRwarp[] ={ 'w','a','r',’p‘,'\0’};diff -git i/tw.comp.c w/tw.comp.c索引03da837.101962f 100644 - i/tw.comp.c +++ w/tw.comp.c @ -635,9 +635,12 @ tw_complete(const *line,Char **word,Char **pat,int查找,eChar *suf)默认值:eChar();/*不能发生*/ }+ tsetenv(STRCOMMAND_LINE,行);+ tsetenv(STRCOMP_POINT,str2short(xasprintf("%d",(char) CursorH));res = tw_result(com,pat);Unsetenv(STRCOMMAND_LINE);+ Unsetenv(STRCOMP_POINT);cleanup_until(buf);return };不过,您可能想在tcsh邮件列表上讨论这个问题。
https://unix.stackexchange.com/questions/169503
复制相似问题