From 765da599f0bf190d7507f8bc02c2732f67afc307 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Wed, 19 Nov 2008 21:11:39 +0000 Subject: * Respond to channel EOF instead of exit status. * Make ESC-c clear the buffer like other terminal emulators. --- src/de/mud/terminal/vt320.java | 9 +++++++-- src/org/connectbot/service/TerminalBridge.java | 23 ++++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/de/mud/terminal/vt320.java b/src/de/mud/terminal/vt320.java index ef9665b..0675fda 100644 --- a/src/de/mud/terminal/vt320.java +++ b/src/de/mud/terminal/vt320.java @@ -30,10 +30,10 @@ import java.util.Properties; /** * Implementation of a VT terminal emulation plus ANSI compatible. *

- * Maintainer: Marcus Mei§ner + * Maintainer: Marcus Mei�ner * * @version $Id: vt320.java 507 2005-10-25 10:14:52Z marcus $ - * @author Matthias L. Jugel, Marcus Mei§ner + * @author Matthias L. Jugel, Marcus Mei�ner */ public abstract class vt320 extends VDUBuffer implements VDUInput { @@ -1675,6 +1675,11 @@ public abstract class vt320 extends VDUBuffer implements VDUInput { for (int i = 0; i < nw; i += 8) { Tabs[i] = 1; } + deleteArea(0, 0, columns, rows, attributes); + setMargins(0, rows); + C = R = 0; + _SetCursor(0, 0); + showCursor(true); /*FIXME:*/ break; case '[': diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index d91a21f..5acad32 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -557,27 +557,28 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal int conditions = ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA | ChannelCondition.CLOSED - | ChannelCondition.EXIT_STATUS - | ChannelCondition.EXIT_SIGNAL; + | ChannelCondition.EOF; int newConditions = 0; while((newConditions & ChannelCondition.CLOSED) == 0) { try { newConditions = session.waitForCondition(conditions, 0); if ((newConditions & ChannelCondition.STDOUT_DATA) != 0) { - n = stdout.read(b); - if (n > 0) { + while (stdout.available() > 0) { + n = stdout.read(b); ((vt320)buffer).putString(new String(b, 0, n, ENCODING)); - redraw(); } + redraw(); } if ((newConditions & ChannelCondition.STDERR_DATA) != 0) { - n = stderr.read(b); - // TODO I don't know.. do we want this? We were ignoring it before - Log.d(TAG, String.format("Read data from stderr: %s", new String(b, 0, n, ENCODING))); + while (stderr.available() > 0) { + n = stderr.read(b); + // TODO I don't know.. do we want this? We were ignoring it before + Log.d(TAG, String.format("Read data from stderr: %s", new String(b, 0, n, ENCODING))); + } } - if ((newConditions & (ChannelCondition.EXIT_STATUS | ChannelCondition.EXIT_SIGNAL)) != 0) { + if ((newConditions & ChannelCondition.EOF) != 0) { // The other side closed our channel, so let's disconnect. // TODO review whether any tunnel is in use currently. dispatchDisconnect(); @@ -802,7 +803,11 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal Log.d(TAG, "Our stdin was closed, dispatching disconnect event"); dispatchDisconnect(); } + } catch (NullPointerException npe) { + Log.d(TAG, "Input before connection established ignored."); + return true; } + return false; } -- cgit v1.2.3