5

terminfo用来找出终端中左(右,...)键的控制序列是什么,这样我就可以将它映射到zshrc像这样有用的东西(向左移动):

typeset -A key
left=${terminfo[kcub1]}
bindkey "$left" backward-char

(还有一些其他的东西可以让它工作,请参阅源代码)。这很有帮助,因为我使用了几个终端仿真器并且这些控制序列发生了变化。例如,我在 Ubuntu 上使用 Gnome Terminal 连接ssh到 Debian 盒子,然后在tmux里面使用...

但是如何从 terminfo 中找出 CTRL+LEFT(和 RIGHT...)的键码?我想将这些映射到左/右单词。

4

1 回答 1

3

controlleft-arrow等不是标准的 terminfo 功能。ncurses 将这些作为扩展提供(参见终端数据库中的讨论),知道如何使用扩展的应用程序可以获取它们。

zsh 的源代码暗示它将使用 terminfo 库的,例如,strnames如果可用,但 ncurses 在单独的内存区域中实现扩展名称。(terminfo 数据可以追溯到 2005 年左右;扩展本身可以追溯到1999 年的ncurses 5.0)。

但是,实施(截至 2018 年)不完整,因为 zsh 不使用扩展信息来查找名称。ZSH 中针对循环数组变量问题给出的示例,例如,

for key val in ${(kv)terminfo}; do
    echo "$key -> $val"
done

仅给出预定义的名称。

zsh 用于tigetstr检索字符串功能。如果您碰巧知道名称(或在infocmp's -x列表中看到它),您可以将其用作其terminfo[]数组的索引。

扩展名称基于 xterm 的修饰符代码,该代码列在xterm+pcfkeys终端数据库条目上方的注释中:

  • controlleft-arrow"kLFT5"
  • controlright-arrow"kRIT5"
于 2015-07-13T20:58:03.623 回答