diff options
author | Kenny Root <kenny@the-b.org> | 2009-06-15 22:08:03 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-06-15 22:08:03 +0000 |
commit | 157b17bc041925d7a187f90e7a352dd915823c48 (patch) | |
tree | 89842dc07a97800631776e940be8f2447c46e368 | |
parent | d5945e821483477ca23f4998f8f310c53ccba2ab (diff) | |
download | connectbot-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.xml | 14 | ||||
-rw-r--r-- | res/values/strings.xml | 10 | ||||
-rw-r--r-- | res/xml/host_prefs.xml | 10 | ||||
-rw-r--r-- | src/com/nullwire/trace/DefaultExceptionHandler.java | 1 | ||||
-rw-r--r-- | src/de/mud/terminal/vt320.java | 23 | ||||
-rw-r--r-- | src/org/connectbot/bean/HostBean.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/util/HostDatabase.java | 14 |
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)); |