art*_*bot 5 terminal zsh ncurses zshrc terminfo
我用来terminfo找出终端中左(右,...)键的控制序列,以便我可以将其映射到我的有用的东西(向左移动),如下所示zshrc:
typeset -A key
left=${terminfo[kcub1]}
bindkey "$left" backward-char
Run Code Online (Sandbox Code Playgroud)
(还有其他一些事情可以让它发挥作用,请参阅来源)。这很有帮助,因为我使用多个终端仿真器并且这些控制序列会发生变化。例如,我在 Ubuntu 上使用 Gnome 终端连接到 Debian 盒子,然后在其中ssh使用...tmux
但是我如何从 terminfo 找到 CTRL+LEFT(和 RIGHT...)的关键代码?我想将它们映射到单词左/右。
等controlleft-arrow不是标准 terminfo 功能。ncurses 提供这些扩展(请参阅终端数据库中的讨论),知道如何使用扩展的应用程序可以获取它们。
zsh 的源代码暗示它将使用 terminfo 库的表,例如 forstrnames如果可用,但 ncurses 在单独的内存区域中实现扩展名称。(terminfo 数据可以追溯到 2005 年左右;扩展本身可以追溯到1999 年的ncurses 5.0)。
然而,实现(截至 2018 年)不完整,因为 zsh 不使用扩展信息来查找名称。ZSH for 循环数组变量问题中给出的示例,例如,
for key val in ${(kv)terminfo}; do
echo "$key -> $val"
done
Run Code Online (Sandbox Code Playgroud)
仅给出预定义的名称。
zsh 用于tigetstr检索字符串功能。如果您碰巧知道该名称(或在列表中看到它infocmp),x则可以将其用作其数组的索引terminfo[]。
扩展名称基于 xterm 的修饰符代码,该代码列在xterm+pcfkeys终端数据库条目上方的注释中:
"kLFT5""kRIT5"