Java 每行使用多字命令的JLine示例

Java 每行使用多字命令的JLine示例,java,command-line-interface,jline,Java,Command Line Interface,Jline,我似乎找不到一个每行使用多个命令的示例 例如,假设我想编写一个类似于cisco ios的cli,其中一行上可能有多个级别的命令 第一个单词可以是“show”,然后当您键入“show”并点击tab时,将显示下一组选项(cisco exmaple使用“?”显示列表) 我正在考虑使用readCharacter一次读取一个字符,然后在看到空格后解析行 其他人是否有过此类需求的Jline经验?作为参考,您可能希望尝试以下方法。它背后的关键思想是使用AggregateCompleter类为您完成所有选项的合

我似乎找不到一个每行使用多个命令的示例

例如,假设我想编写一个类似于cisco ios的cli,其中一行上可能有多个级别的命令

第一个单词可以是“show”,然后当您键入“show”并点击tab时,将显示下一组选项(cisco exmaple使用“?”显示列表)

我正在考虑使用readCharacter一次读取一个字符,然后在看到空格后解析行

其他人是否有过此类需求的Jline经验?

作为参考,您可能希望尝试以下方法。它背后的关键思想是使用
AggregateCompleter
类为您完成所有选项的合并

List<Completer> completors = new LinkedList<Completer>();
                    completors.add(
                            new AggregateCompleter(
                                    new ArgumentCompleter(new StringsCompleter("show"), new NullCompleter()),
                                    new ArgumentCompleter(new StringsCompleter("show"), new StringsCompleter("aaa", "access-expression", "access-lists", "accounting", "adjancey"), new NullCompleter()),
                                    new ArgumentCompleter(new StringsCompleter("show"), new StringsCompleter("ip"), new StringsCompleter("access-lists", "accounting", "admission", "aliases", "arp"), new NullCompleter()),
                                    new ArgumentCompleter(new StringsCompleter("show"), new StringsCompleter("ip"), new StringsCompleter("interface"), new StringsCompleter("ATM", "Async", "BVI"), new NullCompleter())
                                    )
                            );
            for (Completer c : completors) {
                reader.addCompleter(c);
            }
可通过如下所示的方式进行:

ConsoleReader reader = new MultiWordConsoleReader();
List<Completer> completers = new ArrayList<Completer>();

completors.add(new AggregateCompleter(new StringsCompleter("show"), new StringsCompleter("aaa", "access"), new NullCompleter()));
completors.add(new AggregateCompleter(new StringsCompleter("show"), new StringsCompleter("ip"), new StringsCompleter("accounting", "arp"), new NullCompleter()));

for (Completer c : completors) {
    reader.addCompleter(c);
}
ConsoleReader reader=新的多字ConsoleReader();
列表完成符=新的ArrayList();
添加(新的聚合完成器(新的StringsCompleter(“显示”),新的StringsCompleter(“aaa”,“访问”),新的NullCompleter());
添加(新聚合完成器(新StringsCompleter(“显示”)、新StringsCompleter(“ip”)、新StringsCompleter(“记帐”、“arp”)、新NullCompleter());
for(完成符c:完成符){
reader.addCompleter(c);
}
prompt> show 
show    
prompt> show 
aaa                 access-expression   access-lists        accounting          adjancey            ip                  
prompt> show ip 
ip    
prompt> show ip 
access-lists   accounting     admission      aliases        arp            interface      
prompt> show ip interface 
ATM     Async   BVI     
prompt> show ip interface A
ATM     Async   
prompt> show ip interface A
ATM     Async   
prompt> show ip interface ATM 
======>"show ip interface ATM "
prompt> 
ConsoleReader reader = new MultiWordConsoleReader();
List<Completer> completers = new ArrayList<Completer>();

completors.add(new AggregateCompleter(new StringsCompleter("show"), new StringsCompleter("aaa", "access"), new NullCompleter()));
completors.add(new AggregateCompleter(new StringsCompleter("show"), new StringsCompleter("ip"), new StringsCompleter("accounting", "arp"), new NullCompleter()));

for (Completer c : completors) {
    reader.addCompleter(c);
}