当前位置: 首页 > 面试题库 >

如果使用颜色提示,如何在Python readline中修复列计算

孙绍辉
2023-03-14
问题内容

我使用标准技巧来自定义交互式Python会话:

$猫〜/ .bashrc
导出PYTHONSTARTUP =〜/ .pystartup

$ cat〜/ .pystartup
导入操作系统
导入系统
导入atexit
导入readline
导入rlcompleter

historyPath = os.path.expanduser(“〜/ .pyhistory”)

def save_history(historyPath = historyPath):
    导入readline
    readline.write_history_file(historyPath)

如果os.path.exists(historyPath):
    readline.read_history_file(historyPath)

term_with_colors = ['xterm','xterm-color','xterm-256color','linux','screen','screen-256color','screen-bce']
如果term_with_colors中的os.environ.get('TERM'):
    绿色='\ 033 [32m'
    红色='\ 033 [31m'
    重置='\ 033 [0m'
    sys.ps1 =红色+'>>>'+重置
    sys.ps2 =绿色+'...'+重置
del term_with_colors

atexit.register(save_history)
del os,sys,atexit,readline,rlcompleter,save_history,historyPath

现在,我得到上下文相关的完成和颜色提示。

问题来自颜色提示-当我在交互式Python会话中调用 history-search-backward
(通过按UP)时,Readline考虑了终端转义序列,因此光标位置计算错误并且文本显示错误。

在Bash手册页中,通过特殊标记提到并解决了此问题:

    \ [开始一系列非打印字符,
           可以用来嵌入
           终端控制序列进入提示
    \]结束一系列非打印字符

如何解决此问题的Python提示?


问题答案:

我打开 信息阅读专线 ,发现:

 -函数:int rl_expand_prompt(char *提示)
     在PROMPT中展开任何特殊字符序列,然后设置
     本地Readline提示重新显示变量。该功能是
     由`readline()'调用。也可以称为扩展
     主要提示,如果`rl_on_new_line_with_prompt()'函数或
     使用了rl_already_prompted变量。它返回的数量
     (可能是多行)最后一行的可见字符
     提示。应用程序可能指示提示包含
     显示时不占用实际屏幕空间的字符
     用特殊标记将一系列此类字符括起来
     “ RL_PROMPT_START_IGNORE”和“ RL_PROMPT_END_IGNORE”(在
     `readline.h'。这可用于嵌入终端特定的转义
     提示中的顺序。

就像说的那样,我在 readline.h中* 搜索 RL_PROMPT_START_IGNORE
RL_PROMPT_END_IGNORE 定义,然后找到:
*

 / *供readline客户端使用的定义。* /
#定义RL_PROMPT_START_IGNORE'\ 001'
#定义RL_PROMPT_END_IGNORE'\ 002'

因此,我对 〜/ .pystartup进行了 适当的更改:

    绿色='\ 001 \ 033 [32m \ 002'
    红色='\ 001 \ 033 [31m \ 002'
    重置='\ 001 \ 033 [0m \ 002'

现在一切正常!!!



 类似资料:
  • 我正在使用Visual Studio Code进行编码,但最近我遇到了奇怪的问题,该如何解决? 当我输入php artisan tinker时,tinker文本不像往常一样,我记得颜色是蓝色的,但现在是白色的。同样在使用php artisan migrate和etc命令后,结果文本是白色的 我卸载了Vscode以及所有appdata和扩展以及与之相关的任何东西,但在安装最新版本后没有任何变化,修补

  • 我的需要是,为一个屏幕的应用程序,其中有白色的背景,并在白色的背景,我必须显示Textinputlayout提示,文本,编辑文本颜色在黑色字体。

  • 我在谷歌上搜索了一个小时,没有满意的答案。 我正在使用 Pycharm 2018.1,我想将默认终端提示设置得更明显,以便我可以轻松阅读它。 即,我想要“(venv)C:\用户\myname\Pycharm项目\项目名称 我已经尝试在文件中更改设置 最接近的一个是如何在PyCharm中更改终端字体颜色,但这里的注释也指出,这里提到的设置是用于控制台的,而不是终端提示。

  • 问题内容: 为了在GWT小部件中表示具有不同颜色的对象列表,我们需要动态获取与对象具有不同颜色的颜色列表。由于列表的大小可以变化,因此我们需要能够计算出这样的颜色列表。 问题答案: 我的解决方案的另一个版本,范围: 这是一个更高级的功能,因为它会生成彼此之间尽可能不同的颜色(类似于@aiiobe所做的事情)。 通常,我们将范围划分为红色,绿色和蓝色三个子范围,计算我们需要迭代多少步(通过应用pow

  • 启用这些后,我需要提示以不同的颜色显示,如下所示 当我这样尝试时,效果很好 问题是,我必须使用来显示浮动提示。所以,当我在中添加时,这段代码根本不起作用。我用尝试了很多东西,如下所示。但没有任何效果。我只需要EditText的提示文本颜色(不是浮动提示文本)在启用时应该是一种颜色,在禁用时,在中使用时应该是不同的颜色。请帮助! 注意:我的问题不是这个问题的重复。在那里,它提到了TextInputL

  • 问题内容: 我正在尝试使用iText提取PDF中矩形的颜色。在下面的是所有的PDF页面有什么: 这是使用iText提取的页面内容: 但是,有些东西我无法从该代码中提取,我说的 是红色,如果我生成相同的PDF,但是用另一种 颜色而不是红色,则页面内容没有任何变化(上面的代码显示了) )。 因此,我的问题是,如何使用 iText库Java的某些方法或属性来提取该颜色。 我正在使用iText 5.5.9