Hello. I was reminded that I was often annoyed with identifying the code that made a word-completion, by hearing the same complaint from a collegue of mine just now.
Something like the attached that tweaks completion_matches calls lets psql emit the line number where a word-completion happens. The output can be split out using redirection so that it doesn't break into the conversation on console. (make -s COPT=-DTABCOMPLETION_DEBUG install) $ psql postgres 2>~debug.out =# alt[tab]er [tab]t[tab]ab[tab] [tab] You can see the following output in another bash session. $ tail -f ~/debug.out [1414][1435][1435][1435][1431] Every number enclosed by brackets is the line number in tab-complete.c, where completion happens. Is this useful? Any suggestions, thoughts? regards. -- Kyotaro Horiguchi NTT Open Source Software Center
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 9dbd555166..2deb892de6 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -60,6 +60,23 @@ extern char *filename_completion_function(); #define completion_matches rl_completion_matches #endif +/* + * By enabling the following definition the source line number is emitted to + * stderr for every completion attempt. You can isolate them from console + * interaction by redirecting stderr into a file. + */ +#ifdef TABCOMPLETION_DEBUG +#ifdef HAVE_RL_COMPLETION_MATCHES +#define org_completion_matches rl_completion_matches +#else +#define org_completion_matches completion_matches +#endif + +#undef completion_matches +#define completion_matches(text, list) \ + (fprintf(stderr, "[%d]", __LINE__), org_completion_matches(text, list)) +#endif + /* word break characters */ #define WORD_BREAKS "\t\n@$><=;|&{() "