mk18のプログラミング日記 RSSフィード

2010-10-11 android is01+ConnectBotでCTRLとESCが入力出来るようになりました

[][][]

こんばんわ

あれからソースを見てて、

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) {

keyCodeの値を表示した画面

f:id:mk18:20101011005019p:image

ソースを変更する箇所は、

ファイル

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と組み合わせることによりどこでもプログラミングサーバ管理が出来るのがちょっと嬉しいです。

Connection: close