问题标签 [libreadline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 如何将修补的 GNU readline 库正确链接到所有现有程序?
我最初的问题是,在 vi 模式下使用 bash 时,我想要一种方法来区分我是处于 vi 命令模式还是 vi 插入模式。我知道从 GNU readline 7.0 开始,有一种方法可以在命令提示符中设置指示器;但是,我想要的是更改光标的形状(即在插入模式下为垂直线,在命令模式下为实心块)。
注意: 我已经尝试将以下内容放在我的 .inputrc 中,这起到了作用,但是在命令模式下移回行首时会导致一些问题,因此我得出结论,这不是一个好的选择。
我遇到了一篇由遇到同样问题的人写的文章,最终决定自己修补 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) 我的 LD_LIBRARY_PATH 环境变量设置$HOME/.local/lib:
在我的 .bashrc 中。
即使安装了修补版本并且我的 LD_LIBRARY_PATH 变量设置正确,Bash 似乎仍然没有使用我修补的 GNU readline 库。我想知道我做错了什么吗?
我希望问题不在于 Bash 附带已经静态链接的 readline 库,我想我需要重新安装 Bash(以及使用该库的任何其他程序,例如 iPython),在修补版本中手动链接的阅读线。
解决方案
虽然不是标题中列出的问题的解决方案,但这是我遇到的原始问题的解决方案。在浏览了 Readline 的手册页后,我发现了以下对vi-cmd-mode-string
and的描述vi-ins-mode-string
:
关于\1和\2转义的部分是重要的东西......
所以基本上,将以下内容放在我的 .inputrc 中允许我根据当前的 vi 模式设置光标形状:
c - GNU 自动完成变量
我正在开发一个带有 C 提示符的 Linux 工具。我已经使用 GNU 库启用了“函数”和“文件”完成。现在我想将支持扩展到“变量”名称完成。下面是一个更好理解的例子:
工作输出:
预期的额外支持:
为自动完成添加了代码:
如果问题不清楚,请告诉我。请帮我解决。
readline - 为什么 readline 不取消设置 `backward-delete-char`?
我需要将代码127
(又名DEL
,又名^?
)绑定到delete-char
.
如果我把DEL: delete-char
它~/.inputrc
,它不起作用。这是因为backward-delete-char
默认情况下使用此代码。
因此,首先我需要从以下位置释放此代码backward-delete-char
:
但由于某种原因,它并没有取消:
readline库(供本地使用)的源代码中应更改哪些内容以取消绑定\C-?
from backward-delete-char
?
注意如果我取消设置例如delete-char
,它可以完美地工作:
c - 如何在编辑行中附加历史记录?
我正在尝试将历史追加添加到 MacPorts shell。MacPorts 当前使用类似 bash 的历史记录,其中历史记录是在会话结束后写入的。如果会话崩溃,这可能会出现问题,所以我试图让 MacPorts shell 遵循 zsh 的示例。即,在执行时将每个历史记录项附加到文件中。
在GNU readline 中,这个功能对于函数来说是微不足道的append_history
。但是, MacPorts依赖于 Apple 的编辑线。editline 库似乎没有等效项,append_history
所以我有点迷失了如何将历史记录附加到文件中。我曾想过使用像fopen
and这样的旧标准函数fprintf
,但我意识到 editline 对历史字符串使用自己的编码(例如,空格字符被转换为八进制\040
)。MacPorts 需要与该编码兼容,因为在多个地方使用了 editline。我假设使用了这种编码,因为空格被用作历史分隔符。
我可以尝试编写自己的函数来兼容这种编码,但这似乎充满了不必要的困难。我觉得我一定是错过了什么。有没有一种简单的方法可以将历史记录附加到带有编辑行的文件中?
c++ - Bash 在不运行应用程序的情况下自动完成一个选项
我发现这段代码是 bash 自动完成的。但是,这对我来说看起来很奇怪。如果我根本不喜欢运行代码怎么办。如果我想输入./a.out
空格(不输入),然后按 Tab,我只想看到两个选项apple
,cherry
如果我输入a
并按 Tab,它会自动完成该选项apple
,类似c
. 假设只有两个选项之一是可以接受的:
其中apple
和cherry
是选项,而不是目录中文件的名称。在第一种情况下,我想要your option is apple
在第二种情况下的程序类型your option is cherry
。在任何其他情况下,程序应该打印一个选项无效的错误。
我在 Internet 上找到的所有示例(例如以下示例)看起来都应该首先运行程序,然后它会做出反应。函数内部的 while 循环main
与程序的正常功能发生冲突。我误解了readline
图书馆吗?是否可以通过编辑以下代码来实现上述应用程序?
ruby-on-rails - 未加载库:/usr/local/opt/readline/lib/libreadline.7.dylib
当我尝试运行时rails console
,出现此错误:
快速搜索让我找到了这篇文章,我尝试了一些事情:
brew reinstall postgresql
(这确实是这个项目的数据库)
和
(我的 readline 版本是 8)
和
brew link readline --force
但是这些都没有解决它。
我最近在我的项目中添加了pry-coolline
,guard
和guard-livereload
gems,如果这有什么不同的话(rails 控制台在这些之前加载得很好)。我正在运行最新的 macos。
(更新)我使用 pry rails 作为我的 rails 控制台,如果这有什么不同的话。
有什么帮助吗?谢谢。
python - Homebrew pyenv安装错误dyld:未加载库:/usr/local/opt/readline/lib/libreadline.7.dylib
在 MacOS Mojave 上从 Homebrew 安装 pyenv 后,我在尝试安装任何 python 版本时遇到构建错误。
为任何版本运行时pyenv install
,构建将失败并出现错误:
python - Mojave 升级后,遇到 Readline 库错误。Python 3.5 需要 Readline 7,但 Brew 只安装 Readline 8
在升级到 MacOS Mojave 之后,我使用 Homebrew 和 Pyenv 重建了我的 Python 开发环境。
我首先更新了 XCODE 和我的 SDK 标头(https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035624)。
/li>我使用自制软件安装了 Pyenv、Readline 和 XZ。
/li>然后使用 Pyenv 我安装了各种 Python 包:
/li>Pyenv 安装程序告诉我它正在使用 Homebrew 的 readline。
/li>当我尝试运行 Python 程序时,出现错误:
/li>查看 /usr/local/opt/readline/lib 我看到的只是版本 8 库。
/li>
在这一点上,我不知道我是否应该:A)弄清楚如何通过自制软件安装 readline v.7,或者 B)以某种方式更新 pyenv 以不使用自制软件的 readline 而是安装库本身,或者 C)其他东西。
任何帮助将不胜感激。
python - 扩展 code.InteractiveInterpreter 与历史,选项卡完成,
有没有一种简单的方法来扩展code.InteractiveInterpreter
历史,标签完成,......?
我现在正在做的是子类code.InteractiveInterpreter
化以接收来自不同进程的输入并将结果传输到不同的进程。现在我想像普通的 Python shell / IPython 一样添加历史记录(向上和向下箭头)和完成(选项卡)等功能。
除了 Python / CPython / IPython 源代码和 GNU readline 之外,我找不到太多关于此的信息:
GNU readline 是要走的路吗?如何在 Python 3 中使用它?