2013-03-21 16 views
8

Aşağıdaki pasajı kullanarak, python yorumlayıcısına sekme tamamlamayı ekledim.Python sekmesi tamamlandığında (OsX 10.8) duplicate çıktı

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d=dict() 
>>> d. 
Display all 108 possibilities? (y or n) 
d.__class__(  d.__class__(  d.__class__(
d.__class__(  d.__cmp__(   d.__cmp__(
d.__contains__(  d.__contains__(  d.__delattr__(
d.__delattr__(  d.__delattr__(  d.__delitem__(
d.__delitem__(  d.__doc__   d.__doc__ 
d.__doc__   d.__eq__(   d.__eq__(
d.__format__(  d.__format__(  d.__format__(
d.__ge__(   d.__ge__(   d.__getattribute__(
d.__getattribute__( d.__getattribute__( d.__getitem__(
d.__getitem__(  d.__gt__(   d.__gt__(
d.__hash__   d.__hash__   d.__hash__ 
d.__init__(   d.__init__(   d.__init__(
d.__iter__(   d.__iter__(   d.__le__(
d.__le__(   d.__len__(   d.__len__(
d.__lt__(   d.__lt__(   d.__ne__(
d.__ne__(   d.__new__(   d.__new__(
d.__new__(   d.__reduce__(  d.__reduce__(
d.__reduce__(  d.__reduce_ex__( d.__reduce_ex__(
d.__reduce_ex__( d.__repr__(   d.__repr__(
d.__repr__(   d.__setattr__(  d.__setattr__(
d.__setattr__(  d.__setitem__(  d.__setitem__(
d.__sizeof__(  d.__sizeof__(  d.__sizeof__(
d.__str__(   d.__str__(   d.__str__(
d.__subclasshook__( d.__subclasshook__( d.__subclasshook__(
d.clear(   d.clear(   d.copy(
d.copy(    d.fromkeys(   d.fromkeys(
d.get(    d.get(    d.has_key(
d.has_key(   d.items(   d.items(
d.iteritems(  d.iteritems(  d.iterkeys(
d.iterkeys(   d.itervalues(  d.itervalues(
d.keys(    d.keys(    d.pop(
d.pop(    d.popitem(   d.popitem(
d.setdefault(  d.setdefault(  d.update(
d.update(   d.values(   d.values(
d.viewitems(  d.viewitems(  d.viewkeys(
d.viewkeys(   d.viewvalues(  d.viewvalues(

108 olasılıklar:

import readline 
import rlcompleter 
if 'libedit' in readline.__doc__: 
    readline.parse_and_bind("bind ^I rl_complete") 
else: 
    readline.parse_and_bind("tab: complete") 

Ancak, TAB vurduktan sonra, tercüman gibi çiftleri verecek bir garip davranışları karşılaştım! min 2, max 4 kopyaları. I dict alt sınıf Dahası

,

  • olasılıklar sayısı 160 (ve daha sonra 209, 258) çıkmaktadır.
  • TAB için komut vermek için yeterli karakter yazıyorsam, çiftleri görüntülemeden bunu yapar.

İşaretçiler veya hata ayıklama ipuçları takdir edilir.

cevap

4

Özel bir tamamlayıcı ekleyerek bu sorunu çözdüm. Şimdi beklendiği gibi çalışıyor.

import readline 
import rlcompleter 

c = rlcompleter.Completer() 

def complete(text, state): 
    buffer = readline.get_line_buffer() 
    first = c.complete(buffer, 0) 
    if state == 0: 
     return first 
    current = c.complete(buffer, state) 
    if current != first: 
     return current 

readline.parse_and_bind('bind ^I rl_complete') 
readline.set_completer(complete)