作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] testAsc 中的 ESC
時間Mon Oct 10 00:32:20 2011
首先,單獨的 ESC 不用支援,所以大家可以左轉出去了。
但你如果好奇 testAsc 發生什麼事的話,可以往下看一下。
※ 引述《victoret (戲言~)》之銘言:
: 在執行修改過之後的 testAsc
: 按下 ESC 鍵後,螢幕上顯示如下
: 27 ^ (^ 代表游標所在位置)
: 這個時候假如輸入一些基本的符號鍵像是 abcd、@#$%、453 等等的
: 就會變成...
: 27 92 口 <--- 一個奇怪的框框,裡面寫著 0 0 (以 \ 為例)
: 這個數字不一定 1 0
: 假如輸入的是一些 functional 的按鍵像是 Ctrl + A、PgUp、Tab 等等
: 則會顯示出
: 27 27 91 68 Arrow left (以向左鍵為例)
: 這種形式的狀況...
: 後來又試著按一些其他的鍵...好像還有支援組合的樣子...
: 像是連續鍵入 Esc [ D
: 則會出現
: 27 91 68 Arrow left
: 請問這個問題要如何修正???
當 ESC 被按下之後,charDef.cpp 中的 checkChar() 就會進入 "case ESC:",
等待你再按另外一個鍵。
這是不論你案什麼鍵,像是 'a',
他就會被 "mygetc()" 吃掉 (note: 沒有東西在螢幕上哦),
但是他的 ASCII code 仍然會被存到 "char combo" 裏頭,
然後在接下來的檢查 "if (combo == char(MOD_KEY_INT))"
不成立,進入 else 之後就會 B 一聲,
然後重新呼叫 "checkChar('a', cin)",
最後進入 "default" return "returnCh('a')",
但回到外面的 main() 之後,問題就來啦...
原先在呼叫 chechChar() 之前,line 30 的 ch = mygetc() ==> 27 (ESC),
但 line 31 的 pch = checkChar() 卻會是 97 ('a'),
所以到 53 行印出的是 "沒有東西的 ESC (27)",
而不是 'a' (pch).
但以上是 testAsc() 的問題,
我也懶得改,但是在 cmdReader 裏頭就不會有這種問題,
如果你在 cmdReader-ref 按下 ESC 後再按 'a',
那麼會先聽到一聲 B, 然後在螢幕上看見 'a'.
很正常啊! 多了一聲 B 而以嗎!?
(但美中不足的是是在按 'a' 之後才 B, 不是按 ESC 的時候)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.160.25.115
1F:→ wmin0:我的寫法是beep後return undefine 所以是要照這篇改嗎 10/10 00:36
2F:→ ric2k1:沒有關係啦!! 單獨的 ESC 不用支援,也不會測。 10/10 00:38
3F:→ ric2k1:你要支援也是 OK 的!! 10/10 00:38
4F:→ ric2k1:但你這樣寫會吃掉 ESC 後的第一個 char 吧!? 10/10 00:38
5F:→ wmin0:就ESC當成 combo key起點...@@ 所以全視為combo key了... 10/10 00:40
6F:→ ric2k1:我的寫法的話,在按下 ESC 後,在按任何鑑應該都會正常執行 10/10 00:42
7F:→ ric2k1:只是 B 聲是在後來才出現就是了... (而不是在按 ESC 時) 10/10 00:42
8F:→ wmin0:反正不會測嘛...(望 10/10 00:43