Kilka miesięcy temu napisałem blog post opisujący, w jaki sposób osiągnąć zakończenie tabulatora w standardowym interpretatorze interaktywnym Python - funkcja, którą kiedyś uważałem za dostępną tylko w IPythonie. Zauważyłem, że jest to niezwykle przydatne, biorąc pod uwagę, że czasami muszę przełączyć się na standardowy interpreter z powodu problemów z unikodami IPython.Uzupełnianie tabulatorami w interpreterach języka Python w terminalu OS X
Ostatnio zrobiłem trochę pracy w OS X. Ku mojemu niezadowoleniu skrypt wydaje się nie działać dla aplikacji terminalowej OS X. Mam nadzieję, że niektórzy z was z doświadczeniem w OS X mogą mi pomóc w rozwiązywaniu problemów, aby mógł działać również w Terminalu.
Jestem odtwarzając poniższy kod
import atexit
import os.path
try:
import readline
except ImportError:
pass
else:
import rlcompleter
class IrlCompleter(rlcompleter.Completer):
"""
This class enables a "tab" insertion if there's no text for
completion.
The default "tab" is four spaces. You can initialize with '\t' as
the tab if you wish to use a genuine tab.
"""
def __init__(self, tab=' '):
self.tab = tab
rlcompleter.Completer.__init__(self)
def complete(self, text, state):
if text == '':
readline.insert_text(self.tab)
return None
else:
return rlcompleter.Completer.complete(self,text,state)
#you could change this line to bind another key instead tab.
readline.parse_and_bind('tab: complete')
readline.set_completer(IrlCompleter('\t').complete)
# Restore our command-line history, and save it when Python exits.
history_path = os.path.expanduser('~/.pyhistory')
if os.path.isfile(history_path):
readline.read_history_file(history_path)
atexit.register(lambda x=history_path: readline.write_history_file(x))
Zauważ, że mam lekko pod redakcją go z wersji na moim blogu tak, że IrlCompleter
jest inicjowany z prawdziwej karcie, która wydaje się być to, co jest wyprowadzany przez klawisz Tab w Terminalu.
Ah, dzięki za wyjaśnienie, dlaczego to nie działa. :-) – gotgenes
Wygląda na to, że w Macportach nie ma Pythona z TabCompletion:% wariantów portu python26% zawiera tylko pakiety darwin, universal i ucs4. - Jak zainstalować Pythona z uzupełnianiem kart przez MacPorts? –
@Masi, uzupełnianie kart nie jest wariantem portu, jest to coś, co konfigurujesz po fakcie. Zobacz http://docs.python.org/library/rlcompleter.html – mpontillo