aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-06-15 22:08:03 +0000
committerKenny Root <kenny@the-b.org>2009-06-15 22:08:03 +0000
commit157b17bc041925d7a187f90e7a352dd915823c48 (patch)
tree89842dc07a97800631776e940be8f2447c46e368
parentd5945e821483477ca23f4998f8f310c53ccba2ab (diff)
downloadconnectbot-157b17bc041925d7a187f90e7a352dd915823c48.tar.gz
connectbot-157b17bc041925d7a187f90e7a352dd915823c48.tar.bz2
connectbot-157b17bc041925d7a187f90e7a352dd915823c48.zip
Add configurable backspace key
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@303 df292f66-193f-0410-a5fc-6d59da041ff2
-rw-r--r--res/values/arrays.xml14
-rw-r--r--res/values/strings.xml10
-rw-r--r--res/xml/host_prefs.xml10
-rw-r--r--src/com/nullwire/trace/DefaultExceptionHandler.java1
-rw-r--r--src/de/mud/terminal/vt320.java23
-rw-r--r--src/org/connectbot/bean/HostBean.java8
-rw-r--r--src/org/connectbot/service/TerminalBridge.java8
-rw-r--r--src/org/connectbot/util/HostDatabase.java14
8 files changed, 75 insertions, 13 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 0b43279..ef89423 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -97,16 +97,14 @@
<item>Keyboard</item>
</string-array>
- <string-array name="list_encodings">
- <item>ASCII</item>
- <item>ISO 8859-1</item>
- <item>UTF-8</item>
+ <string-array name="list_delkey">
+ <item>@string/list_delkey_del</item>
+ <item>@string/list_delkey_backspace</item>
</string-array>
- <string-array name="list_encodings_value">
- <item>ASCII</item>
- <item>ISO8859_1</item>
- <item>UTF-8</item>
+ <string-array name="list_delkey_values">
+ <item>del</item>
+ <item>backspace</item>
</string-array>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e076ab6..c29b15c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -229,6 +229,11 @@
<!-- Summary for field asking whether a shell session should be started up upon connection or not -->
<string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+ <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+ <string name="hostpref_delkey_title">DEL Key</string>
+ <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+ <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
<!-- Host character encoding preference title -->
<string name="hostpref_encoding_title">Encoding</string>
<!-- Host character encoding preference summary -->
@@ -327,6 +332,11 @@
<!-- Selection to indicate pressing the Camera button should send nothing at all. -->
<string name="list_camera_none">None</string>
+ <!-- Name for the backspace character -->
+ <string name="list_delkey_backspace">Backspace</string>
+ <!-- Name for the ASCII DEL character -->
+ <string name="list_delkey_del">Delete</string>
+
<string name="delete_message">Are you sure you want to delete '%1$s'?</string>
<string name="delete_pos">Yes, delete</string>
<string name="delete_neg">Cancel</string>
diff --git a/res/xml/host_prefs.xml b/res/xml/host_prefs.xml
index d57f2ef..22b056c 100644
--- a/res/xml/host_prefs.xml
+++ b/res/xml/host_prefs.xml
@@ -63,11 +63,17 @@
/>
<ListPreference
+ android:key="delkey"
+ android:title="@string/hostpref_delkey_title"
+ android:summary="@string/hostpref_delkey_summary"
+ android:entries="@array/list_delkey"
+ android:entryValues="@array/list_delkey_values"
+ />
+
+ <ListPreference
android:key="encoding"
android:title="@string/hostpref_encoding_title"
android:summary="@string/hostpref_encoding_summary"
- android:entries="@array/list_encodings"
- android:entryValues="@array/list_encodings_value"
/>
<PreferenceCategory
diff --git a/src/com/nullwire/trace/DefaultExceptionHandler.java b/src/com/nullwire/trace/DefaultExceptionHandler.java
index e475888..66a79bd 100644
--- a/src/com/nullwire/trace/DefaultExceptionHandler.java
+++ b/src/com/nullwire/trace/DefaultExceptionHandler.java
@@ -42,5 +42,6 @@ public class DefaultExceptionHandler implements UncaughtExceptionHandler {
Log.d(TAG, result.toString());
// FlurryAgent session has ended
t.getThreadGroup().destroy();
+// Thread.getDefaultUncaughtExceptionHandler().uncaughtException(t, e);
}
}
diff --git a/src/de/mud/terminal/vt320.java b/src/de/mud/terminal/vt320.java
index 0e92523..e962400 100644
--- a/src/de/mud/terminal/vt320.java
+++ b/src/de/mud/terminal/vt320.java
@@ -206,7 +206,12 @@ public void setScreenSize(int c, int r, boolean broadcast) {
BackSpace[2] = "\u0018"; // VMS control deletes line back
BackSpace[0] = BackSpace[3] = "\u007f"; // VMS other is delete
} else {
- BackSpace[0] = BackSpace[1] = BackSpace[2] = BackSpace[3] = "\b";
+ //BackSpace[0] = BackSpace[1] = BackSpace[2] = BackSpace[3] = "\b";
+ // ConnectBot modifications.
+ BackSpace[0] = "\b";
+ BackSpace[1] = "\u007f";
+ BackSpace[2] = "\u001b[3~";
+ BackSpace[3] = "\u001b[2~";
}
/* some more VT100 keys */
@@ -286,6 +291,19 @@ public void setScreenSize(int c, int r, boolean broadcast) {
NUMDot[0] = ".";
}
+ public void setBackspace(int type) {
+ switch (type) {
+ case DELETE_IS_DEL:
+ BackSpace[0] = "\u007f";
+ BackSpace[1] = "\b";
+ break;
+ case DELETE_IS_BACKSPACE:
+ BackSpace[0] = "\b";
+ BackSpace[1] = "\u007f";
+ break;
+ }
+ }
+
/**
* Create a default vt320 terminal with 80 columns and 24 lines.
*/
@@ -648,6 +666,9 @@ public void setScreenSize(int c, int r, boolean broadcast) {
public final static int KEY_ADD = 42;
public final static int KEY_ESCAPE = 43;
+ public final static int DELETE_IS_DEL = 0;
+ public final static int DELETE_IS_BACKSPACE = 1;
+
/* The graphics charsets
* B - default ASCII
* A - ISO Latin 1
diff --git a/src/org/connectbot/bean/HostBean.java b/src/org/connectbot/bean/HostBean.java
index 3dcdee5..f1be4a3 100644
--- a/src/org/connectbot/bean/HostBean.java
+++ b/src/org/connectbot/bean/HostBean.java
@@ -44,6 +44,7 @@ public class HostBean extends AbstractBean {
private String postLogin = null;
private long pubkeyId = -1;
private boolean wantSession = true;
+ private String delKey = HostDatabase.DELKEY_DEL;
private boolean compression = false;
private String encoding = HostDatabase.ENCODING_DEFAULT;
@@ -157,6 +158,12 @@ public class HostBean extends AbstractBean {
public boolean getWantSession() {
return wantSession;
}
+ public void setDelKey(String delKey) {
+ this.delKey = delKey;
+ }
+ public String getDelKey() {
+ return delKey;
+ }
public void setCompression(boolean compression) {
this.compression = compression;
}
@@ -198,6 +205,7 @@ public class HostBean extends AbstractBean {
values.put(HostDatabase.FIELD_HOST_POSTLOGIN, postLogin);
values.put(HostDatabase.FIELD_HOST_PUBKEYID, pubkeyId);
values.put(HostDatabase.FIELD_HOST_WANTSESSION, Boolean.toString(wantSession));
+ values.put(HostDatabase.FIELD_HOST_DELKEY, delKey);
values.put(HostDatabase.FIELD_HOST_COMPRESSION, Boolean.toString(compression));
values.put(HostDatabase.FIELD_HOST_ENCODING, encoding);
diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java
index 728e7eb..27edd2b 100644
--- a/src/org/connectbot/service/TerminalBridge.java
+++ b/src/org/connectbot/service/TerminalBridge.java
@@ -29,6 +29,7 @@ import org.connectbot.bean.PortForwardBean;
import org.connectbot.bean.SelectionArea;
import org.connectbot.transport.AbsTransport;
import org.connectbot.transport.TransportFactory;
+import org.connectbot.util.HostDatabase;
import org.connectbot.util.PreferenceConstants;
import android.content.Context;
@@ -362,6 +363,11 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
// "screen" works the best for color and escape codes
((vt320) buffer).setAnswerBack(emulation);
+ if (HostDatabase.DELKEY_BACKSPACE.equals(host.getDelKey()))
+ ((vt320) buffer).setBackspace(vt320.DELETE_IS_BACKSPACE);
+ else
+ ((vt320) buffer).setBackspace(vt320.DELETE_IS_DEL);
+
// create thread to relay incoming connection data to buffer
relay = new Relay(this, transport, (vt320) buffer, host.getEncoding());
Thread relayThread = new Thread(relay);
@@ -530,6 +536,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
key -= 0x40;
else if (key == 0x20)
key = 0x00;
+ else if (key == 0x3F)
+ key = 0x7F;
metaState &= ~META_CTRL_ON;
diff --git a/src/org/connectbot/util/HostDatabase.java b/src/org/connectbot/util/HostDatabase.java
index d2586c0..f8a4e3f 100644
--- a/src/org/connectbot/util/HostDatabase.java
+++ b/src/org/connectbot/util/HostDatabase.java
@@ -18,8 +18,8 @@
package org.connectbot.util;
-import java.util.Iterator;
import java.nio.charset.Charset;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -49,7 +49,7 @@ public class HostDatabase extends SQLiteOpenHelper {
public final static String TAG = "ConnectBot.HostDatabase";
public final static String DB_NAME = "hosts";
- public final static int DB_VERSION = 16;
+ public final static int DB_VERSION = 17;
public final static String TABLE_HOSTS = "hosts";
public final static String FIELD_HOST_NICKNAME = "nickname";
@@ -65,6 +65,7 @@ public class HostDatabase extends SQLiteOpenHelper {
public final static String FIELD_HOST_POSTLOGIN = "postlogin";
public final static String FIELD_HOST_PUBKEYID = "pubkeyid";
public final static String FIELD_HOST_WANTSESSION = "wantsession";
+ public final static String FIELD_HOST_DELKEY = "delkey";
public final static String FIELD_HOST_COMPRESSION = "compression";
public final static String FIELD_HOST_ENCODING = "encoding";
@@ -86,6 +87,9 @@ public class HostDatabase extends SQLiteOpenHelper {
public final static String PORTFORWARD_DYNAMIC4 = "dynamic4";
public final static String PORTFORWARD_DYNAMIC5 = "dynamic5";
+ public final static String DELKEY_DEL = "del";
+ public final static String DELKEY_BACKSPACE = "backspace";
+
public final static String ENCODING_DEFAULT = Charset.defaultCharset().name();
public final static long PUBKEYID_NEVER = -2;
@@ -115,6 +119,7 @@ public class HostDatabase extends SQLiteOpenHelper {
+ FIELD_HOST_USEKEYS + " TEXT, "
+ FIELD_HOST_POSTLOGIN + " TEXT, "
+ FIELD_HOST_PUBKEYID + " INTEGER DEFAULT " + PUBKEYID_ANY + ", "
+ + FIELD_HOST_DELKEY + " TEXT DEFAULT '" + DELKEY_DEL + "', "
+ FIELD_HOST_WANTSESSION + " TEXT DEFAULT '" + Boolean.toString(true) + "', "
+ FIELD_HOST_COMPRESSION + " TEXT DEFAULT '" + Boolean.toString(false) + "', "
+ FIELD_HOST_ENCODING + " TEXT DEFAULT '" + ENCODING_DEFAULT + "')");
@@ -165,6 +170,9 @@ public class HostDatabase extends SQLiteOpenHelper {
case 15:
db.execSQL("ALTER TABLE " + TABLE_HOSTS
+ " ADD COLUMN " + FIELD_HOST_PROTOCOL + " TEXT DEFAULT 'ssh'");
+ case 16:
+ db.execSQL("ALTER TABLE " + TABLE_HOSTS
+ + " ADD COLUMN " + FIELD_HOST_DELKEY + " TEXT DEFAULT '" + DELKEY_DEL + "'");
}
} catch (SQLiteException e) {
// The database has entered an unknown state. Try to recover.
@@ -316,6 +324,7 @@ public class HostDatabase extends SQLiteOpenHelper {
COL_POSTLOGIN = c.getColumnIndexOrThrow(FIELD_HOST_POSTLOGIN),
COL_PUBKEYID = c.getColumnIndexOrThrow(FIELD_HOST_PUBKEYID),
COL_WANTSESSION = c.getColumnIndexOrThrow(FIELD_HOST_WANTSESSION),
+ COL_DELKEY = c.getColumnIndexOrThrow(FIELD_HOST_DELKEY),
COL_COMPRESSION = c.getColumnIndexOrThrow(FIELD_HOST_COMPRESSION),
COL_ENCODING = c.getColumnIndexOrThrow(FIELD_HOST_ENCODING);
@@ -334,6 +343,7 @@ public class HostDatabase extends SQLiteOpenHelper {
host.setPostLogin(c.getString(COL_POSTLOGIN));
host.setPubkeyId(c.getLong(COL_PUBKEYID));
host.setWantSession(Boolean.valueOf(c.getString(COL_WANTSESSION)));
+ host.setDelKey(c.getString(COL_DELKEY));
host.setCompression(Boolean.valueOf(c.getString(COL_COMPRESSION)));
host.setEncoding(c.getString(COL_ENCODING));