web-dev-qa-db-ja.com

zsh: `key`->` terminfo`辞書はどこで定義されていますか

現在、zshを学習しており、~/.zshrcを構成しています。 Archwikiで、 履歴検索動作を変更するためのスニペット を見つけました:

autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search

[[ -n "$key[Up]"   ]] && bindkey -- "$key[Up]"   up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search

しかし、manページを精査した後、keyキーワードまたはそれが取ることができるパラメータに関するドキュメントが見つかりません。 man zshall | grep -i "key.*\["grep-ingは、これ以上の情報を表示せず、bindkeyman zshzleエントリも表示しません。最も関連性の高い一致は、man zshcontribから次のとおりです。

...
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
# etc.
...

zshwiki および nix.SEの@rayandrewsからの回答 でさらに例を見つけましたが、どちらもkey、またはkeyが定義されている場所/方法についても説明しません。

key[...]の詳細とその使用方法はどこで確認できますか?

2
nivk

Debianでは、/etc/zsh/zshrcには次のものがあります。

    typeset -A key
    key=(
        BackSpace  "${terminfo[kbs]}"
        Home       "${terminfo[khome]}"
        End        "${terminfo[kend]}"
        Insert     "${terminfo[kich1]}"
        Delete     "${terminfo[kdch1]}"
        Up         "${terminfo[kcuu1]}"
        Down       "${terminfo[kcud1]}"
        Left       "${terminfo[kcub1]}"
        Right      "${terminfo[kcuf1]}"
        PageUp     "${terminfo[kpp]}"
        PageDown   "${terminfo[knp]}"
    )

そのコミット によってzshDebianパッケージ5.0.0-1に追加されました。

おそらくArchはそのzshrcをDebianからコピーしました。いずれにせよ、それはアップストリームのzshディストリビューションの一部ではありません。

$keyハッシュの定義は、次のようにしていつでも確認できます。

typeset -p key | sed -n l

または

printf '%q => %q\n' "${(@kv)key}"
0