¿Cómo vincular correctamente la biblioteca de línea de lectura GNU parcheada a todos los programas existentes?

Mi problema original era que quería una manera de distinguir entre si estoy en modo vi-command o vi-insert mientras uso bash en modo vi. Entiendo que a partir de GNU readline 7.0 hay una manera de establecer un indicador en el símbolo del sistema; sin embargo, lo que quiero es cambiar la forma del cursor (es decir, una línea vertical mientras está en modo de inserción y un bloque sólido mientras está en modo de comando).


NOTA: Ya intenté colocar lo siguiente en mi .inputrc, que funcionó, pero causó algunos problemas al volver al comienzo de la línea mientras estaba en modo comando, por lo que concluí que no era una buena alternativa.

set show-mode-in-prompt on
set vi-cmd-mode-string "\e[2 q"
set vi-ins-mode-string "\e[6 q"


Me encontré con un artículo escrito por alguien que estaba teniendo el mismo problema, y finalmente decidí parchear la biblioteca de línea de lectura GNU, vinculada a continuación:

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


Hasta ahora he podido aplicar con éxito el parche y compilar / instalar la biblioteca (localmente ... preferiría mantener la versión sin parche instalada en caso de que alguna vez quisiera volver), pero parece que bash todavía está usando el original.

Aquí están los detalles importantes:

1) Elparcheado los archivos de la biblioteca (estáticos y dinámicos) se encuentran en mi computadora en$ HOME / .local / lib /.
2) Los archivos de biblioteca originales (solo dinámicos) que he determinado se encuentran en/ lib / x86_64-linux-gnu /.
3) Mi variable de entorno LD_LIBRARY_PATH está establecida en$HOME/.local/lib: dentro de mi .bashrc.


Incluso con la versión parcheada instalada y mi variable LD_LIBRARY_PATH configurada correctamente, Bash todavía parece no usar mi biblioteca de línea de lectura GNU parcheada. Me pregunto si hay algo que estoy haciendo mal.

Espero que el problema no sea que Bash viene con la biblioteca de línea de lectura ya está estáticamente vinculada, requiriendo, supongo, que reinstale Bash (así como cualquier otro programa que use esta biblioteca, como iPython), vinculando manualmente en la versión parcheada de readline.


SOLUCIÓN

Si bien no es la solución a la pregunta que figura en el título, esta es la solución al problema original que estaba teniendo. Después de mirar las páginas de manual de Readline, encontré las siguientes descripciones paravi-cmd-mode-string yvi-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.

La parte sobre el\ 1 y\ 2 escapar es lo importante ...


Básicamente, colocar lo siguiente en mi .inputrc me permitió establecer la forma del cursor dependiendo del modo vi actual:

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"

Respuestas a la pregunta(0)

Su respuesta a la pregunta