2009-01-17 31 views
1

我想用C編寫一個應用程序,它使用箭頭鍵導航,F鍵用於其他功能,例如保存到文件,語言選擇等。F鍵(F [1-12])和箭頭鍵有哪些數值?

顯然這些值取決於平臺,那麼我怎麼才能找出鑰匙有哪些值呢?

如果他們不這樣做,或者如果你認識他們,我沒有知道如何找出;)

編輯: 我的平臺是Linux和M $的Windows。 因此,我正在尋找一種儘可能便攜的解決方案。

(Propably像

#ifdef __unix__ 
    #define F1 'some number' 
    /* ... */ 
    #define ARROW_UP 'some other number' 
#elif __WIN32__ || MSDOS /*whatever*/ 
    #define F1 'something' 
    /* ... */ 
    #define ARROW_UP 'something different' 
#endif 

回答

1

我認爲這取決於$ TERM,但無論哪種方式,它將會是一個字符序列。我得到這個:

% read x; echo $x | od -c -- 
^[[15~ 
0000000 033 [ 1 5 ~ \n           
0000006 

這是我的F5鍵,道歉這是一個* nix中爲中心的答案,如果這不是你的平臺。

0

如果您使用的是Unix或Linux機器,只需輸入cntl-V,然後在vim *中輸入密鑰即可。你會看到代碼。

HTH

歡呼聲,

羅布

1

這個問題是很多混亂比任何人都想要的。簡而言之,這些密鑰中的每一個都會發送一系列字符,具體取決於正在使用哪個終端仿真器。在Unix上,你有兩個選擇:

  • 寫你的應用程序使用curses庫,並使用其界面的terminfo數據庫。

  • 解析你自己的terminfo數據庫找到序列。或者要使用API​​,請查看tput的來源以瞭解如何完成此操作。

  • 使用命令行程序tput來幫助發現序列。例如,要了解F10的序列,請運行tput kf10 | od -a。請記住終端之間的這種變化,所以您應該在每次運行應用程序時運行tput

  • 使用其中一個X庫編寫您的應用程序,並訪問'鍵符號'而不是一系列字符。 XLookupKeysym函數是一個很好的開始;您會在/usr/include/X11/keysymdef.h中找到符號的名稱。如果您要通過非X系統(例如Windows)的網絡進行連接,則此選項不太好。

我不知道如何做任何的在Windows操作系統上。

0

部分密鑰生成2個字符key codes。 我在PC上成功使用的一種技術是獲取2個字符,並在第二個字符上設置第7位,然後將該字符作爲答案返回。它讓程序的其餘部分將每個擊鍵視爲單個字符。

問題的解決方案取決於您需要支持的密鑰。隱藏某種功能背後的翻譯通常是一個好主意。