readline - 为什么到达行尾时只执行回车而不换行?

readline - 为什么到达行尾时只执行回车而不换行?

我开发了一个 python 应用程序,使用指令模块来制作交互式命令行界面。这指令模块用途阅读线用于命令行管理:完成、历史记录...

我的问题是:在计算机上我尝试使用该应用程序,当我输入太长的行时,它会返回到行的开头并且不添加换行符。所以我是在这条线本身上写的。这使得浏览和编辑历史命令变得非常痛苦。虽然它在我的开发盒上运行良好。

我尝试更改启动 python 的 shell(从 bash 更改为 sh),没有区别,我尝试更改使用的终端(从 Terminator 更改为 XTerm 或 UXTerm),没有区别。

您对它的来源以及如何解决这个问题有何猜测?

编辑: 这是一个屏幕截图。我已经找到了错误的原因,我猜它来自于与终端线长度相比时没有得到很好处理的颜色字符。

截屏

在屏幕截图的第一部分(绿线上方),我使用彩色提示(您可以看到粉红色 /),当到达该行末尾时,我开始覆盖提示。如果我继续写,我可以写一整行,完全覆盖原来的第一行,然后开始输入新行。

在第二部分(绿线下方)中,我一直写到行尾并且换行符在正确的时刻出现。

这种行为背后的解释是什么? (正如我所说,并非每种配置都会发生这种情况。)我该如何修复它?

答案1

这是来自我对颜色的使用。我使用以下字符串来为我的文本着色:

class colors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

我添加了\001\002字符,现在,它可以工作了!

class colors:
    HEADER = '\001\033[95m\002'
    OKBLUE = '\001\033[94m\002'
    OKGREEN = '\001\033[92m\002'
    WARNING = '\001\033[93m\002'
    FAIL = '\001\033[91m\002'
    ENDC = '\001\033[0m\002'

相关解决方案帖子:https://stackoverflow.com/questions/8806643/colorized-output-breaks-linewrapping-with-readline/8916332#8916332

相关内容