我如何禁用Term::ReadLine的默认完成,或者说,使它在某个时候停止建议文件名完成?例如,我需要用什么替换return()才能从第二个单词开始禁止默认完成?这两种方法都不起作用:第一个
Term::ReadLine
return()
kknvjkwl1#
定义completion_function而不是attempted_completion_function:
completion_function
attempted_completion_function
$attribs->{completion_function} = \&completion;
如果补全应该停止,则为return undef,如果文件名补全将接管,则为return $term->completion_matches($text, $attribs->{filename_completion_function})。在下面的示例中,没有为第一个参数提供任何建议,但为第二个参数提供了文件名。
return undef
return $term->completion_matches($text, $attribs->{filename_completion_function})
use Term::ReadLine; my $term = new Term::ReadLine 'sample'; my $attribs = $term->Attribs; $attribs->{completion_function} = \&completion; sub completion { my ( $text, $line, $start ) = @_; if ( substr( $line, 0, $start ) =~ /^\s*$/) { return } else { return $term->completion_matches($text, $attribs->{filename_completion_function}) } } while ( my $input = $term->readline ("> ") ) { exit 0 if $input eq "q"; }
tpgth1q72#
通过Gnu实现,我发现我可以设置attempted_completion_over来避免在attempted_completion_function没有返回结果时出现文件名补全:
attempted_completion_over
$attribs->{attempted_completion_over} = 1;
Gnu.pm 表示此变量是自“GRL 4.2”起的变量。请注意,* 每次 * attempted_completion_function运行时,或者至少每次attempted_completion_function没有返回匹配时,都应该设置此变量。我没有看到任何文档说明这一点,但libreadline显然在每次调用后都将变量重置为零。
j2cgzkjk3#
我必须在我的完成处理程序中这样做:
if <no more matches> then $attribs->{completion_entry_function} = \&dummy;
即:
sub complete { my $text = shift // ''; my $line = shift // ''; my $start = shift // 0; my $end = shift // 0; # msg("$text, $line, $start, $end"); my @matches = $g->complete($text, $line, $start, $end); # msg(vDump(\@matches)); $attribs->{completion_entry_function} = \&dummy; return @matches; } $attribs->{attempted_completion_function} = \&complete;
3条答案
按热度按时间kknvjkwl1#
定义
completion_function
而不是attempted_completion_function
:如果补全应该停止,则为
return undef
,如果文件名补全将接管,则为return $term->completion_matches($text, $attribs->{filename_completion_function})
。在下面的示例中,没有为第一个参数提供任何建议,但为第二个参数提供了文件名。
tpgth1q72#
通过Gnu实现,我发现我可以设置
attempted_completion_over
来避免在attempted_completion_function
没有返回结果时出现文件名补全:Gnu.pm 表示此变量是自“GRL 4.2”起的变量。
请注意,* 每次 *
attempted_completion_function
运行时,或者至少每次attempted_completion_function
没有返回匹配时,都应该设置此变量。我没有看到任何文档说明这一点,但libreadline显然在每次调用后都将变量重置为零。j2cgzkjk3#
我必须在我的完成处理程序中这样做:
即: