diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiNativePty.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiNativePty.java index 13d1cd24e..afca4d7d7 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiNativePty.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiNativePty.java @@ -31,16 +31,24 @@ public abstract class JansiNativePty implements Pty { private final int master; private final int slave; + private final int slaveOut; private final String name; private final FileDescriptor masterFD; private final FileDescriptor slaveFD; + private final FileDescriptor slaveOutFD; public JansiNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, String name) { + this(master, masterFD, slave, slaveFD, slave, slaveFD, name); + } + + public JansiNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { this.master = master; this.slave = slave; + this.slaveOut = slaveOut; this.name = name; this.masterFD = masterFD; this.slaveFD = slaveFD; + this.slaveOutFD = slaveOutFD; } protected static String ttyname() throws IOException { @@ -81,6 +89,10 @@ public int getSlave() { return slave; } + public int getSlaveOut() { + return slaveOut; + } + public String getName() { return name; } @@ -93,6 +105,10 @@ public FileDescriptor getSlaveFD() { return slaveFD; } + public FileDescriptor getSlaveOutFD() { + return slaveOutFD; + } + public InputStream getMasterInput() { return new FileInputStream(getMasterFD()); } @@ -106,7 +122,7 @@ public InputStream getSlaveInput() { } public OutputStream getSlaveOutput() { - return new FileOutputStream(getSlaveFD()); + return new FileOutputStream(getSlaveOutFD()); } diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/freebsd/FreeBsdNativePty.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/freebsd/FreeBsdNativePty.java index 63f4a8772..308888485 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/freebsd/FreeBsdNativePty.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/freebsd/FreeBsdNativePty.java @@ -24,7 +24,7 @@ public class FreeBsdNativePty extends JansiNativePty { public static FreeBsdNativePty current() throws IOException { try { String name = ttyname(); - return new FreeBsdNativePty(-1, null, 0, FileDescriptor.in, name); + return new FreeBsdNativePty(-1, null, 0, FileDescriptor.in, 1, FileDescriptor.out, name); } catch (IOException e) { throw new IOException("Not a tty", e); } @@ -49,6 +49,9 @@ public FreeBsdNativePty(int master, FileDescriptor masterFD, int slave, FileDesc super(master, masterFD, slave, slaveFD, name); } + public FreeBsdNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } // CONSTANTS private static final int VEOF = 0; diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/linux/LinuxNativePty.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/linux/LinuxNativePty.java index d0f942699..a7b658d47 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/linux/LinuxNativePty.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/linux/LinuxNativePty.java @@ -24,7 +24,7 @@ public class LinuxNativePty extends JansiNativePty { public static LinuxNativePty current() throws IOException { try { String name = ttyname(); - return new LinuxNativePty(-1, null, 0, FileDescriptor.in, name); + return new LinuxNativePty(-1, null, 0, FileDescriptor.in, 1, FileDescriptor.out, name); } catch (IOException e) { throw new IOException("Not a tty", e); } @@ -49,6 +49,9 @@ public LinuxNativePty(int master, FileDescriptor masterFD, int slave, FileDescri super(master, masterFD, slave, slaveFD, name); } + public LinuxNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } // CONSTANTS private static final int VINTR = 0; diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/osx/OsXNativePty.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/osx/OsXNativePty.java index 865cabc4f..934262ad0 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/osx/OsXNativePty.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/osx/OsXNativePty.java @@ -23,7 +23,7 @@ public class OsXNativePty extends JansiNativePty { public static OsXNativePty current() throws IOException { try { String name = ttyname(); - return new OsXNativePty(-1, null, 0, FileDescriptor.in, name); + return new OsXNativePty(-1, null, 0, FileDescriptor.in, 1, FileDescriptor.out, name); } catch (IOException e) { throw new IOException("Not a tty", e); } @@ -48,6 +48,9 @@ public OsXNativePty(int master, FileDescriptor masterFD, int slave, FileDescript super(master, masterFD, slave, slaveFD, name); } + public OsXNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } // CONSTANTS private static final int VEOF = 0; diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/solaris/SolarisNativePty.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/solaris/SolarisNativePty.java index 9b7215204..f510a3eb7 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/solaris/SolarisNativePty.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/solaris/SolarisNativePty.java @@ -24,7 +24,7 @@ public class SolarisNativePty extends JansiNativePty { public static SolarisNativePty current() throws IOException { try { String name = ttyname(); - return new SolarisNativePty(-1, null, 0, FileDescriptor.in, name); + return new SolarisNativePty(-1, null, 0, FileDescriptor.in, 1, FileDescriptor.out, name); } catch (IOException e) { throw new IOException("Not a tty", e); } @@ -34,6 +34,9 @@ public SolarisNativePty(int master, FileDescriptor masterFD, int slave, FileDesc super(master, masterFD, slave, slaveFD, name); } + public SolarisNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } // CONSTANTS private static final int VINTR = 0; diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaNativePty.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaNativePty.java index 1570c72c5..0df357d01 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaNativePty.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaNativePty.java @@ -29,9 +29,11 @@ public abstract class JnaNativePty implements Pty { private final int master; private final int slave; + private final int slaveOut; private final String name; private final FileDescriptor masterFD; private final FileDescriptor slaveFD; + private final FileDescriptor slaveOutFD; public static JnaNativePty current() throws IOException { if (Platform.isMac()) { @@ -62,11 +64,17 @@ public static JnaNativePty open(Attributes attr, Size size) throws IOException { } protected JnaNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, String name) { + this(master, masterFD, slave, slaveFD, slave, slaveFD, name); + } + + protected JnaNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { this.master = master; this.slave = slave; + this.slaveOut = slaveOut; this.name = name; this.masterFD = masterFD; this.slaveFD = slaveFD; + this.slaveOutFD = slaveOutFD; } @Override @@ -87,6 +95,10 @@ public int getSlave() { return slave; } + public int getSlaveOut() { + return slaveOut; + } + public String getName() { return name; } @@ -99,6 +111,10 @@ public FileDescriptor getSlaveFD() { return slaveFD; } + public FileDescriptor getSlaveOutFD() { + return slaveOutFD; + } + public InputStream getMasterInput() { return new FileInputStream(getMasterFD()); } @@ -112,7 +128,7 @@ public InputStream getSlaveInput() { } public OutputStream getSlaveOutput() { - return new FileOutputStream(getSlaveFD()); + return new FileOutputStream(getSlaveOutFD()); } protected static FileDescriptor newDescriptor(int fd) { diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty.java index bccb10f61..58fa6f9c3 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty.java @@ -44,7 +44,7 @@ public static FreeBsdNativePty current() throws IOException { len++; } String name = new String(buf, 0, len); - return new FreeBsdNativePty(-1, null, slave, FileDescriptor.in, name); + return new FreeBsdNativePty(-1, null, slave, FileDescriptor.in, 1, FileDescriptor.out, name); } public static FreeBsdNativePty open(Attributes attr, Size size) throws IOException { @@ -66,6 +66,10 @@ public FreeBsdNativePty(int master, FileDescriptor masterFD, int slave, FileDesc super(master, masterFD, slave, slaveFD, name); } + public FreeBsdNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } + @Override public Attributes getAttr() throws IOException { termios termios = new termios(); diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/linux/LinuxNativePty.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/linux/LinuxNativePty.java index d049aa65b..6c2954edb 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/linux/LinuxNativePty.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/linux/LinuxNativePty.java @@ -44,7 +44,7 @@ public static LinuxNativePty current() throws IOException { len++; } String name = new String(buf, 0, len); - return new LinuxNativePty(-1, null, slave, FileDescriptor.in, name); + return new LinuxNativePty(-1, null, slave, FileDescriptor.in, 1, FileDescriptor.out, name); } public static LinuxNativePty open(Attributes attr, Size size) throws IOException { @@ -66,6 +66,10 @@ public LinuxNativePty(int master, FileDescriptor masterFD, int slave, FileDescri super(master, masterFD, slave, slaveFD, name); } + public LinuxNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } + @Override public Attributes getAttr() throws IOException { termios termios = new termios(); diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/osx/OsXNativePty.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/osx/OsXNativePty.java index a69688c76..f56692b5d 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/osx/OsXNativePty.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/osx/OsXNativePty.java @@ -37,7 +37,7 @@ public static OsXNativePty current() throws IOException { len++; } String name = new String(buf, 0, len); - return new OsXNativePty(-1, null, slave, FileDescriptor.in, name); + return new OsXNativePty(-1, null, slave, FileDescriptor.in, 1, FileDescriptor.out, name); } public static OsXNativePty open(Attributes attr, Size size) throws IOException { @@ -59,6 +59,10 @@ public OsXNativePty(int master, FileDescriptor masterFD, int slave, FileDescript super(master, masterFD, slave, slaveFD, name); } + public OsXNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } + @Override public Attributes getAttr() throws IOException { termios termios = new termios(); diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/solaris/SolarisNativePty.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/solaris/SolarisNativePty.java index 16de24e43..c5c765c19 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/solaris/SolarisNativePty.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/solaris/SolarisNativePty.java @@ -36,7 +36,7 @@ public static SolarisNativePty current() throws IOException { len++; } String name = new String(buf, 0, len); - return new SolarisNativePty(-1, null, slave, FileDescriptor.in, name); + return new SolarisNativePty(-1, null, slave, FileDescriptor.in, 1, FileDescriptor.out, name); } public static SolarisNativePty open(Attributes attr, Size size) throws IOException { @@ -58,6 +58,10 @@ public SolarisNativePty(int master, FileDescriptor masterFD, int slave, FileDesc super(master, masterFD, slave, slaveFD, name); } + public SolarisNativePty(int master, FileDescriptor masterFD, int slave, FileDescriptor slaveFD, int slaveOut, FileDescriptor slaveOutFD, String name) { + super(master, masterFD, slave, slaveFD, slaveOut, slaveOutFD, name); + } + @Override public Attributes getAttr() throws IOException { termios termios = new termios();