如何重用 rostopic 的完成函数来完成自定义 bash 函数?
How to reuse rostopic's completion function for completing a custom bash function?
定义bash函数rte()
:
$ function rte(){ rostopic echo $@ ; };
并尝试使用 rostopic
的完成函数
$ complete -p rostopic
complete -F _roscomplete_rostopic rostopic
通过命令:
$ complete -F _roscomplete_rostopic rte
以上设置可以验证如下:
$ complete -p rte
complete -F _roscomplete_rostopic rte
但是,rte <partial input><tab>
不提供完成。
问题:如何让rte()
使用rostopic
的补全?我想当 rte()
的完成调用 rostopic
的完成时,上下文 echo
需要提供给 rostopic
的完成(即 COMP_WORDS
需要包含 echo
).
想出了一个解决方案 -- 现在 .bashrc
中有以下内容:
function rte(){ rostopic echo "$@" ; };
complete -F _mycomplete_ rte
function _mycomplete_()
{
local fragment=${COMP_WORDS[COMP_CWORD]}
COMP_CWORD=2
COMP_WORDS[0]="rostopic"
COMP_WORDS[1]="echo"
COMP_WORDS[2]=$fragment
COMP_LINE="rostopic echo $fragment"
_roscomplete_rostopic;
}
定义bash函数rte()
:
$ function rte(){ rostopic echo $@ ; };
并尝试使用 rostopic
的完成函数
$ complete -p rostopic
complete -F _roscomplete_rostopic rostopic
通过命令:
$ complete -F _roscomplete_rostopic rte
以上设置可以验证如下:
$ complete -p rte
complete -F _roscomplete_rostopic rte
但是,rte <partial input><tab>
不提供完成。
问题:如何让rte()
使用rostopic
的补全?我想当 rte()
的完成调用 rostopic
的完成时,上下文 echo
需要提供给 rostopic
的完成(即 COMP_WORDS
需要包含 echo
).
想出了一个解决方案 -- 现在 .bashrc
中有以下内容:
function rte(){ rostopic echo "$@" ; };
complete -F _mycomplete_ rte
function _mycomplete_()
{
local fragment=${COMP_WORDS[COMP_CWORD]}
COMP_CWORD=2
COMP_WORDS[0]="rostopic"
COMP_WORDS[1]="echo"
COMP_WORDS[2]=$fragment
COMP_LINE="rostopic echo $fragment"
_roscomplete_rostopic;
}