Como vincular corretamente a biblioteca GNU readline corrigida a todos os programas existentes?
Meu problema original era que eu queria uma maneira de distinguir entre estar no modo vi-command ou vi-insert enquanto estiver usando o bash no modo vi. Entendo que a partir do GNU readline 7.0, existe uma maneira de definir um indicador no prompt de comando; no entanto, o que eu quero é mudar a forma do cursor (ou seja, uma linha vertical no modo de inserção e um bloco sólido no modo de comando).
NOTA: Eu já tentei colocar o seguinte no meu .inputrc, que fez o truque, mas causou alguns problemas ao retornar ao início da linha no modo de comando, então concluí que não era uma boa alternativa.
set show-mode-in-prompt on
set vi-cmd-mode-string "\e[2 q"
set vi-ins-mode-string "\e[6 q"
Me deparei com um artigo escrito por alguém que estava com o mesmo problema e, finalmente, decidi corrigir a biblioteca GNU readline, vinculada aqui abaixo:
http://blog.mkoskar.com/2010/10/gnu-readline-vi-mode-visualization.html http://blog.mkoskar.com/2010/11/gnu-readline-vi-mode-visualization-2.html
Até agora, consegui aplicar o patch com sucesso e compilar / instalar a biblioteca (localmente ... eu preferiria manter a versão sem patch instalada, caso eu quisesse voltar), mas o bash parece ainda estar usando o original.
Aqui estão os detalhes importantes:
1) Oremendado arquivos de biblioteca (estáticos e dinâmicos) estão localizados no meu computador em$ HOME / .local / lib /.
2) Os arquivos da biblioteca original (somente dinâmico) que determinei estão localizados em/ lib / x86_64-linux-gnu /.
3) Minha variável de ambiente LD_LIBRARY_PATH está configurada como$HOME/.local/lib:
dentro do meu .bashrc.
Mesmo com a versão corrigida instalada e minha variável LD_LIBRARY_PATH definida corretamente, o Bash ainda parece não usar minha biblioteca de linha de leitura GNU corrigida. Gostaria de saber se há algo que estou fazendo de errado?
Espero que o problema não seja o fato de o Bash vir com a biblioteca readline já vinculada estaticamente, o que exige, suponho, que eu reinstale o Bash (assim como qualquer outro programa que utilize essa biblioteca, como o iPython), vinculando manualmente a versão corrigida de readline.
SOLUÇÃO
Embora não seja a solução para a pergunta listada no título, esta é a solução para o problema original que eu estava tendo. Depois de examinar as páginas de manual do Readline, deparei-me com as seguintes descrições paravi-cmd-mode-string
evi-ins-mode-string
:
vi-cmd-mode-string ((cmd))
This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the
standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non-printing characters, which can be
used to embed a terminal control sequence into the mode string.
vi-ins-mode-string ((ins))
This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the
standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non-printing characters, which can be
used to embed a terminal control sequence into the mode string.
A parte sobre o\ 1 e\ 2 Escapa é o material mais importante ...
Então, basicamente, colocar o seguinte no meu .inputrc me permitiu definir a forma do cursor, dependendo do modo vi atual:
set show-mode-in-prompt on
set vi-cmd-mode-string "\1\e[2 q\2"
set vi-ins-mode-string "\1\e[6 q\2"