我开发了一个 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'