From d1478fb6c3e112cb08c319254da5c898646481c6 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Mon, 23 Aug 2021 08:56:36 +0500 Subject: [PATCH] Fixed: Ensure `FN` extra key is read by the terminal Can't find info on why it wasn't being read before --- .../com/termux/app/terminal/TermuxTerminalViewClient.java | 5 +++++ .../src/main/java/com/termux/view/TerminalView.java | 5 ++++- .../src/main/java/com/termux/view/TerminalViewClient.java | 2 ++ .../shared/terminal/TermuxTerminalViewClientBase.java | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java index 329a8633..d59f5dba 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java @@ -302,6 +302,11 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase { return readExtraKeysSpecialButton(SpecialButton.SHIFT); } + @Override + public boolean readFnKey() { + return readExtraKeysSpecialButton(SpecialButton.FN); + } + public boolean readExtraKeysSpecialButton(SpecialButton specialButton) { if (mActivity.getExtraKeysView() == null) return false; Boolean state = mActivity.getExtraKeysView().readSpecialButton(specialButton, true); diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index 198c328b..88537878 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -599,6 +599,7 @@ public final class TerminalView extends View { final boolean controlDown = event.isCtrlPressed() || mClient.readControlKey(); final boolean leftAltDown = (metaState & KeyEvent.META_ALT_LEFT_ON) != 0 || mClient.readAltKey(); final boolean shiftDown = event.isShiftPressed() || mClient.readShiftKey(); + final boolean fnDown = event.isFunctionPressed() || mClient.readFnKey(); final boolean rightAltDownFromEvent = (metaState & KeyEvent.META_ALT_RIGHT_ON) != 0; int keyMod = 0; @@ -606,7 +607,8 @@ public final class TerminalView extends View { if (event.isAltPressed() || leftAltDown) keyMod |= KeyHandler.KEYMOD_ALT; if (shiftDown) keyMod |= KeyHandler.KEYMOD_SHIFT; if (event.isNumLockOn()) keyMod |= KeyHandler.KEYMOD_NUM_LOCK; - if (!event.isFunctionPressed() && handleKeyCode(keyCode, keyMod)) { + // https://github.com/termux/termux-app/issues/731 + if (!fnDown && handleKeyCode(keyCode, keyMod)) { if (TERMINAL_VIEW_KEY_LOGGING_ENABLED) mClient.logInfo(LOG_TAG, "handleKeyCode() took key event"); return true; } @@ -622,6 +624,7 @@ public final class TerminalView extends View { int effectiveMetaState = event.getMetaState() & ~bitsToClear; if (shiftDown) effectiveMetaState |= KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON; + if (fnDown) effectiveMetaState |= KeyEvent.META_FUNCTION_ON; int result = event.getUnicodeChar(effectiveMetaState); if (TERMINAL_VIEW_KEY_LOGGING_ENABLED) diff --git a/terminal-view/src/main/java/com/termux/view/TerminalViewClient.java b/terminal-view/src/main/java/com/termux/view/TerminalViewClient.java index d68ccbca..d6b49b89 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalViewClient.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalViewClient.java @@ -56,6 +56,8 @@ public interface TerminalViewClient { boolean readShiftKey(); + boolean readFnKey(); + boolean onCodePoint(int codePoint, boolean ctrlDown, TerminalSession session); diff --git a/termux-shared/src/main/java/com/termux/shared/terminal/TermuxTerminalViewClientBase.java b/termux-shared/src/main/java/com/termux/shared/terminal/TermuxTerminalViewClientBase.java index cf3d940c..167ec6bc 100644 --- a/termux-shared/src/main/java/com/termux/shared/terminal/TermuxTerminalViewClientBase.java +++ b/termux-shared/src/main/java/com/termux/shared/terminal/TermuxTerminalViewClientBase.java @@ -67,10 +67,16 @@ public class TermuxTerminalViewClientBase implements TerminalViewClient { return false; } + @Override public boolean readShiftKey() { return false; } + @Override + public boolean readFnKey() { + return false; + } + @Override