jline 初步了解
jline是用java开发的仿shell终端模拟工具包,模拟shell终端,以命令行的方式读取输入信息。
1. 属性配置
原文档地址
两种配置方式:通过jline配置文件配置,或者标准的system properties(jvm或者System.setProperty)配置.
- jline.configuration - jline配置文件路径。默认值为$HOME/.jline.rc。
- jline.terminal - 区别终端类型。
- jline.shutdownhook - (true/false) 设定JLine是否安装JVM钩子。用于在程序退出时把中断恢复为原来状态。默认为true。
- jline.nobell - 按下无效按键时不响铃。
- jline.esc.timeout - (默认 150ms) ESC键按下后jline等待另一个键的时间。
- jline.inputrc - 覆盖默认位置$HOME/.inputrc。
- jline.completion.threshold - 多于此值时,在显示所有匹配值前先发出warning。
Windows Specific
- jline.WindowsTerminal.ansi - (默认true)是否支持ANSI。
- jline.WindowsTerminal.directConsole - (默认true)是否使用JNI console interaction。(可能会使控制台读取部分处于死循环,可以设置为false,绕过本地Windows API,直接使用Java IO流输出: 博客地址)
Unix Specific
- jline.stty - stty程序路径。
- jline.sh - (默认为sh) 执行外部程序的shell名称。
2. JLine 2.x Wiki
原文档地址
特性
- Command history - 之前被输入的命令会被记录,也可以被持久化。
- Line editing - 可以在当前行随意编辑,并支持emacs和vi的key mappings。
- Completion - 以可插入方式来实现命令行的tab补全。
- Custom key bindings - 按键绑定动作,在.inputrc文件中设定。
- Character Masking - 在输入密码时很有用。
- 99.99% Java - JLine大部分由Java实现,少部分使用本地代码,来支持Windows。
3. 日志配置
原文档地址
JLine不依靠其他日志框架,而是使用内部工具jline.internal.Log
默认把日志信息输入到System.err
(默认只输出WARN和ERROR)。可通过以下方式改变输出流:
jline.internal.Log.setOutput(final PrintStream out)
从2.13开始可以使用java.util.logging
框架。前提是在配置文件中做以下设置:
jline.log.jul=true
想输出DEBUG日志:
jline.internal.Log.debug=true
想要输出TRACE信息:
jline.internal.Log.trace=true
4. 终端配置
原文档地址
jline.terminal=_type_
终端类型:
- auto
- unix
- win
- windows
- none
- off
- false
- class implementing jline.Terminal
默认值由系统自动决定。
也可以通过以下方式在程序中设定
jline.TerminalFactory.configure(String type)
5. 使用JLine
原文档地址