Korn Shell: Chave final, pgup, pgdown e delete não funciona

8

Então, basicamente End, minha chave Pageup/ Pagedown, e Deletenão estão funcionando no ksh93. Estou rodando o FreeBSD a propósito.

Minhas teclas de seta estão funcionando, assim como minha chave de casa.

Essas chaves funcionam quando eu coloco isso no meu .kshrc

set -o emacs

Eu tentei fazer ESTE , colocando isso no meu .kshrc. Para fazer a Endchave funcionar.

alias __Y=`echo "\005"`     # end = ^e = end of line

Abri o vim, apertei Ctrlve digitei 005. E o ^Eapareceu. Ainda assim, nada funcionou.

Alguém sabe de qualquer maneira para conseguir essas chaves para o trabalho?

Além disso, sempre que pressiono essas teclas, ela é impressa a ~. Eu também sei que eu poderia usar Ctrldou CtrlaNÃO quero usá-los.

shix
fonte

Respostas:

7

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

No ksh, pressione Ctrl+ e Vdepois End. Isso inserirá um caractere de escape literal seguido pelo restante da sequência de escape que a chave envia. Por exemplo, você pode ver ^[[4~(o ^[início é de fato um caractere de escape, não ^seguido por [). Faça o mesmo para as outras teclas do cursor que você deseja reconfigurar.

No seu .kshrc, defina uma armadilha KEYBD para converter as seqüências de escape das teclas de função nas ligações dos comandos que você deseja que a chave invoque. Por exemplo (pode ser necessário 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=$'\001';; # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'\005';; # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next
    $'\e[3~') .sh.edchar=$'\004';; # Delete = delete-char
  esac
}
trap keybd_trap KEYBD
set -o emacs
Gilles 'SO- parar de ser mau'
fonte
Obrigado pela ajuda. Mas agora estou recebendo um erro que diz .kshrc: linha 6: erro de sintaxe: ')' inesperado
shix
Exatamente onde está a parte keybd_trap () {.
shix 11/07/12
1
@ shix Desculpe, houve um erro de digitação (um parêntese extra em cada linha do caso), corrigido agora.
Gilles 'SO- stop be evil' (
Uau! Muito obrigado. Eu tenho esse problema há um tempo agora.
shix 11/07/12