Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,12 @@ private static VarHandle adjust2LinuxHandle(VarHandle v) {
c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IXANY), IXANY, c_iflag);
c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IMAXBEL), IMAXBEL, c_iflag);
c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUTF8), IUTF8, c_iflag);
c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUCLC), IUCLC, c_iflag);
c_iflag(c_iflag);
// Output flags
long c_oflag = 0;
c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OPOST), OPOST, c_oflag);
c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OLCUC), OLCUC, c_oflag);
c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONLCR), ONLCR, c_oflag);
c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OXTABS), OXTABS, c_oflag);
c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONOEOT), ONOEOT, c_oflag);
Expand Down Expand Up @@ -228,6 +230,7 @@ private static VarHandle adjust2LinuxHandle(VarHandle v) {
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ECHOCTL), ECHOCTL, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ISIG), ISIG, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ICANON), ICANON, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.XCASE), XCASE, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ALTWERASE), ALTWERASE, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.IEXTEN), IEXTEN, c_lflag);
c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.EXTPROC), EXTPROC, c_lflag);
Expand Down Expand Up @@ -261,6 +264,12 @@ private static VarHandle adjust2LinuxHandle(VarHandle v) {
if (VSTATUS != (-1)) {
c_cc[VSTATUS] = (byte) t.getControlChar(Attributes.ControlChar.VSTATUS);
}
if (VSWTC != (-1)) {
c_cc[VSWTC] = (byte) t.getControlChar(Attributes.ControlChar.VSWTC);
}
if (VERASE2 != (-1)) {
c_cc[VERASE2] = (byte) t.getControlChar(Attributes.ControlChar.VERASE2);
}
c_cc().copyFrom(MemorySegment.ofArray(c_cc));
}

Expand Down Expand Up @@ -349,10 +358,12 @@ public Attributes asAttributes() {
addFlag(c_iflag, iflag, Attributes.InputFlag.IXANY, IXANY);
addFlag(c_iflag, iflag, Attributes.InputFlag.IMAXBEL, IMAXBEL);
addFlag(c_iflag, iflag, Attributes.InputFlag.IUTF8, IUTF8);
addFlag(c_iflag, iflag, Attributes.InputFlag.IUCLC, IUCLC);
// Output flags
long c_oflag = c_oflag();
EnumSet<Attributes.OutputFlag> oflag = attr.getOutputFlags();
addFlag(c_oflag, oflag, Attributes.OutputFlag.OPOST, OPOST);
addFlag(c_oflag, oflag, Attributes.OutputFlag.OLCUC, OLCUC);
addFlag(c_oflag, oflag, Attributes.OutputFlag.ONLCR, ONLCR);
addFlag(c_oflag, oflag, Attributes.OutputFlag.OXTABS, OXTABS);
addFlag(c_oflag, oflag, Attributes.OutputFlag.ONOEOT, ONOEOT);
Expand Down Expand Up @@ -397,6 +408,7 @@ public Attributes asAttributes() {
addFlag(c_lflag, lflag, Attributes.LocalFlag.ECHOCTL, ECHOCTL);
addFlag(c_lflag, lflag, Attributes.LocalFlag.ISIG, ISIG);
addFlag(c_lflag, lflag, Attributes.LocalFlag.ICANON, ICANON);
addFlag(c_lflag, lflag, Attributes.LocalFlag.XCASE, XCASE);
addFlag(c_lflag, lflag, Attributes.LocalFlag.ALTWERASE, ALTWERASE);
addFlag(c_lflag, lflag, Attributes.LocalFlag.IEXTEN, IEXTEN);
addFlag(c_lflag, lflag, Attributes.LocalFlag.EXTPROC, EXTPROC);
Expand Down Expand Up @@ -430,6 +442,12 @@ public Attributes asAttributes() {
if (VSTATUS != (-1)) {
cc.put(Attributes.ControlChar.VSTATUS, (int) c_cc[VSTATUS]);
}
if (VSWTC != (-1)) {
cc.put(Attributes.ControlChar.VSWTC, (int) c_cc[VSWTC]);
}
if (VERASE2 != (-1)) {
cc.put(Attributes.ControlChar.VERASE2, (int) c_cc[VERASE2]);
}
// Return
return attr;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_cc[VMIN] = (byte) t.getControlChar(Attributes.ControlChar.VMIN);
tio.c_cc[VTIME] = (byte) t.getControlChar(Attributes.ControlChar.VTIME);
// tio.c_cc[VSTATUS] = (byte) t.getControlChar(Attributes.ControlChar.VSTATUS);
tio.c_cc[VERASE2] = (byte) t.getControlChar(Attributes.ControlChar.VERASE2);
return tio;
}

Expand Down Expand Up @@ -341,6 +342,7 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
cc.put(Attributes.ControlChar.VMIN, (int) tio.c_cc[VMIN]);
cc.put(Attributes.ControlChar.VTIME, (int) tio.c_cc[VTIME]);
// cc.put(Attributes.ControlChar.VSTATUS, (int) tio.c_cc[VSTATUS]);
cc.put(Attributes.ControlChar.VERASE2, (int) tio.c_cc[VERASE2]);
// Return
return attr;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,10 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IXANY), IXANY, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IMAXBEL), IMAXBEL, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUTF8), IUTF8, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUCLC), IUCLC, tio.c_iflag);
// Output flags
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OPOST), OPOST, tio.c_oflag);
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OLCUC), OLCUC, tio.c_oflag);
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONLCR), ONLCR, tio.c_oflag);
// tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OXTABS), OXTABS, tio.c_oflag);
// tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONOEOT), ONOEOT, tio.c_oflag);
Expand Down Expand Up @@ -260,6 +262,7 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ECHOCTL), ECHOCTL, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ISIG), ISIG, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ICANON), ICANON, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.XCASE), XCASE, tio.c_lflag);
// tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ALTWERASE), ALTWERASE, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.IEXTEN), IEXTEN, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.EXTPROC), EXTPROC, tio.c_lflag);
Expand All @@ -286,6 +289,7 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_cc[VMIN] = (byte) t.getControlChar(Attributes.ControlChar.VMIN);
tio.c_cc[VTIME] = (byte) t.getControlChar(Attributes.ControlChar.VTIME);
// tio.c_cc[VSTATUS] = (byte) t.getControlChar(Attributes.ControlChar.VSTATUS);
tio.c_cc[VSWTC] = (byte) t.getControlChar(Attributes.ControlChar.VSWTC);
return tio;
}

