Se você ler um caractere por vez com read -n
, terá que implementar um analisador de sequência de chaves. Você pode criar uma solução lenta e suja que funcione na maioria dos terminais com isso: considere que uma seqüência de escape de tecla de função começa com um caractere de escape e continua com qualquer número de caracteres entre 0-9;[]O
seguido por um caractere final não neste conjunto .
Uma maneira melhor de ler a entrada é usar uma biblioteca de entrada adequada. O Bash usa um para seus próprios propósitos ( readline ). Você obtém uma interface limitada declarando suas próprias combinações de teclas com o bind
interno; especificamente bind -x
para executar um comando shell em um pressionamento de tecla. Devido a essa interface limitada, implementar o que você deseja provavelmente será possível, mas difícil.
O Zsh tem sua própria biblioteca de entrada, zle . Sua interface é muito mais rica que a do bash. Com zle, você pode definir keymaps arbitrários e obter mais acesso aos componentes internos do código shell. Use zle
para atribuir funções de shell a comandos definidos pelo usuário zle (chamados widgets), bindkey
para criar e preencher seu próprio mapa de teclado e finalmente vared
para ler uma linha de entrada usando o mapa de teclas de sua escolha. p>