GNU Readline的替代Python绑定
项目描述
概述
GNU Readline库是命令行编辑、制表符补全和历史记录的规范实现,适用于基于控制台的应用程序。它是作为Bash的一部分开发的,在几乎任何平台上都可用。
虽然Python的标准库中包含了readline绑定,但它们仅实现了readline功能的一个子集,足以在Python解释器提示符下执行标识符补全。
rl包旨在提供GNU Readline的自定义补全器和历史记录接口的完整实现。它还包含高级API,以更好地组织命名空间并保护应用程序免受低级冗余的影响。
包内容
rl导出以下组件
- completer
readline补全器的接口。用于配置readline的补全方面。
- completion
活动readline补全的接口。用于在补全进行时与readline交互。
- history
readline历史接口。用于读取和写入历史文件以及操作历史条目。
- readline
readline绑定模块。包含标准库中的所有内容以及针对rl包的特定扩展。completer、completion和history接口都使用此模块,您很少需要直接与之交互。
- generator
一个装饰器,将任何可调用对象转换为readline可使用的完成条目函数。
- print_exc
一个装饰器,将异常打印到stderr。在编写Python完成和钩子时很有用,因为那里的异常通常会被中间的C代码吞没。
文档
有关更多信息,请参阅API文档。
开发
安装
rl需要Python 2.7或更高版本。安装程序会构建GNU Readline 8.2和一个Python扩展模块。
在Mac OS X上,请确保已安装Xcode Tools。打开一个终端窗口,输入
gcc --version
您可能会看到一些输出(好的)或者弹出一个安装程序窗口。点击“安装”按钮来安装命令行开发工具。更详细的教程可以从Mac安装指南中获取。
在Linux和BSD系统上,您可能已经安装了C编译器,但您可能需要验证开发环境是否完整。例如,Ubuntu默认缺少Python头文件,而Fedora缺少一些编译器配置。最后,readline需要一个termcap库来链接。
Ubuntu/Debian
sudo apt install build-essential sudo apt install python3-dev sudo apt install libncurses-dev
Redhat/Fedora
sudo dnf install gcc sudo dnf install redhat-rpm-config sudo dnf install ncurses-devel
然后输入
pip install rl
变更日志
3.1 - 2022-10-31
包含GNU Readline 8.2。[stefan]
改进文档和示例代码。推广使用generator作为装饰器。[stefan]
记录directory_completion_hook如何与3.0版本中添加的新钩子交互。[stefan]
实现Python 3.6的readline.set_auto_history和相应的history.auto。[stefan]
如果termcap自动检测失败,则回退到ncurses。这至少会产生一个链接器错误,而不是默默地破坏扩展。[stefan]
在tox.ini中替换过时的python setup.py test。[stefan]
从setup.py中删除过时的test_suite。[stefan]
从install_requires中删除setuptools。[stefan]
添加一个pyproject.toml文件。[stefan]
将测试包含在sdist中,但不包含在wheel中。[stefan]
3.0 - 2019-03-20
rl现在是GPLv3,因为它静态链接到GNU Readline。[stefan]
包含GNU Readline 8.0。[stefan]
支持Python 3.6的os.PathLike对象作为文件名。[stefan]
处理Python 3.6中的新GIL检查。见PYTHONMALLOC。[stefan]
添加history.max_file和history.append_file。[stefan]
添加directory_rewrite_hook、filename_rewrite_hook和filename_stat_hook。[stefan]
赶上应用于标准库readline模块的bug修复。[stefan]
停止使用2to3。[stefan]
从文档中删除过时的reset API。它们覆盖~/.inputrc,应仅在测试中使用。[stefan]
2.4 - 2012-10-05
更新到Python 3.3 Unicode C-API。[stefan]
2.3 - 2012-07-18
在C中实现历史迭代器,而不是依赖于中间列表。[stefan]
当尝试历史切片时,引发更具有说明性的错误。[stefan]
2.2 - 2012-05-10
恢复对gcc < 4.2的支持。[stefan]
切换到一个更愉悦的Sphinx主题。[stefan]
2.1 - 2012-04-27
如果设置了 RL_BUILD_STATIC_READLINE 环境变量,则强制进行静态构建。[stefan]
将 readline 6.2 补丁包含在静态构建中。[stefan]
在更多平台上抑制编译器警告。[stefan]
2.0.1 - 2011-10-06
修复 Linux 上 Python 3 的 C 编译器问题。[stefan]
2.0 - 2011-10-06
取消对 cmd.Cmd 的支持。现在您必须从 kmd.Kmd 派生您的命令解释器才能使用 rl 功能。[stefan]
在 Python 3 中,将 None 作为文件操作的参数接受。[stefan]
切换到基于 Sphinx 的美观文档。[stefan]
1.16 - 2011-07-28
在 read_history_file 和 write_history_file 中展开文件名。[stefan]
1.15.2 - 2011-07-03
在函数 get_y_or_n 中压制第二个 C 编译器警告。[stefan]
1.15.1 - 2011-07-03
在函数 get_y_or_n 中压制 C 编译器警告。[stefan]
1.15 - 2011-06-04
修复在编辑历史记录条目时可能发生的 py_remove_history、py_replace_history 和 py_clear_history 中的内存泄漏。参见 Python 问题 12186。[stefan]
添加一个默认的 display_matches_hook,其行为与 Bash 中 readline 的行为完全相同。[stefan]
向补完器、补完和历史记录添加 reset 函数。[stefan]
1.14 - 2011-05-05
在构建 GNU Readline 6.2 时将 xfree.c 添加到源代码中。[stefan]
允许历史索引为 long 类型。[stefan]
1.13 - 2011-03-11
使用自定义 build_ext 命令来查找最佳 termcap 库。[stefan]
将静态构建更新到 GNU Readline 6.2。[stefan]
1.12 - 2010-08-04
修复 py_remove_history 和 py_replace_history 中的内存泄漏。参见 Python 问题 9450。[stefan]
1.11 - 2010-05-21
更新 README、API 文档和示例。[stefan]
MacPython 检测捕获了其他框架构建。[stefan]
1.10 - 2010-05-05
重构历史接口:实现迭代并删除冗余 API。[stefan]
历史抑制可能导致重复的历史记录条目。[stefan]
确保 begidx 和 endidx 补完变量重置为 0。[stefan]
1.9 - 2010-04-02
删除未使用的定义;我们不支持 libedit 或 readline < 5.0。[stefan]
改进 get_current_history_length 的性能。[stefan]
1.8 - 2010-03-14
使 get_history_item 成为零基,并删除 get_history_base。[stefan]
1.7 - 2010-03-09
支持将安装到 Mac OS X 的 MacPython 中。[stefan]
1.6 - 2010-03-07
现在可以通过设置 history.max_entries 来限制(“抑制”)历史记录大小。这取代了已被删除的 history.length。[stefan]
关闭 get_current_history_length 中的内存泄漏。另请参阅 Python 问题 8065。[stefan]
1.5.4 - 2010-03-01
通过在所有正确的地方调用 PyGILState_Ensure 来避免编码查找期间的段错误。修复 rl 问题/5。删除了在 1.5.2 中引入的解决方案。[stefan]
1.5.3 - 2010-02-26
重新发布并链接到正确的 issue。[stefan]
1.5.2 - 2010-02-26
在 Python 3 的 Linux 上解决由不良或缺失的编码器引起的段错误。这限制了 Linux 只能使用 UTF-8 和 Latin-1 区域设置。另请参阅 rl 问题/5。[stefan]
1.5.1 - 2010-02-25
将 readline 下载位置切换到 ftp.gnu.org 以提高速度。[stefan]
1.5 - 2010-02-25
在 Python 3 中,使用文件系统编码和“surrogateescape”错误处理器在 Unicode 之间进行转换。有关详细信息,请参阅 PEP 383。[stefan]
1.4.1 - 2010-02-13
修复 GPL trove 分类器。[stefan]
1.4 - 2010-02-13
rl 现在可以安装到 Mac OS X 的系统 Python 中,唯一依赖项是 Xcode Tools。[stefan]
将许可协议更改为 PSF 或 GPL。[stefan]
1.3 - 2010-01-03
修复 Mac OS X 上 Fink 中的头文件检测。[stefan]
添加 readline_version API。[stefan]
1.2 - 2009-11-24
改进 API 文档和示例。[stefan]
1.1 - 2009-11-16
删除所有旧式函数类型定义,以消除编译器警告。[stefan]
使display_matches_hook在Python 2.5中工作。修复rl issue/1。[stefan]
不再自动刷新display_match_list结束时的提示。应用程序应调用redisplay(force=True)以恢复提示。[stefan]
1.0 - 2009-11-08
自1.0a8以来没有变化。
1.0a8 - 2009-11-07
修复word_break_hook中的内存泄漏。为Xcode的leaks工具欢呼。[stefan]
1.0a7 - 2009-11-05
由于它不是私有的,将_readline模块重命名为readline。[stefan]
从公共接口中删除dump和read_key API。[stefan]
不要将distribute列为依赖项,setuptools会做正确的事情。[stefan]
1.0a6 - 2009-10-30
通过移除可以用parse_and_bind设置的设置来简化completer接口。[stefan]
修复username_completion_function和filename_completion_function中的内存泄漏。[stefan]
添加自定义epydoc样式表,使其reST渲染更加愉快。[stefan]
1.0a5 - 2009-10-29
使所有completion属性可写。虽然在生产环境中没有用,但这使我们能够编写更好的测试。[stefan]
改善API文档并添加完成过程的调用图。这有助于解释readline完成的工作原理。[stefan]
1.0a4 - 2009-10-27
使用迭代器而不是列表来实现generator工厂。[stefan]
删除find_completion_word,以免人们产生想法。[stefan]
1.0a3 - 2009-10-22
将__slots__添加到接口对象,使其不可变。[stefan]
支持Python 2.5、2.6和3.1(感谢distribute)。[stefan]
接近测试覆盖率。[stefan]
1.0a2 - 2009-10-08
使generator工厂适用于所有类型的可调用对象。[stefan]
改善示例。[stefan]
1.0a1 - 2009-10-04
首次发布。
rl-3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 508924bec14771088b24e80d9db97744235c43bbd96c95bb7557bd11b20388b2 |
|
MD5 | 087154dee2e36d044d91e4dc7863f1ea |
|
BLAKE2b-256 | 823d33307c1d22d2c619345e6e5d72241e5fb25c14f1700128d488874574ecc8 |