如何正确地将修补后的GNU readline库链接到所有现有程序?

时间:2017-07-17 06:02:49

标签: bash terminal readline libreadline

我最初的问题是我想要一种方法来区分我在vi模式下使用bash时是处于vi-command模式还是vi-insert模式。据我所知,从GNU readline 7.0开始,有一种方法可以在命令提示符中设置一个指标;但是,我想要的是更改光标的形状(即在插入模式下为垂直线,在命令模式下为实体块)。


注意: 我已经尝试将以下内容放在我的.inputrc中,这样做了,但是在命令模式下回到行尾时会引起一些问题,所以我总结了这不是一个好的选择。

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


我遇到了一篇由同样问题的人撰写的文章,并最终决定自己修补GNU readline库,链接如下:

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


到目前为止,我已经能够成功应用补丁并编译/安装库(本地......我更愿意保留未修补版本以防万一我想切换回来),但bash似乎仍然是使用原文。

以下是重要细节:

1)已修补的库文件(静态和动态)位于我的计算机上 $ HOME / .local / lib / 。 2)我确定的原始库文件(仅动态)位于 / lib / x86_64-linux-gnu /
3)我的.bashrc中的LD_LIBRARY_PATH环境变量设置为$HOME/.local/lib:


即使安装了修补版本并且我的LD_LIBRARY_PATH变量设置正确,Bash似乎仍然没有使用我修补的GNU readline库。我想知道我做错了什么?

我希望问题不在于Bash带有已经静态链接的readline库,我想,我需要重新安装Bash(以及使用此库的任何其他程序,如iPython),手动链接readline的修补版本。


虽然不是标题中列出的问题的解决方案,但这是我遇到的原始问题的解决方案。浏览了Readline的手册页后,我看到了vi-cmd-mode-stringvi-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.

关于 \ 1 \ 2 逃脱的部分是重要的事情......


所以基本上,将以下内容放在我的.inputrc中允许我根据当前的vi模式设置光标形状:

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"

0 个答案:

没有答案