こんにちは

android端末のis01を最近、買いましたました。

http://au-is.jp/ 

ここをみてもis03が発表になってからはis01スマートフォンでは
なくなってしまいました。
OSも1.6のままで早く2.1にして欲しいです。

さくらのVPSも契約してて、SSHで接続してみたのですがConnectBotでは
Shift+数字ではファンションの入力になってしまい記号が入力出来ませんでした。
ConnectBotはソースが公開されているとのことでちょっと調べてみたらファンションキーでなく
記号入力が出来るように修正が出来ました。

修正はすごく簡単で、TerminalKeyListener.javaのファンションキーに変換してる部分を
コメントアウトするだけで対応出来ました。

まずはソースのインストール
ダウンロードしたあとEclipseへインポートしました。

http://code.google.com/p/connectbot/


調査の様子
ソースにログ表示を追加してshftを押した時の処理を探し出しました。

このif文をコメントアウトします。

				/***
				// handle pressing f-keys
				if ((hardKeyboard && !hardKeyboardHidden)
						&& (curMetaState & KeyEvent.META_SHIFT_ON) != 0
						&& sendFunctionKey(keyCode)){
					Log.v(TAG,"onKey handle pressing f-keys");	//debug
					return true;
				}
				***/

Eclipseでのソース表示

修正はコメントアウトするだけでした。
実行してサーバへ接続してコンパイル、実行してみました。

ログイン直後

vim起動

Cのソースを入力

コンパイルと実行


このようにviを終了するときの!や#includeなどが入力出来てIS01自力でコンパイルデバッグが出来ました。
ソースを見ると右と左のSHIFTキーの判別が出来るみたいなので右SHIFTキーをCTRLに割り当てようかと思って
います。
絵・顔・記も判別できるのでこれはESCに割り当ててみます。



onKey(View v, int keyCode, KeyEvent event)
onKey(View v, int keyCode, KeyEvent event) が返す値はキー1つ1つを識別できるみたいです。

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");

int key = keymap.get(keyCode, curMetaState);
keymap.get()はアスキーコードに対応した値みたいです。

				int key = keymap.get(keyCode, curMetaState);

				String s2 = String.format("keymap.get = %02x", key);
				Log.v(TAG,s2);	//debug

				if ((metaState & META_CTRL_MASK) != 0) {
					metaState &= ~META_CTRL_ON;
					Log.v(TAG,"META_CTRL_MASK");	//debug
					bridge.redraw();