español - Vea cómo corregir el cálculo de columnas en la línea de lectura de Python si usa un indicador de color
readline python español (2)
Abro info readline y encontré:
-- Function: int rl_expand_prompt (char *prompt) Expand any special character sequences in PROMPT and set up the local Readline prompt redisplay variables. This function is called by `readline()''. It may also be called to expand the primary prompt if the `rl_on_new_line_with_prompt()'' function or `rl_already_prompted'' variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers `RL_PROMPT_START_IGNORE'' and `RL_PROMPT_END_IGNORE'' (declared in `readline.h''. This may be used to embed terminal-specific escape sequences in prompts.
Como dice el texto, busco la definición de RL_PROMPT_START_IGNORE y RL_PROMPT_END_IGNORE en readline.h que se encuentra a continuación:
/* Definitions available for use by readline clients. */ #define RL_PROMPT_START_IGNORE ''/001'' #define RL_PROMPT_END_IGNORE ''/002''
Así que puse los cambios apropiados en mi ~ / .pystartup :
green=''/001/033[32m/002'' red=''/001/033[31m/002'' reset=''/001/033[0m/002''
y ahora todo funciona bien !!!
Yo uso consejos estándar para personalizar la sesión interactiva de Python:
$ cat ~/.bashrc export PYTHONSTARTUP=~/.pystartup $ cat ~/.pystartup import os import sys import atexit import readline import rlcompleter historyPath = os.path.expanduser("~/.pyhistory") def save_history(historyPath=historyPath): import readline readline.write_history_file(historyPath) if os.path.exists(historyPath): readline.read_history_file(historyPath) term_with_colors = [''xterm'', ''xterm-color'', ''xterm-256color'', ''linux'', ''screen'', ''screen-256color'', ''screen-bce''] if os.environ.get(''TERM'') in term_with_colors: green=''/033[32m'' red=''/033[31m'' reset=''/033[0m'' sys.ps1 = red + ''>>> '' + reset sys.ps2 = green + ''... '' + reset del term_with_colors atexit.register(save_history) del os, sys, atexit, readline, rlcompleter, save_history, historyPath
Ahora recibo una respuesta sensible al contexto y color.
El problema proviene del indicador de colores: cuando invoco el historial de búsqueda hacia atrás (presionando UP ) en la sesión interactiva de Python, Readline toma las secuencias de escape de la cuenta, por lo que la posición del cursor se calculó incorrectamente y el texto se mostró incorrectamente.
En la página de Bash man este problema mencionado y solucionado por marcadores especiales:
/[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt /] end a sequence of non-printing characters
¿Cómo solucionar este problema para el aviso de Python?