Expand All @@ -307,9 +311,11 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IXANY, IXANY);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IMAXBEL, IMAXBEL);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IUTF8, IUTF8);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IUCLC, IUCLC);
// Output flags
EnumSet<Attributes.OutputFlag> oflag = attr.getOutputFlags();
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OPOST, OPOST);
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OLCUC, OLCUC);
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.ONLCR, ONLCR);
// addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OXTABS, OXTABS);
// addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.ONOEOT, ONOEOT);
Expand Down Expand Up @@ -352,6 +358,7 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ECHOCTL, ECHOCTL);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ISIG, ISIG);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ICANON, ICANON);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.XCASE, XCASE);
// addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ALTWERASE, ALTWERASE);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.IEXTEN, IEXTEN);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.EXTPROC, EXTPROC);
Expand Down Expand Up @@ -379,6 +386,7 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
cc.put(Attributes.ControlChar.VMIN, (int) tio.c_cc[VMIN]);
cc.put(Attributes.ControlChar.VTIME, (int) tio.c_cc[VTIME]);
// cc.put(Attributes.ControlChar.VSTATUS, (int) tio.c_cc[VSTATUS]);
cc.put(Attributes.ControlChar.VSWTC, (int) tio.c_cc[VSWTC]);
// Return
return attr;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,10 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IXANY), IXANY, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IMAXBEL), IMAXBEL, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUTF8), IUTF8, tio.c_iflag);
tio.c_iflag = setFlag(t.getInputFlag(Attributes.InputFlag.IUCLC), IUCLC, tio.c_iflag);
// Output flags
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OPOST), OPOST, tio.c_oflag);
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OLCUC), OLCUC, tio.c_oflag);
tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONLCR), ONLCR, tio.c_oflag);
// tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.OXTABS), OXTABS, tio.c_oflag);
// tio.c_oflag = setFlag(t.getOutputFlag(Attributes.OutputFlag.ONOEOT), ONOEOT, tio.c_oflag);
Expand Down Expand Up @@ -260,6 +262,7 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ECHOCTL), ECHOCTL, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ISIG), ISIG, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ICANON), ICANON, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.XCASE), XCASE, tio.c_lflag);
// tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.ALTWERASE), ALTWERASE, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.IEXTEN), IEXTEN, tio.c_lflag);
tio.c_lflag = setFlag(t.getLocalFlag(Attributes.LocalFlag.EXTPROC), EXTPROC, tio.c_lflag);
Expand Down Expand Up @@ -287,6 +290,7 @@ static CLibrary.Termios termios(Attributes t) {
tio.c_cc[VMIN] = (byte) t.getControlChar(Attributes.ControlChar.VMIN);
tio.c_cc[VTIME] = (byte) t.getControlChar(Attributes.ControlChar.VTIME);
// tio.c_cc[VSTATUS] = (byte) t.getControlChar(Attributes.ControlChar.VSTATUS);
tio.c_cc[VSWTC] = (byte) t.getControlChar(Attributes.ControlChar.VSWTC);
return tio;
}

