■
こんばんわ
あれからソースを見てて、
metaPress(META_CTRL_ON); を実行すればCTRLが押されたことに、
sendEscape(); を実行すればESCが押されたことになることがわかりました。
デバッグログにて「絵・顔・記」と「文字」のキーコードを調べました。
onkey()に渡されるとkeyCodeを表示してみると、
「絵・顔・記」キーは92、「文字」は93となりました。
public boolean onKey(View v, int keyCode, KeyEvent event) { try { final boolean hardKeyboardHidden = manager.hardKeyboardHidden; String s = String.format("%d,%d ", event.getAction(), keyCode); Log.v(TAG,"onKey1 " +s); //debug //Log.v(TAG,"onKey2"); // Ignore all key-up events except for the special keys if (event.getAction() == KeyEvent.ACTION_UP) {
ソースを変更する箇所は、
ファイル
TerminalKeyListener.java
クラス
public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceChangeListener {
private static final String TAG = "ConnectBot.OnKeyListener";
メソッド
public boolean onKey(View v, int keyCode, KeyEvent event)
// look for special chars を処理するcase文に92と93を追加しました。
// look for special chars
// look for special chars switch(keyCode) { case KeyEvent.KEYCODE_CAMERA:
追加したソース
case KeyEvent.KEYCODE_DPAD_RIGHT: if (selectingForCopy) { selectionArea.incrementColumn(); bridge.redraw(); } else { ((vt320) buffer).keyPressed(vt320.KEY_RIGHT, ' ', getStateForBuffer()); metaState &= ~META_TRANSIENT; bridge.tryKeyVibrate(); } return true; case KeyEvent.KEYCODE_DPAD_CENTER: if (selectingForCopy) { if (selectionArea.isSelectingOrigin()) selectionArea.finishSelectingOrigin(); else { if (clipboard != null) { // copy selected area to clipboard String copiedText = selectionArea.copyFrom(buffer); clipboard.setText(copiedText); // XXX STOPSHIP // manager.notifyUser(manager.getString( // R.string.console_copy_done, // copiedText.length())); selectingForCopy = false; selectionArea.reset(); } } } else { if ((metaState & META_CTRL_ON) != 0) { sendEscape(); metaState &= ~META_CTRL_ON; } else metaPress(META_CTRL_ON); } bridge.redraw(); return true; case 92: //絵・顔・記 キーをCTRLに割り当てる metaPress(META_CTRL_ON); bridge.redraw(); return true; case 93: //文字キーをESCに割り当てる sendEscape(); bridge.redraw(); return true; } } catch (IOException e) { Log.e(TAG, "Problem while trying to handle an onKey() event", e); try { bridge.transport.flush(); } catch (IOException ioe) { Log.d(TAG, "Our transport was closed, dispatching disconnect event"); bridge.dispatchDisconnect(false); } } catch (NullPointerException npe) { Log.d(TAG, "Input before connection established ignored."); return true; } Log.v(TAG,"onKey8"); Log.v(TAG,"hardKeyboardHidden return"); //debug return false; }
もともと、特殊キーの入力でCTRLとESCを入力する仕組みがありましたのでそれを流用しました。
結果的に少しの修正で、記号、CTRL、ESCの入力が出来るようになりました。
これにより、SSHでログインしてOSの操作やviの操作も普通に出来るようになりました。
さくらのVPSと組み合わせることによりどこでもプログラミングやサーバ管理が出来るのがちょっと嬉しいです。