[IPython-dev] Small change to MagicCompleter fixes filename completion on Windows

Gary Bishop gb at cs.unc.edu
Thu May 22 15:24:14 EDT 2003

Now that I've got my Python readline starting to work, I've found a 
problem that prevents filename completion on windows. Unfixed, it does this

In [1]: cd ~/pyt<TAB>
@ddir   @dhist  @dir    @dirs

In[1]: cd @d

The problem is in MagicCompleter. It only tests to see if the string 
begins with os.sep but a Windows file name may well begin with d: 
(after ~ expansion). I put in a small hack to fix this. I think a 
better patch would test the string to see if it looks like a legal 
python variable before subjecting it to these other completions. But my 
simple change fixes things well enough...

$ diff -Naur iplib.py~ iplib.py
--- iplib.py~   2003-05-13 16:24:11.000000000 -0400
+++ iplib.py    2003-05-22 15:15:21.000000000 -0400
@@ -123,7 +123,9 @@
             This is called successively with state == 0, 1, 2, ... until it
             returns None.  The completion should begin with 'text'.  """

+            doing_magic = False
             if text.startswith('@'):
+                doing_magic = True
                 text = text.replace('@','__IP.magic_')
             if text.startswith('~'):
                 text = os.path.expanduser(text)
@@ -138,7 +140,7 @@
                     self.matches = self.global_matches(text)
                     # this is so completion finds magics when automagic is on:
-                    if self.matches == [] and not text.startswith(os.sep):
+                    if self.matches == [] and doing_magic:
                         self.matches = self.attr_matches('__IP.magic_'+text)
                 return self.matches[state].replace('__IP.magic_','@')

More information about the IPython-dev mailing list