0

我正在尝试恢复一个相当旧的 MUD 客户端以在 OS X Mojave 下运行(几乎是一个支持别名、键绑定和触发器的 telnet 客户端)。代码可以在这里找到https://github.com/olostan/mmc

我成功地运行它,但是它没有正确处理数字键盘键。我发现这是因为这些键没有在https://github.com/olostan/mmc/blob/master/src/output.c中定义, 一旦我将以下块添加到“键盘键”部分,它就开始了好好工作。

  { "k0",   "\033Op",   NULL    },
  { "k1",   "\033Oq",   NULL    },
  { "k2",   "\033Or",   NULL    },
  { "k3",   "\033Os",   NULL    },
  { "k4",   "\033Ot",   NULL    },
  { "k5",   "\033Ou",   NULL    },
  { "k6",   "\033Ov",   NULL    },
  { "k7",   "\033Ow",   NULL    },
  { "k8",   "\033Ox",   NULL    },
  { "k9",   "\033Oy",   NULL    },  

现在我想对具有不同修饰符(ctrl、alt、shift)的小键盘键执行相同的操作,例如 C-k1、M-k1、S-k1,但我找不到任何地方如何正确定义转义码序列。我从这个页面得到了上面的代码 - https://www.gnu.org/software/screen/manual/html_node/Input-Translation.html但不幸的是它没有描述任何与修饰符的组合。

所以问题是 - 我如何为带有修饰键(shift、alt、ctrl)的键盘组合定义 VT100 格式的转义码?我尝试为 S-k4 组合键设置类似“\033[1;5Ot”的东西,但这些都不起作用。

4

1 回答 1

0

问题是

如何为带有修饰键(shift、alt、ctrl)的键盘组合定义 VT100 格式的转义码?

答案是您可能不能,因为终端不太可能为数字键盘提供不同的转义码:

  • VT100s 从来没有做过这样的事情。
  • xterm 模仿VT100 的键盘,考虑到正常和应用模式(应用模式发送您列出的转义序列)
  • 大多数其他终端仿真器甚至都不会这样做。

  • xterm 有一个功能,可以让您配置它以发送修改后的键盘键,modifyKeyboard资源设置: modifyKeyboard(类 ModifyKeyboard) 通常 xterm 对修饰符(移位、控制等)进行特殊处理以处理特殊键盘布局(旧版和 vt220) . 这样做是为了为 DEC VT220 和实现用户定义键 (UDK) 的相关终端提供兼容的键盘。

           The bits of the resource value selectively enable modification
           of the given category when these keyboards are selected.  The
           default is "0":
    
           0    The legacy/vt220 keyboards interpret only the Control-
                modifier when constructing numbered function-keys.  Other
                special keys are not modified.
    
           1    allows modification of the numeric keypad
    
           2    allows modification of the editing keypad
    
           4    allows modification of function-keys, overrides use of
                Shift-modifier for UDK.
    
           8    allows modification of other special keys
    
  • 其他终端根本不这样做(有些终端可能会让您自定义发送的密钥,但没有一个终端会预定义这个,这是您的泥客户端需要的)。
于 2019-12-07T22:45:26.953 回答