Skip to content

Commit

Permalink
Fix encoding problems in tmux terminals
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Mar 24, 2017
1 parent c78f430 commit 338d756
Showing 1 changed file with 34 additions and 3 deletions.
37 changes: 34 additions & 3 deletions builtins/src/main/java/org/jline/builtins/Tmux.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CodingErrorAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -681,17 +686,43 @@ public void close() throws IOException {

private class MasterOutputStream extends OutputStream {
private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
private final CharsetDecoder decoder = Charset.defaultCharset().newDecoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);

@Override
public synchronized void write(int b) {
buffer.write(b);
}

@Override
public void write(byte[] b, int off, int len) throws IOException {
buffer.write(b, off, len);
}

@Override
public synchronized void flush() throws IOException {
terminal.write(buffer.toString());
masterInputOutput.write(terminal.read().getBytes());
buffer.reset();
int size = buffer.size();
if (size > 0) {
CharBuffer out;
for (; ; ) {
out = CharBuffer.allocate(size);
ByteBuffer in = ByteBuffer.wrap(buffer.toByteArray());
CoderResult result = decoder.decode(in, out, false);
if (result.isOverflow()) {
size *= 2;
} else {
buffer.reset();
buffer.write(in.array(), in.arrayOffset(), in.remaining());
break;
}
}
if (out.position() > 0) {
out.flip();
terminal.write(out);
masterInputOutput.write(terminal.read().getBytes());
}
}
}

@Override
Expand Down

0 comments on commit 338d756

Please sign in to comment.