Expand All @@ -309,9 +313,11 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IXANY, IXANY);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IMAXBEL, IMAXBEL);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IUTF8, IUTF8);
addFlag(tio.c_iflag, iflag, Attributes.InputFlag.IUCLC, IUCLC);
// Output flags
EnumSet<Attributes.OutputFlag> oflag = attr.getOutputFlags();
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OPOST, OPOST);
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OLCUC, OLCUC);
addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.ONLCR, ONLCR);
// addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.OXTABS, OXTABS);
// addFlag(tio.c_oflag, oflag, Attributes.OutputFlag.ONOEOT, ONOEOT);
Expand Down Expand Up @@ -354,6 +360,7 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ECHOCTL, ECHOCTL);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ISIG, ISIG);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ICANON, ICANON);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.XCASE, XCASE);
// addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.ALTWERASE, ALTWERASE);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.IEXTEN, IEXTEN);
addFlag(tio.c_lflag, lflag, Attributes.LocalFlag.EXTPROC, EXTPROC);
Expand Down Expand Up @@ -382,6 +389,7 @@ protected Attributes toAttributes(CLibrary.Termios tio) {
cc.put(Attributes.ControlChar.VMIN, (int) tio.c_cc[VMIN]);
cc.put(Attributes.ControlChar.VTIME, (int) tio.c_cc[VTIME]);
// cc.put(Attributes.ControlChar.VSTATUS, (int) tio.c_cc[VSTATUS]);
cc.put(Attributes.ControlChar.VSWTC, (int) tio.c_cc[VSWTC]);
// Return
return attr;
}
Expand Down
9 changes: 8 additions & 1 deletion terminal/src/main/java/org/jline/terminal/Attributes.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,11 @@ public enum ControlChar {
/** Timeout in deciseconds for non-canonical read */
VTIME,
/** Status request character (typically Ctrl+T) */
VSTATUS
VSTATUS,
/** Switch character (Linux/Solaris) */
VSWTC,
/** Alternate erase character (FreeBSD) */
VERASE2
}

/**
Expand Down Expand Up @@ -175,6 +179,7 @@ public enum InputFlag {
IXANY, /* any char will restart after stop */
IMAXBEL, /* ring bell on input queue full */
IUTF8, /* maintain state for UTF-8 VERASE */
IUCLC, /* map upper case to lower case on input (Linux/Solaris) */

INORMEOL /* normalize end-of-line */
}
Expand Down Expand Up @@ -210,6 +215,7 @@ public enum InputFlag {
*/
public enum OutputFlag {
OPOST, /* enable following output processing */
OLCUC, /* map lower case to upper case on output (Linux/Solaris) */
ONLCR, /* map NL to CR-NL (ala CRMOD) */
OXTABS, /* expand tabs to spaces */
ONOEOT, /* discard EOT's (^D) on output) */
Expand Down Expand Up @@ -319,6 +325,7 @@ public enum LocalFlag {
ECHOCTL, /* echo control chars as ^(Char) */
ISIG, /* enable signals INTR, QUIT, [D]SUSP */
ICANON, /* canonicalize input lines */
XCASE, /* canonical upper/lower presentation (Linux/Solaris) */
ALTWERASE, /* use alternate WERASE algorithm */
IEXTEN, /* enable DISCARD and LNEXT */
EXTPROC, /* external processing */
Expand Down