diff options
author | Jack Palevich <jackpal@google.com> | 2012-10-07 14:05:01 -0700 |
---|---|---|
committer | Jack Palevich <jackpal@google.com> | 2012-10-07 14:05:01 -0700 |
commit | 9af48dc011705c6bf41d3aff43259df95e2eb920 (patch) | |
tree | 2bd0daf127d3af0ff5a9a2db024f89894116be74 | |
parent | 3e2263bb43b75490c17272a73bea513c6b0120a2 (diff) | |
download | AndroidTerm-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.java | 2 | ||||
-rw-r--r-- | libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java | 30 | ||||
-rw-r--r-- | res/values/defaults.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 8 | ||||
-rw-r--r-- | res/xml/preferences.xml | 7 | ||||
-rw-r--r-- | src/jackpal/androidterm/util/TermSettings.java | 5 |
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) { |