Shell Korn: End, pgup, pgdown e delete não funcionam

8

Então, basicamente, minha End , Pageup / Pagedown e a tecla Delete não estão funcionando no ksh93. Estou executando o FreeBSD pelo caminho.

As minhas teclas de setas estão a funcionar e a minha chave de casa também.

Essas chaves funcionam quando eu coloco isso no meu .kshrc

set -o emacs

Eu tentei fazer ISSO , colocando isso no meu .kshrc . Para fazer a chave End funcionar.

alias __Y='echo "
set -o emacs
5"' # end = ^e = end of line

Eu abri o vim e pressionei Ctrl v , e digitei 0 0 5 . E o ^E apareceu. Ainda assim, nada funcionou.

Alguém sabe de qualquer maneira para conseguir que essa chave funcione?

Além disso, sempre que pressiono essas teclas, imprimo um ~ . Eu também sei que eu poderia usar Ctrl d , ou Ctrl a , eu não quero usá-los.

    
por shix 10.07.2012 / 22:58

1 resposta

7

Essa resposta é específica de determinados emuladores de terminal, não acho que possa ser generalizada fora do Solaris.

Em ksh, pressione Ctrl + V e depois em End . Isso irá inserir um caractere de escape literal seguido pelo resto da seqüência de escape que a chave envia. Por exemplo, você pode ver ^[[4~ (o ^[ no início é, na verdade, um caractere de escape, não ^ seguido de [ ). Faça o mesmo para as outras teclas do cursor que você deseja reconfigurar.

No seu .kshrc , defina uma interceptação do KEYBD para traduzir as seqüências de escape das teclas de função para as ligações dos comandos que você deseja que a chave chame. Por exemplo (você pode precisar ajustar as seqüências de escape - observe que dentro de $'…', \ e 'significa um caractere de escape):

keybd_trap () {
  case ${.sh.edchar} in
    $'\e[1~') .sh.edchar=$'
keybd_trap () {
  case ${.sh.edchar} in
    $'\e[1~') .sh.edchar=$'%pre%1';; # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'%pre%5';; # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next
    $'\e[3~') .sh.edchar=$'%pre%4';; # Delete = delete-char
  esac
}
trap keybd_trap KEYBD
set -o emacs
1';; # Home = beginning-of-line $'\e[4~') .sh.edchar=$'%pre%5';; # End = end-of-line $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next $'\e[3~') .sh.edchar=$'%pre%4';; # Delete = delete-char esac } trap keybd_trap KEYBD set -o emacs
    
por 11.07.2012 / 02:55