[IPython-user] Re: OSX tab completion

Robert Kern rkern at ucsd.edu
Fri Apr 1 20:38:46 CST 2005


Fernando Perez wrote:
> Robert Kern wrote:
> 
>>> Robert, does this mean you also have the same problem?  I didn't 
>>> realize that this was a widespread OSX issue.  If someone has a 
>>> definitive solution/answer to this, please let me know so I can add 
>>> this information to the user's guide for future reference.
>>
>>
>>
>> Yes, I have the same problem. I am using my own build of readline 5.0. 
>> Unless I get more info very soon, this is also the build that will be 
>> in MacEnthon.
> 
> 
> OK, this is definitely controlled by the python build of readline.c.  
> Here are some pointers.  From the Gnu readline manual at
> 
> http://cnswww.cns.cwru.edu/~chet/readline/readline.html,
> 
> I found this note:
> 
> Variable: int rl_completion_append_character
>     When a single completion alternative matches at the end of the 
> command line, this character is appended to the inserted completion 
> text. The default is a space character (` '). Setting this to the null 
> character (`\0') prevents anything being appended automatically. This 
> can be changed in application-specific completion functions to provide 
> the "most sensible word separator character" according to an 
> application-specific command line syntax specification.
> 
> Indeed, in the Python 2.4.1 source tree, in Modules/readline.c, around 
> line 717 we find:
> 
> #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
>         rl_completion_append_character ='\0';
> #endif
> 
> 
> Now, a grep of the whole source tree reveals:
> 
> planck[Python-2.4.1]> egrep -rn HAVE_RL_COMPLETION_APPEND_CHARACTER *
> configure:19433:#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1
> configure.in:2861:  AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER, 1,
> Modules/readline.c:487:#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
> Modules/readline.c:579:#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
> Modules/readline.c:716:#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
> Modules/readline.c:858:#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
> pyconfig.h.in:375:#undef HAVE_RL_COMPLETION_APPEND_CHARACTER
> 
> 
> So what appears to occur is that under OSX, for whatever reason, 
> configure is NOT defining the HAVE_RL_COMPLETION_APPEND_CHARACTER macro, 
> and hence the rl_completion_append_character is never reset to '\0'.  In 
> this case, as indicated above, the readline library will default to 
> appending a space.
> 
> With this info, it should be possible to track down why under OSX (at 
> least under certain builds), the HAVE_RL_COMPLETION_APPEND_CHARACTER 
> macro is not being defined.  Worse case, you could just modify 
> readline.c to make the above change unconditionally, without worrying 
> about this macro (just strip the ifdef/endif).

Well, since Apple's core interpreter isn't ./configure'd with readline, 
then of course it wouldn't show up in the pyconfig.h. Fink, of course, 
builds python assuming it's own readline.

Assuming I don't completely bozo it up, MacEnthon's version will have 
this fix.

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter




More information about the IPython-user mailing list