ConnectBotの改造

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

端末(P-01D)+キーボード(BK-2000BTII)+BlueKeyboard JP+クライアント(ConnectBot)で、サーバの再起動くらい出来るようにしようとしたけど、コントロール(ctrl)キーが効かなくて困ったのでConnectBotを改造してみた。

参考にしたサイトは↓

改造した点は、

  • ctrlキーを効くように
  • ‘/'キーが押しづらいので、右のshiftキーを'/'キーに

BK-2000BTIIは、↓

IMG_3709
もう売ってないっぽい。

ConnectBotのソースは、connectbot/connectbot · GitHub で公開されている。ライセンスは、 License 2.0とのこと。

ctrl、右側shift、'/'キーのキーコード、スキャンコードをログ出力させて、調査した所

  keyCode meta scanCode
ctrl 0 0 327
右側shift 0 129 54
‘/' 76 0 53

だった。

改造したソースは、↓。

13-12-15 13:47% git diff | col -b
diff --git a/src/org/connectbot/service/TerminalKeyListener.java b/src/org/connectbot/service/TerminalKeyListener.java
index 3f82259..61858bd 100644
--- a/src/org/connectbot/service/TerminalKeyListener.java
+++ b/src/org/connectbot/service/TerminalKeyListener.java
@@ -79,6 +79,7 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
        private boolean volumeKeysChangeFontSize;

        private int ourMetaState = 0;
+       private int ctrlFlag = 0;

        private int mDeadKey = 0;

@@ -133,6 +134,24 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                        final boolean controlNumbersAreFKeys = controlNumbersAreFKeysOnSoftKeyboard &&
                                        !interpretAsHardKeyboard;

+                       if (keyCode ==0
+                               && event.getScanCode() == 327
+                               && event.getAction() == KeyEvent.ACTION_UP) {
+                               ctrlFlag = 0;
+                               ourMetaState &= ~OUR_CTRL_ON;
+                               bridge.redraw();
+                               return true;
+                       }
+
+                       if (keyCode == 0
+                               && event.getScanCode() == 54){
+                               event = new KeyEvent(event.getDownTime(), event.getEventTime(),
+                                                                        event.getAction(), 76,
+                                                                        event.getRepeatCount(), 0,
+                                                                        event.getDeviceId(), 53,
+                                                                        event.getFlags());
+                       }
+
                        // Ignore all key-up events except for the special keys
                        if (event.getAction() == KeyEvent.ACTION_UP) {
                                if (rightModifiersAreSlashAndTab) {
@@ -258,6 +277,16 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                                return true;
                        }

+                       if(keyCode == 0){
+                               if(event.getScanCode() == 327
+                                  && event.getAction() == KeyEvent.ACTION_DOWN){
+                                       ctrlFlag = 1;
+                                       metaPress(OUR_CTRL_ON);
+                                       bridge.redraw();
+                                       return true;
+                               }
+                       }
+
                        int derivedMetaState = event.getMetaState();
                        if ((ourMetaState & OUR_SHIFT_MASK) != 0)
                                derivedMetaState |= KeyEvent.META_SHIFT_ON;
@@ -267,8 +296,11 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                                derivedMetaState |= HC_META_CTRL_ON;

                        if ((ourMetaState & OUR_TRANSIENT) != 0) {
-                               ourMetaState &= ~OUR_TRANSIENT;
-                               bridge.redraw();
+                               if(ctrlFlag != 0){
+                               } else{
+                                       ourMetaState &= ~OUR_TRANSIENT;
+                                       bridge.redraw();
+                               }
                        }

                        // Test for modified numbers becoming function keys
@@ -550,3 +582,4 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                this.encoding = encoding;
        }
 }

ctrlFlagを追加して使ってるのは、ライクなキーバインドを常用している関係で、連続でctrlキーを使えるように無理やり。

カテゴリー: プログラム, モバイル タグ: , , , , , , , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です