如何从Zsh中的terminfo获取Ctrl + Left的控制字符

时间:2015-07-13 09:32:13

标签: terminal zsh ncurses zshrc terminfo

我正在使用terminfo来查找他们控制序列对我终端中的Left(Right,...)键的影响,以便我可以将其映射到有用的东西(向左移动)我的zshrc是这样的:

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

(还有其他一些工作要做,请参阅source)。 这很有用,因为我使用了几个终端仿真器并且这些控制序列发生了变化。例如我在Ubuntu上使用Gnome Terminal到ssh到Debian框,然后在里面使用tmux ...

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

1 个答案:

答案 0 :(得分:0)

control 左箭头等不是标准的terminfo功能。 ncurses将这些作为扩展提供(请参阅terminal database中的讨论),知道如何使用扩展的应用程序可以获取它们。

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

但是,由于zsh不使用扩展信息来查找名称,因此实施(截至2018年)不完整。 ZSH for loop array variable issue中给出的示例,例如,

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

仅提供预定义的名称。

zsh使用tigetstr来检索字符串功能。如果您碰巧知道该名称(或在infocmp - x 列表中查看),您可以将其用作 {{1}的索引} 数组。

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

  • control left-arrow terminfo[]
  • control 右箭头"kLFT5"