/* * Copyright (c) 2002-2016, the original author or authors. * * This software is distributable under the BSD license. See the terms of the * BSD license in the documentation provided with this software. * * http://www.opensource.org/licenses/bsd-license.php */ package jline; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import jline.internal.InfoCmp; /** * Terminal wrapper with default ansi capabilities */ public class DefaultTerminal2 implements Terminal2 { private final Terminal terminal; private final Set<String> bools = new HashSet<String>(); private final Map<String, String> strings = new HashMap<String, String>(); public DefaultTerminal2(Terminal terminal) { this.terminal = terminal; registerCap("key_backspace", "^H"); registerCap("bell", "^G"); registerCap("carriage_return", "^M"); if (isSupported() && isAnsiSupported()) { registerCap("clr_eol", "\\E[K"); registerCap("clr_bol", "\\E[1K"); registerCap("cursor_up", "\\E[A"); registerCap("cursor_down", "^J"); registerCap("column_address", "\\E[%i%p1%dG"); registerCap("clear_screen", "\\E[H\\E[2J"); registerCap("parm_down_cursor", "\\E[%p1%dB"); registerCap("cursor_left", "^H"); registerCap("cursor_right", "\\E[C"); } if (hasWeirdWrap()) { registerCap("eat_newline_glitch"); registerCap("auto_right_margin"); } } public void init() throws Exception { terminal.init(); } public void restore() throws Exception { terminal.restore(); } public void reset() throws Exception { terminal.reset(); } public boolean isSupported() { return terminal.isSupported(); } public int getWidth() { return terminal.getWidth(); } public int getHeight() { return terminal.getHeight(); } public boolean isAnsiSupported() { return terminal.isAnsiSupported(); } public OutputStream wrapOutIfNeeded(OutputStream out) { return terminal.wrapOutIfNeeded(out); } public InputStream wrapInIfNeeded(InputStream in) throws IOException { return terminal.wrapInIfNeeded(in); } public boolean hasWeirdWrap() { return terminal.hasWeirdWrap(); } public boolean isEchoEnabled() { return terminal.isEchoEnabled(); } public void setEchoEnabled(boolean enabled) { terminal.setEchoEnabled(enabled); } public void disableInterruptCharacter() { terminal.disableInterruptCharacter(); } public void enableInterruptCharacter() { terminal.enableInterruptCharacter(); } public String getOutputEncoding() { return terminal.getOutputEncoding(); } private void registerCap(String cap, String value) { for (String key : InfoCmp.getNames(cap)) { strings.put(key, value); } } private void registerCap(String cap) { Collections.addAll(bools, InfoCmp.getNames(cap)); } public boolean getBooleanCapability(String capability) { return bools.contains(capability); } public Integer getNumericCapability(String capability) { return null; } public String getStringCapability(String capability) { return strings.get(capability); } }