private Tuple2<Attributes, Map<Signal, SignalHandler>> prepareTerminal() { final Terminal terminal = client.getTerminal(); final Attributes prevAttributes = terminal.getAttributes(); // adopted from org.jline.builtins.Nano // see also https://en.wikibooks.org/wiki/Serial_Programming/termios#Basic_Configuration_of_a_Serial_Interface // no line processing // canonical mode off, echo off, echo newline off, extended input processing off Attributes newAttr = new Attributes(prevAttributes); newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN), false); // turn off input processing newAttr.setInputFlags(EnumSet.of(Attributes.InputFlag.IXON, Attributes.InputFlag.ICRNL, Attributes.InputFlag.INLCR), false); // one input byte is enough to return from read, inter-character timer off newAttr.setControlChar(Attributes.ControlChar.VMIN, 1); newAttr.setControlChar(Attributes.ControlChar.VTIME, 0); newAttr.setControlChar(Attributes.ControlChar.VINTR, 0); terminal.setAttributes(newAttr); final Map<Signal, SignalHandler> prevSignals = new HashMap<>(); prevSignals.put(Signal.WINCH, terminal.handle(Signal.WINCH, this::handleSignal)); prevSignals.put(Signal.INT, terminal.handle(Signal.INT, this::handleSignal)); prevSignals.put(Signal.QUIT, terminal.handle(Signal.QUIT, this::handleSignal)); return Tuple2.of(prevAttributes, prevSignals); }
public Attributes enterRawMode() { Attributes prvAttr = getAttributes(); Attributes newAttr = new Attributes(prvAttr); newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN), false); newAttr.setInputFlags(EnumSet.of(InputFlag.IXON, InputFlag.ICRNL, InputFlag.INLCR), false); newAttr.setControlChar(ControlChar.VMIN, 0); newAttr.setControlChar(ControlChar.VTIME, 1); setAttributes(newAttr); return prvAttr; }
public void copy(Attributes attributes) { setControlFlags(attributes.getControlFlags()); setInputFlags(attributes.getInputFlags()); setLocalFlags(attributes.getLocalFlags()); setOutputFlags(attributes.getOutputFlags()); setControlChars(attributes.getControlChars()); }
Attributes.LocalFlag.IEXTEN), false); newAttributes.setInputFlags(EnumSet.of( Attributes.InputFlag.ICRNL, Attributes.InputFlag.INLCR, Attributes.InputFlag.IXON), false); terminal.setAttributes(newAttributes);
Attributes newAttr = new Attributes(attributes); newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN), false); newAttr.setInputFlags(EnumSet.of(InputFlag.IXON, InputFlag.ICRNL, InputFlag.INLCR), false); newAttr.setControlChar(ControlChar.VMIN, 1); newAttr.setControlChar(ControlChar.VTIME, 0);
Attributes newAttr = new Attributes(attributes); newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN), false); newAttr.setInputFlags(EnumSet.of(InputFlag.IXON, InputFlag.ICRNL, InputFlag.INLCR), false); newAttr.setControlChar(ControlChar.VMIN, 1); newAttr.setControlChar(ControlChar.VTIME, 0);