aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Palevich <jackpal@google.com>2012-10-07 14:05:01 -0700
committerJack Palevich <jackpal@google.com>2012-10-07 14:05:01 -0700
commit9af48dc011705c6bf41d3aff43259df95e2eb920 (patch)
tree2bd0daf127d3af0ff5a9a2db024f89894116be74
parent3e2263bb43b75490c17272a73bea513c6b0120a2 (diff)
downloadAndroidTerm-9af48dc011705c6bf41d3aff43259df95e2eb920.tar.gz
Tweaks to Alt-sends-esc
+ Move to the Keyboard section of preferences. + On by default. (and now we actually honor the default.) + Rework preference text to make it clearer. + Rename string resource id names to make their role clearer. + Add support for setting the high bit instead of sending ESC. - I think there are more people who want this than the original composing logic. + Treat the Meta key the same way as the Alt key. - I considered having this be a separate preference, but there's a flaw: Some keyboards such as the popular Hacker's keyboard have a key labeled "Alt" that actually reports as "Meta" in software. So let's treat both Alt and Meta the same for now. + Make this code work on Android SDK 11+ physical keyboards Android SDK 11+ physical keyboards are "chording" as opposed to "toggling". Therefore we have to handle the !allowToggle case. Also, the Meta flags can come in as a combination of 3 bits, so to mask them off we need to mask with META_ALT_MASK rather than just META_ALT_ON.
-rw-r--r--libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java2
-rw-r--r--libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java30
-rw-r--r--res/values/defaults.xml2
-rw-r--r--res/values/strings.xml8
-rw-r--r--res/xml/preferences.xml7
-rw-r--r--src/jackpal/androidterm/util/TermSettings.java5
6 files changed, 44 insertions, 10 deletions
diff --git a/libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java b/libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java
index fcd43e1..3005b62 100644
--- a/libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java
+++ b/libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java
@@ -1243,7 +1243,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
}
/**
- * Set whether to prepend the ESC keycode to the character when when pressing
+ * Set whether to prepend the ESC keycode to the character when when pressing
* the ALT Key.
* @param flag
*/
diff --git a/libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java b/libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java
index 6f20c5f..304d97f 100644
--- a/libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java
+++ b/libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java
@@ -492,6 +492,8 @@ class TermKeyListener {
private static final int META_CTRL_ON = 0x1000;
private static final int META_SHIFT_ON = 1;
private static final int META_CTRL_MASK = 0x7000;
+ private static final int META_META_ON = 0x00010000;
+ private static final int META_META_MASK = 0x00070000;
private String[] mKeyCodes = new String[256];
private String[] mAppKeyCodes = new String[256];
@@ -795,6 +797,7 @@ class TermKeyListener {
}
int result = -1;
boolean chordedCtrl = false;
+ boolean setHighBit = false;
switch (keyCode) {
case KeyEvent.KEYCODE_ALT_RIGHT:
case KeyEvent.KEYCODE_ALT_LEFT:
@@ -833,12 +836,32 @@ class TermKeyListener {
if (effectiveCaps) {
effectiveMetaState |= KeyEvent.META_SHIFT_ON;
}
+ if (!allowToggle && (effectiveMetaState & META_ALT_ON) != 0) {
+ effectiveAlt = true;
+ }
if (effectiveAlt) {
if (mAltSendsEsc) {
mTermSession.write(new byte[]{0x1b},0,1);
- effectiveMetaState &= ~KeyEvent.META_ALT_ON;
+ effectiveMetaState &= ~KeyEvent.META_ALT_MASK;
+ } else {
+ // Legacy behavior: Pass Alt through to allow composing characters.
+ // effectiveMetaState |= KeyEvent.META_ALT_ON;
+ setHighBit = true;
+ effectiveMetaState &= ~KeyEvent.META_ALT_MASK;
+ }
+ }
+
+ // Note: The Hacker keyboard IME key labeled Alt actually sends Meta.
+
+ // Either send an ESC, or set the high bit of the character.
+
+ if ((metaState & KeyEvent.META_META_ON) != 0) {
+ if (mAltSendsEsc) {
+ mTermSession.write(new byte[]{0x1b},0,1);
+ effectiveMetaState &= ~KeyEvent.META_META_MASK;
} else {
- effectiveMetaState |= KeyEvent.META_ALT_ON;
+ setHighBit = true;
+ effectiveMetaState &= ~KeyEvent.META_META_MASK;
}
}
result = event.getUnicodeChar(effectiveMetaState);
@@ -854,6 +877,9 @@ class TermKeyListener {
if (result >= KEYCODE_OFFSET) {
handleKeyCode(result - KEYCODE_OFFSET, appMode);
} else if (result >= 0) {
+ if (setHighBit) {
+ result |= 0x80;
+ }
mTermSession.write(result);
}
}
diff --git a/res/values/defaults.xml b/res/values/defaults.xml
index bd2868f..1ccc579 100644
--- a/res/values/defaults.xml
+++ b/res/values/defaults.xml
@@ -8,11 +8,11 @@
<string name="pref_fontsize_default">10</string>
<string name="pref_color_default">1</string>
<bool name="pref_utf8_by_default_default">false</bool>
- <bool name="pref_alt_sends_esc_off_default">false</bool>
<string name="pref_backaction_default">2</string>
<string name="pref_controlkey_default">5</string>
<string name="pref_fnkey_default">4</string>
<string name="pref_ime_default">0</string>
+ <bool name="pref_alt_sends_esc_default">true</bool>
<string name="pref_shell_default">/system/bin/sh -</string>
<string name="pref_initialcommand_default"></string>
<string name="pref_termtype_default">screen</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ad08dda..8d3022d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -144,7 +144,9 @@
<string name="email_transcript_subject">Transcript from Android Terminal Emulator</string>
<string name="email_transcript_chooser_title">Mail transcript using:</string>
<string name="email_transcript_no_email_activity_found">Could not choose an email activity to send transcript.</string>
- <string name="alt_sends_esc">Alt sends ESC</string>
- <string name="alt_compose_char">Alt composes characters</string>
- <string name="alt_key_behavior">Alt Key Behaviour</string>
+
+ <string name="alt_sends_esc">Alt key sends ESC</string>
+ <string name="alt_sends_esc_summary_on">Alt key sends ESC.</string>
+ <string name="alt_sends_esc_summary_off">Alt key sets high bit.</string>
+
</resources>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index d9edec7..55a348d 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -87,7 +87,6 @@
android:defaultValue="@bool/pref_utf8_by_default_default"
android:title="@string/title_utf8_by_default_preference"
android:summary="@string/summary_utf8_by_default_preference" />
- <CheckBoxPreference android:title="@string/alt_key_behavior" android:key="alt_key_behavior" android:defaultValue="@bool/pref_alt_sends_esc_off_default" android:summaryOn="@string/alt_sends_esc" android:summaryOff="@string/alt_compose_char"/>
</PreferenceCategory>
@@ -130,6 +129,12 @@
android:entryValues="@array/entryvalues_ime_preference"
android:dialogTitle="@string/dialog_title_ime_preference" />
+ <CheckBoxPreference android:title="@string/alt_sends_esc"
+ android:key="alt_sends_esc"
+ android:defaultValue="@bool/pref_alt_sends_esc_default"
+ android:summaryOn="@string/alt_sends_esc_summary_on"
+ android:summaryOff="@string/alt_sends_esc_summary_off" />
+
</PreferenceCategory>
<PreferenceCategory
diff --git a/src/jackpal/androidterm/util/TermSettings.java b/src/jackpal/androidterm/util/TermSettings.java
index fba5912..cd76ade 100644
--- a/src/jackpal/androidterm/util/TermSettings.java
+++ b/src/jackpal/androidterm/util/TermSettings.java
@@ -51,7 +51,7 @@ public class TermSettings {
private String mPrependPath = null;
private String mAppendPath = null;
- private boolean mAltSendsEsc;
+ private boolean mAltSendsEsc;
private static final String STATUSBAR_KEY = "statusbar";
private static final String ACTIONBAR_KEY = "actionbar";
@@ -71,7 +71,7 @@ public class TermSettings {
private static final String VERIFYPATH_KEY = "verify_path";
private static final String PATHEXTENSIONS_KEY = "do_path_extensions";
private static final String PATHPREPEND_KEY = "allow_prepend_path";
- private static final String ALT_SENDS_ESC = "alt_key_behavior";
+ private static final String ALT_SENDS_ESC = "alt_sends_esc";
public static final int WHITE = 0xffffffff;
public static final int BLACK = 0xff000000;
@@ -156,6 +156,7 @@ public class TermSettings {
mVerifyPath = res.getBoolean(R.bool.pref_verify_path_default);
mDoPathExtensions = res.getBoolean(R.bool.pref_do_path_extensions_default);
mAllowPathPrepend = res.getBoolean(R.bool.pref_allow_prepend_path_default);
+ mAltSendsEsc = res.getBoolean(R.bool.pref_alt_sends_esc_default);
}
public void readPrefs(SharedPreferences prefs) {