[心得] testAsc雜談

作者: ypf791 (路人1號)   2012-10-07 02:17:59
開始玩testAsc了
一開始就發現我的程式編譯不過 上版一查
FLAG的問題 comment掉就沒事了 (#1GR_Es0d (EE_DSnP))
正常編譯後開始測按鍵 結果所有非字元鍵全死...
原來是因為cmdCharDef.cpp裡面的處理函數只處理了單碼按鍵
雙碼以上都是空的
於是先把下面助教會用的那段code毫不猶豫的抄過來
重新編譯後 開始讀的到特殊碼了
但是!! Backspace, Home, End這三個按鍵沒有正常顯示
不幸啊...
====以下正文====
真的像我這麼不幸(好吧只有三個鍵已經很幸福了)的話要怎麼辦
基本上就是"讓程式看懂這串輸入是啥鬼"
所以第一件事就是紀錄自己的按鍵傳出怎樣的碼
以我的例子 Home傳出來的是27->79->72
End傳出來的是27->79->70
什麼? 你問我怎麼知道的?
就算認不得你的按鍵 testAsc還是會老實的印出來啊(笑)
接下來是分析
首先我們觀察助教的鍵盤
cmdCharDef.h Line:54開始是enum ParseChar的定義
這裡面包含了所有按鍵會傳出來的碼 大致上分為
1) 所有系統都一樣的單碼字元(Line 56:63)
Tab啦Enter啦Esc啦大概都在這裡
2) 跟系統有關的單碼字元(Line 65:78)
只有一個Backspace
3) 跟系統有關的多碼字元(Line 80:105)
Arrow keys & Mod keys
4) 未定義字元, 嗶一聲等等根本跟鍵盤無關的常數
我們可能需要改動的地方是2和3
我很幸運的 Backspace跟助教一樣是127
所以把助教的抄過來就好了
為了讓我們能適當的定義對應到自己按鍵的常數 我們要先了解編碼規則
第三區的按鍵編碼規則 以助教的鍵盤為例
Ex: ARROW_UP = 27 -> 91 -> 65
第一碼是特殊按鍵識別 一定是Esc
第二碼是特殊按鍵種類識別 助教的鍵盤在這裡沒有分別 Arrow和Mod都是91
像我的鍵盤就有分91和79的
第三碼是區分特殊按鍵 像UP是65 DOWN是66 諸如此類
Ex: PG_UP = 27 -> 91 -> 53 -> 126
前三碼的意義同上
第四碼是後綴修飾 助教的Mod鍵全都有這個後綴
接著來分析自己的按鍵的編碼規則
以我的為例 就是Esc -> [種類識別碼79] -> [識別碼]
所以就這樣定義常數:
//
//
作者: jackervator (jokerlin)   2012-10-07 02:49:00
推一下
作者: OckhamsRazor (魏格納的友人)   2012-10-07 11:36:00
推原PO 我也是這三個鍵不一樣XD
作者: vegired (翠玉白菜)   2012-10-07 22:35:00
推一下,我這三個鍵也是另外改的XD
作者: ric2k1 (Ric)   2012-10-07 23:30:00
很實用的心得分享,先置底一下到 HW#2 due!!
作者: XDucka (Duck)   2012-10-09 21:49:00
如果is Arrowkey那樣寫 不是要先確定 home 跟 uparrow雖然flag不一樣 但是也要確定key值不一樣 要是 pageup也是53leftarrow也是53不就G了@@ 既然這個不會重複 那當初幹嘛要多設定這種27 -> 91 -> xx 的方法阿..
作者: taldehyde (阿肥)   2012-10-12 20:47:00
可以問一下1<<10的意思嗎?
作者: OckhamsRazor (魏格納的友人)   2012-10-12 21:04:00
樓上裝弱...
作者: taldehyde (阿肥)   2012-10-12 21:17:00
樓上別這樣...後來查到是bitwise-shifting
作者: andy13579372 (痘糖)   2012-10-13 22:48:00
感謝樓上 剛自D了一篇同樣的問題文
作者: abc346289   2012-10-14 00:19:00
所以意思是說我的home是27->79->72改完之後執行testAsc按home顯示"27 79 72 Home key"這樣就是完成了嗎?
作者: ric2k1 (Ric)   2012-10-14 13:44:00
會顯示 Home Key 而且再按下一個 key 也是正常的話,應該就是 OK 囉!
作者: ss355227 (前祐)   2012-10-18 03:49:00
自己改完的經驗,如果定義成MY_HOME_KEY,testAsc好像會看不懂,應該只要HOME_KEY就好了 好像是原本就定好了
作者: Phantasnix (凰響)   2012-10-18 20:36:00
參看這篇心得指點了自己的迷惑,感謝這麼用心又條理明晰的心得 <(_ _)>
作者: ypf791 (路人1號)   2012-10-19 00:55:00
姆...其實我的意思是checkChar裡面 判斷用MY_KEY_INT和MY_KEY_FLAG之類的 但是return的時候用已經定義過的直接回傳MY_HOME_KEY的話的確會看不懂

Links booklink

Contact Us: admin [ a t ] ucptt.com