r58715 - pyrepl/trunk/pyrepl/pyrepl

[email protected] Tue, 7 Oct 2008 12:30:32 +0200 (CEST)
Newsgroups gmane.comp.python.pyrepl.checkins
Message-ID <[email protected]>
Author: arigo
Date: Tue Oct  7 12:30:32 2008
New Revision: 58715

Modified:
   pyrepl/trunk/pyrepl/pyrepl/readline.py
Log:
Add more laziness.  More specifically, avoid instantiating the
ReadlineAlikeReader just to get or set the readline_completer and the
completer_delims.



Modified: pyrepl/trunk/pyrepl/pyrepl/readline.py
==============================================================================
--- pyrepl/trunk/pyrepl/pyrepl/readline.py	(original)
+++ pyrepl/trunk/pyrepl/pyrepl/readline.py	Tue Oct  7 12:30:32 2008
@@ -41,23 +41,26 @@
 
 # ____________________________________________________________
 
-class ReadlineAlikeReader(HistoricalReader, CompletingReader):
+class ReadlineConfig(object):
     readline_completer = None
     completer_delims = dict.fromkeys(' \t\n`~!@#$%^&*()-=+[{]}\\|;:\'",<>/?')
 
+class ReadlineAlikeReader(HistoricalReader, CompletingReader):
+
     def error(self, msg="none"):
         pass    # don't show error messages by default
 
     def get_stem(self):
         b = self.buffer
         p = self.pos - 1
-        while p >= 0 and b[p] not in self.completer_delims:
+        completer_delims = self.config.completer_delims
+        while p >= 0 and b[p] not in completer_delims:
             p -= 1
         return ''.join(b[p+1:self.pos])
 
     def get_completions(self, stem):
         result = []
-        function = self.readline_completer
+        function = self.config.readline_completer
         if function is not None:
             try:
                 stem = str(stem)   # rlcompleter.py seems to not like unicode
@@ -148,11 +151,13 @@
     reader = None
     saved_history_length = -1
     startup_hook = None
+    config = ReadlineConfig()
 
     def get_reader(self):
         if self.reader is None:
             console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
             self.reader = ReadlineAlikeReader(console)
+            self.reader.config = self.config
         return self.reader
 
     def raw_input(self, prompt=''):
@@ -181,16 +186,16 @@
         pass  # XXX we don't support parsing GNU-readline-style init files
 
     def set_completer(self, function=None):
-        self.get_reader().readline_completer = function
+        self.config.readline_completer = function
 
     def get_completer(self):
-        return self.get_reader().readline_completer
+        return self.config.readline_completer
 
     def set_completer_delims(self, string):
-        self.get_reader().completer_delims = dict.fromkeys(string)
+        self.config.completer_delims = dict.fromkeys(string)
 
     def get_completer_delims(self):
-        chars = self.get_reader().completer_delims.keys()
+        chars = self.config.completer_delims.keys()
         chars.sort()
         return ''.join(chars)