Hi! When using %[ and %] (prompt length ignore area) in .psqlrc's prompt formats, psql sends a \001 before the actual readline commands (RL_PROMPT_{START,END}_IGNORE). This is the way bash handles the shell's PSx format, but it is not a readline command, but a bash specific quirk.
Example .psqlrc: \set PROMPT1 '%[%033[0;35m%]%/@%m%R%#%[%033[0;22m%] ' -> not correctly handled, the cursor will be in the middle of the prompt. Attached patch fixes this. This was investigated and patched by Aaron Schrab <[EMAIL PROTECTED]>, full details at http://bugs.debian.org/343616 Thank you for considering this, and have a merry christmas! Martin -- Martin Pitt http://www.piware.de Ubuntu Developer http://www.ubuntu.com Debian Developer http://www.debian.org In a world without walls and fences, who needs Windows and Gates?
diff -ruN postgresql-8.1.1-old/src/bin/psql/prompt.c postgresql-8.1.1/src/bin/psql/prompt.c --- postgresql-8.1.1-old/src/bin/psql/prompt.c 2005-10-15 04:49:40.000000000 +0200 +++ postgresql-8.1.1/src/bin/psql/prompt.c 2005-12-22 19:12:47.000000000 +0100 @@ -296,8 +296,7 @@ * characters in prompt strings must be marked as such, in * order to properly display the line during editing. */ - buf[0] = '\001'; - buf[1] = (*p == '[') ? RL_PROMPT_START_IGNORE : RL_PROMPT_END_IGNORE; + buf[0] = (*p == '[') ? RL_PROMPT_START_IGNORE : RL_PROMPT_END_IGNORE; #endif /* USE_READLINE */ break;
signature.asc
Description: Digital signature