package com.jediterm.pty;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jediterm.terminal.LoggingTtyConnector;
import com.jediterm.terminal.TtyConnector;
import com.jediterm.terminal.emulator.ColorPalette;
import com.jediterm.terminal.ui.AbstractTerminalFrame;
import com.jediterm.terminal.ui.UIUtil;
import com.pty4j.PtyProcess;
import com.sun.jna.Platform;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @author traff
*/
public class PtyMain extends AbstractTerminalFrame {
@Override
public TtyConnector createTtyConnector() {
try {
Map<String, String> envs = Maps.newHashMap(System.getenv());
envs.put("TERM", "xterm");
String[] command = new String[]{"/bin/bash", "--login"};
if (UIUtil.isWindows) {
command = new String[]{"cmd.exe"};
}
PtyProcess process = PtyProcess.exec(command, envs, null);
return new LoggingPtyProcessTtyConnector(process, Charset.forName("UTF-8"));
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
public static void main(final String[] arg) {
BasicConfigurator.configure();
Logger.getRootLogger().setLevel(Level.INFO);
new PtyMain();
}
public static class LoggingPtyProcessTtyConnector extends PtyProcessTtyConnector implements LoggingTtyConnector {
private List<char[]> myDataChunks = Lists.newArrayList();
public LoggingPtyProcessTtyConnector(PtyProcess process, Charset charset) {
super(process, charset);
}
@Override
public int read(char[] buf, int offset, int length) throws IOException {
int len = super.read(buf, offset, length);
if (len > 0) {
char[] arr = Arrays.copyOfRange(buf, offset, len);
myDataChunks.add(arr);
}
return len;
}
public List<char[]> getChunks() {
return Lists.newArrayList(myDataChunks);
}
}
}