【问题标题】:Which numerical values do the F-Keys ( F[1-12]) and the Arrow-keys have?F 键 ( F[1-12]) 和箭头键有哪些数值?
【发布时间】:2009-01-17 17:24:23
【问题描述】:

我想用 C 语言编写一个应用程序,它使用箭头键进行导航,使用 F 键进行其他功能,例如保存到文件、语言选择等。

可能值取决于平台,那么我如何找出键具有哪些值?

如果他们不知道,或者如果你认识他们,我不必知道如何找出答案;)

编辑: 我的平台是 Linux 和 M$ Windows。 因此,我正在寻找一种尽可能便携的解决方案。

(可能类似于

#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

)

【问题讨论】:

    标签: c command-line


    【解决方案1】:

    我认为这取决于 $TERM,但无论哪种方式,它都将是一个字符序列。我明白了:

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

    这是我的 F5 键,如果这不是您的平台,请原谅这是一个以 *nix 为中心的答案。

    【讨论】:

      【解决方案2】:

      这个问题比任何人都想的要复杂得多。简而言之,这些键中的每一个都会发送一系列字符,详细信息取决于正在使用的终端仿真器。在 Unix 上,您有几个选择:

      • 编写您的应用以使用curses 库并使用其与terminfo 数据库的接口。

      • 自己解析terminfo 数据库以查找序列。或者要使用 API,请查看 tput 的源代码以了解这是如何完成的。

      • 使用命令行程序tput 帮助发现序列。例如,要了解 F10 的序列,请运行 tput kf10 | od -a。请记住,这会因终端而异,因此您应该在每次运行应用时运行 tput。

      • 使用其中一个 X 库编写您的应用程序并访问“键符号”而不是字符序列。 XLookupKeysym 函数是开始的好地方;您会在/usr/include/X11/keysymdef.h 中找到符号的名称。如果您要从非 X 系统(例如 Windows)通过网络连接,则此选项不太好。

      我不知道如何在 Windows 上执行这些操作。

      【讨论】:

        【解决方案3】:

        如果您在 Unix 或 Linux 机器上,只需输入 cntl-V,然后在 vim* 中输入密钥。你会看到代码。

        HTH

        干杯,

        罗伯

        【讨论】:

          【解决方案4】:

          这个方便的网站有很多关于原始扫描码的有用信息:

          http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html#toc1

          【讨论】:

            【解决方案5】:

            某些键生成 2 个字符 key codes。 我在 pc 上成功使用的一种技术是获取 2 个字符,并在第二个字符上设置第 7 位,然后返回该字符作为答案。它让程序的其余部分将每个按键视为单个字符。

            解决问题的方法取决于您需要支持哪些键。将翻译隐藏在某种函数后面通常是个好主意。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-27
              • 1970-01-01
              • 2010-09-05
              • 1970-01-01
              • 2017-02-13
              • 2015-08-13
              • 1970-01-01
              • 2014-09-07
              相关资源
              最近更新 更多