ZSH + gnome-terminal e modo de entrada VI: Mostrar ibeam ou bloquear cursor

ZSH + gnome-terminal e modo de entrada VI: Mostrar ibeam ou bloquear cursor

Existem diferentes métodospara mostrar se você está inserido ou normal ao usar a ligação de teclas VI no ZSH.

Terminal Gnome tambémpermite que você altere o cursordo bloco para o ibeam |com uma chamada para gconftool-2.

Como posso combinar esses dois para ter um ibeam no modo de inserção e um bloco no modo normal?

Responder1

Colocando as duas respostas fornecidas na pergunta[1,2] juntos, acabo com isto:

function zle-line-init zle-keymap-select {
    if [[ $KEYMAP == vicmd ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block
    elif [[ $KEYMAP == (main|viins) ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam
    fi
}
zle -N zle-line-init
zle -N zle-keymap-select

A diferença é que verifico o $KEYMAPparâmetro diretamente com uma if..ficláusula e executo o gconftool-2comando em vez de alterar o prompt.

Responder2

Nas versões recentes do gnome-terminal, você pode usar as seguintes sequências de escape para alterar o cursor:

  • \e[0 qou \e[ q: redefinir para o que estiver definido nas configurações do perfil
  • \e[1 q: bloco piscando
  • \e[2 q: bloco constante
  • \e[3 q: sublinhado piscando
  • \e[4 q: sublinhado constante
  • \e[5 q: feixe I piscando
  • \e[6 q: feixe I constante

Você pode imprimi-los, por exemplo echo -ne '\e[5 q'. Conecte-os à sua configuração zsh, conforme mostrado na resposta do mpy.

informação relacionada