aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2008-11-19 21:11:39 +0000
committerKenny Root <kenny@the-b.org>2008-11-19 21:11:39 +0000
commit765da599f0bf190d7507f8bc02c2732f67afc307 (patch)
tree66afe06b3a645ab7b115702507b9f101581f2200 /src
parent6311f174c4b5b2d15f7af4b046afa027b3b049f7 (diff)
downloadconnectbot-765da599f0bf190d7507f8bc02c2732f67afc307.tar.gz
connectbot-765da599f0bf190d7507f8bc02c2732f67afc307.tar.bz2
connectbot-765da599f0bf190d7507f8bc02c2732f67afc307.zip
* Respond to channel EOF instead of exit status.
* Make ESC-c clear the buffer like other terminal emulators.
Diffstat (limited to 'src')
-rw-r--r--src/de/mud/terminal/vt320.java9
-rw-r--r--src/org/connectbot/service/TerminalBridge.java23
2 files changed, 21 insertions, 11 deletions
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.
* <P>
- * <B>Maintainer:</B> Marcus Mei§ner
+ * <B>Maintainer:</B> 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;
}