Here's take III of the patch, with the #ifdef for RL_PROMPT_START_IGNORE, the #else chopped, and made with diff -c against 7.4.1. A brief comment seemed warranted since this is an undocumented readline feature.
Note that the #if is:
#if defined (USE_READLINE) && defined (RL_PROMPT_START_IGNORE)
Although this is pedantic (R_P_S_I implies U_R), it seemed more transparent for those who come this way hence. Do as you like with it.
Fini?
-Reece
-- Reece Hart, http://www.in-machina.com/~reece/, GPG:0x25EC91A0 |
# patch for fancy (e.g., colored) prompts in psql, take III # # This is a patch to support readline prompts which contain non-printing # characters, as for fancy colorized prompts. This was nearly a direct # lift from bash-2.05b's lib/readline/display.c, per guidance from Chet Ramey. # # Usage: # Invisible characters within the prompt must be quoted with %[ and %]. # example: \set PROMPT1 '%[%033[1;[EMAIL PROTECTED]/%R%[%033[0m%]%# ' # diff -r --exclude='*.rej' --exclude='*.log' --exclude='*.so' --exclude='*.o' --exclude='*.orig' -c postgresql-7.4.1-orig/doc/src/sgml/ref/psql-ref.sgml postgresql-7.4.1/doc/src/sgml/ref/psql-ref.sgml *** postgresql-7.4.1-orig/doc/src/sgml/ref/psql-ref.sgml 2003-10-31 17:56:29.000000000 -0800 --- postgresql-7.4.1/doc/src/sgml/ref/psql-ref.sgml 2004-01-16 09:56:54.000000000 -0800 *************** *** 2236,2241 **** --- 2236,2265 ---- </varlistentry> <varlistentry> + <term><literal>%[</literal> ... <literal>%]</literal></term> + <listitem> + <para> + Prompts may contain terminal control characters which, for + example, change the color, background, or style of the prompt + text, or change the title of the terminal window. In order for + the line editing features of readline to work properly, these + non-printing control characters must be designated as invisible + by surrounding them with <literal>%[</literal> and + <literal>%]</literal>. Multiple pairs of these may occur within + the prompt. For example, + <programlisting> + testdb=> \set PROMPT1 '%[%033[1;33;[EMAIL PROTECTED]/%R%[%033[0m%#%] ' + </programlisting> + results in a boldfaced (<literal>1;</literal>) yellow-on-black + <literal>33;40</literal> prompt (within color-capable terminals). + See <ulink + url="http://www.termsys.demon.co.uk/vtansi.htm">http://www.termsys.demon.co.uk/vtansi.htm</a> + for an example of allowable codes. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><literal>%R</literal></term> <listitem> <para> diff -r --exclude='*.rej' --exclude='*.log' --exclude='*.so' --exclude='*.o' --exclude='*.orig' -c postgresql-7.4.1-orig/src/bin/psql/prompt.c postgresql-7.4.1/src/bin/psql/prompt.c *** postgresql-7.4.1-orig/src/bin/psql/prompt.c 2003-10-03 18:04:46.000000000 -0700 --- postgresql-7.4.1/src/bin/psql/prompt.c 2004-01-20 09:33:23.000000000 -0800 *************** *** 13,18 **** --- 13,19 ---- #include "settings.h" #include "common.h" #include "variables.h" + #include "input.h" #ifdef WIN32 #include <io.h> *************** *** 241,246 **** --- 242,259 ---- buf[0] = '>'; break; + case '[': + case ']': + #if defined (USE_READLINE) && defined (RL_PROMPT_START_IGNORE) + /* readline >=4.0 undocumented feature: non-printing + characters in prompt strings must be quoted in order + to properly display the line during editing. + */ + buf[0] = '\001'; + buf[1] = (*p == '[') ? RL_PROMPT_START_IGNORE : RL_PROMPT_END_IGNORE; + #endif /* USE_READLINE */ + break; + /* execute command */ case '`': {
---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])