use*_*605 5 java command-line-interface jline
我似乎无法找到每行使用多个命令的示例.
例如,假设我想写一个类似于cisco ios的cli,你可以在一行上有多个级别的命令.
例如.第一个单词可以是"show",然后当你输入"show"并点击tab时,会显示下一组选项(cisco exmaple使用"?"来显示列表).
eg:
gw1#show ?
aaa Show AAA values
access-expression List access expression
access-lists List access lists
accounting Accounting data for active sessions
adjacency Adjacent nodes
..
gw1#show ip ?
access-lists List IP access lists
accounting The active IP accounting database
admission Network Admission Control information
aliases IP alias table
arp IP ARP table
..
gw1#show ip interface ?
ATM ATM interface
Async Async interface
BVI Bridge-Group Virtual Interface
CDMA-Ix CDMA Ix interface
..
gw1#show ip interface
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用readCharacter一次读取一个字符,然后在看到空格后解析到目前为止的行.
有没有其他人有这种要求的Jline经验?
小智 7
使用https://github.com/jline/jline2/blob/master/src/test/java/jline/example/Example.java作为参考,您可能需要尝试以下操作.它背后的关键思想是使用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);
}
Run Code Online (Sandbox Code Playgroud)
在运行带有上述内容的修改后的Example.java之后,输出将如下所示.
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3011 次 |
| 最近记录: |