Fixed: [Issue 26] Terminal emulator does not honor the encoding of the
terminal connector
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java
index 9da4a52..8d24772 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/LocalTerminalConnector.java
@@ -38,18 +38,10 @@
 public class LocalTerminalConnector extends TerminalConnectorDelegate implements LifeCycleListener {
   private static final String ID = "com.google.eclipse.terminal.local.core.connector";
 
-  public static final String ENCODING = "UTF-8";
-
-  private IPath workingDirectory;
-  private PseudoTerminal pseudoTerminal;
-
-  private StreamsProxy streamsProxy;
-  private OutputStream terminalToRemoteStream;
-
-  public static ITerminalConnector createLocalTerminalConnector() {
+  public static ITerminalConnector createLocalTerminalConnector(final String encoding) {
     TerminalConnector.Factory factory = new TerminalConnector.Factory(){
       @Override public TerminalConnectorDelegate makeConnector() {
-        return new LocalTerminalConnector();
+        return new LocalTerminalConnector(encoding);
       }
     };
     TerminalConnector connector = new TerminalConnector(factory, ID, localTerminalName);
@@ -60,7 +52,17 @@
     return connector;
   }
 
-  private LocalTerminalConnector() {}
+  private IPath workingDirectory;
+  private PseudoTerminal pseudoTerminal;
+
+  private StreamsProxy streamsProxy;
+  private OutputStream terminalToRemoteStream;
+
+  private final String encoding;
+
+  private LocalTerminalConnector(String encoding) {
+    this.encoding = encoding;
+  }
 
   /**
    * Verifies that PTY support is available on this platform.
@@ -81,8 +83,8 @@
     pseudoTerminal.addLifeCycleListener(this);
     try {
       pseudoTerminal.launch();
-      streamsProxy = new StreamsProxy(pseudoTerminal.systemProcess(), ENCODING);
-      terminalToRemoteStream = new BufferedOutputStream(new TerminalOutputStream(streamsProxy, ENCODING), 1024);
+      streamsProxy = new StreamsProxy(pseudoTerminal.systemProcess(), encoding);
+      terminalToRemoteStream = new BufferedOutputStream(new TerminalOutputStream(streamsProxy, encoding), 1024);
       addListeners(terminalControl, streamsProxy.getOutputStreamMonitor(), streamsProxy.getErrorStreamMonitor());
       if (streamsProxy != null) {
         terminalControl.setState(CONNECTED);
@@ -105,7 +107,7 @@
 
   private void addListeners(ITerminalControl control, IStreamMonitor...monitors) throws UnsupportedEncodingException {
     for (IStreamMonitor monitor : monitors) {
-      addListener(monitor, new TerminalOutputListener(control));
+      addListener(monitor, new TerminalOutputListener(control, encoding));
     }
   }
 
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java
index d993d89..aafd129 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputListener.java
@@ -8,8 +8,6 @@
  */
 package com.google.eclipse.terminal.local.core.connector;
 
-import static com.google.eclipse.terminal.local.core.connector.LocalTerminalConnector.ENCODING;
-
 import java.io.*;
 
 import org.eclipse.debug.core.IStreamListener;
@@ -23,16 +21,15 @@
 class TerminalOutputListener implements IStreamListener {
   private final PrintStream printStream;
 
-  TerminalOutputListener(ITerminalControl control) throws UnsupportedEncodingException {
-    printStream = new PrintStream(control.getRemoteToTerminalOutputStream(), true, ENCODING);
+  TerminalOutputListener(ITerminalControl control, String encoding) throws UnsupportedEncodingException {
+    printStream = new PrintStream(control.getRemoteToTerminalOutputStream(), true, encoding);
   }
 
   @Override public void streamAppended(String text, IStreamMonitor monitor) {
-    String clean = text;
     if (text.contains("\u001b[1A\u001b[K")) {
-      clean = text.replace("\u001b[1A\u001b[K", "\u001b[K");
+      // clean = text.replace("\u001b[1A\u001b[K", "\u001b[K");
       // TODO(alruiz) figure out why 1+ lines deleted in blaze build.
     }
-    printStream.print(clean);
+    printStream.print(text);
   }
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java
index dff8e4f..aff8254 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/core/connector/TerminalOutputStream.java
@@ -31,6 +31,7 @@
 
   @Override
   public void write(byte[] b, int off, int len) throws IOException {
-    streamsProxy.write(new String(b, off, len, encoding));
+    String input = new String(b, off, len, encoding);
+    streamsProxy.write(input);
   }
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
index 3be64a7..7f592fe 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
@@ -8,10 +8,12 @@
  */
 package com.google.eclipse.terminal.local.ui.view;
 
-
 import static com.google.eclipse.terminal.local.core.connector.LocalTerminalConnector.createLocalTerminalConnector;
+import static com.google.eclipse.terminal.local.util.Encodings.DEFAULT_ENCODING;
 import static com.google.eclipse.tm.internal.terminal.provisional.api.TerminalState.CONNECTING;
 
+import java.io.UnsupportedEncodingException;
+
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jface.layout.*;
 import org.eclipse.swt.SWT;
@@ -34,13 +36,20 @@
   private final VT100TerminalControl terminalControl;
 
   private LifeCycleListener lifeCycleListener;
+  private final String encoding = DEFAULT_ENCODING;
 
   TerminalWidget(Composite parent, IViewSite viewSite) {
     super(parent, SWT.NONE);
     GridLayoutFactory.fillDefaults().spacing(0, 0).applyTo(this);
-    ITerminalConnector terminalConnector = createLocalTerminalConnector();
+    ITerminalConnector terminalConnector = createLocalTerminalConnector(encoding);
     terminalControl = new VT100TerminalControl(terminalListener, this, new ITerminalConnector[] { terminalConnector });
     terminalControl.setConnector(terminalConnector);
+    try {
+      terminalControl.setEncoding(encoding);
+    } catch (UnsupportedEncodingException e) {
+      // TODO(alruiz): do something meaningful with the exception.
+      e.printStackTrace();
+    }
     GridDataFactory.fillDefaults().grab(true, true).applyTo(terminalControl.getRootControl());
     terminalControl.setInvertedColors(true);
     addDisposeListener(new DisposeListener() {
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java
new file mode 100644
index 0000000..1e5dd7b
--- /dev/null
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/util/Encodings.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.terminal.local.util;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public final class Encodings {
+  public static final String DEFAULT_ENCODING = "ISO-8859-1";
+
+  private Encodings() {}
+}