From cd33adfe9804fd1cb27b339d43776a2e0fefd3ff Mon Sep 17 00:00:00 2001 From: Jorgen Stenarson Date: Thu, 28 Jan 2010 20:36:47 +0100 Subject: [PATCH] Fix to make it possible to disable pyreadline from ini file --- pyreadline/__init__.py | 27 +--------------- pyreadline/rlmain.py | 52 +++++------------------------- readline.py | 72 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 80 insertions(+), 71 deletions(-) diff --git a/pyreadline/__init__.py b/pyreadline/__init__.py index b32f480..05a5622 100644 --- a/pyreadline/__init__.py +++ b/pyreadline/__init__.py @@ -7,31 +7,6 @@ # the file COPYING, distributed as part of this software. #***************************************************************************** import unicode_helper, logger, clipboard, lineeditor, modes -from rlmain import * import rlmain -__all__ = [ 'parse_and_bind', - 'get_line_buffer', - 'insert_text', - 'clear_history', - 'read_init_file', - 'read_history_file', - 'write_history_file', - 'get_history_length', - 'set_history_length', - 'set_startup_hook', - 'set_pre_input_hook', - 'set_completer', - 'get_completer', - 'get_begidx', - 'get_endidx', - 'set_completer_delims', - 'get_completer_delims', - 'add_history', - 'callback_handler_install', - 'callback_handler_remove', - 'callback_read_char', - 'GetOutputFile', - 'rl', - 'rlmain'] - import release + diff --git a/pyreadline/rlmain.py b/pyreadline/rlmain.py index c47e1ac..43b4ac3 100644 --- a/pyreadline/rlmain.py +++ b/pyreadline/rlmain.py @@ -54,6 +54,7 @@ class BaseReadline(object): self.bell_style = u'none' self.mark = -1 self.console=MockConsole() + self.disable_readline = False # this code needs to follow l_buffer and history creation self.editingmodes = [mode(self) for mode in editingmodes] for mode in self.editingmodes: @@ -65,7 +66,6 @@ class BaseReadline(object): self.callback = None - def parse_and_bind(self, string): u'''Parse and execute single line of a readline init file.''' try: @@ -267,13 +267,16 @@ class BaseReadline(object): inputrcpath=os.path.expanduser("~/pyreadlineconfig.ini")): modes = dict([(x.mode,x) for x in self.editingmodes]) mode = self.editingmodes[0].mode + def setmode(name): self.mode = modes[name] + def bind_key(key, name): if hasattr(modes[mode], name): modes[mode]._bind_key(key, getattr(modes[mode], name)) else: print u"Trying to bind unknown command '%s' to key '%s'"%(name, key) + def un_bind_key(key): keyinfo = make_KeyPress_from_keydescr(key).tuple() if keyinfo in modes[mode].key_dispatch: @@ -297,6 +300,9 @@ class BaseReadline(object): def setbellstyle(mode): self.bell_style = mode + def disable_readline(mode): + self.disable_readline = mode + def sethistorylength(length): self.mode._history.history_length = int(length) @@ -353,6 +359,7 @@ class BaseReadline(object): u"modes":modes, u"set_mode":setmode, u"bind_key":bind_key, + u"disable_readline":disable_readline, u"bind_exit_key":bind_exit_key, u"un_bind_key":un_bind_key, u"un_bind_exit_key":un_bind_exit_key, @@ -556,46 +563,3 @@ class Readline(BaseReadline): raise KeyboardInterrupt return event - - - -# create a Readline object to contain the state -rl = Readline() - -def GetOutputFile(): - u'''Return the console object used by readline so that it can be used for printing in color.''' - return rl.console - -# make these available so this looks like the python readline module -read_init_file = rl.read_init_file -parse_and_bind = rl.parse_and_bind -clear_history = rl.clear_history -add_history = rl.add_history -insert_text = rl.insert_text - -write_history_file = rl.write_history_file -read_history_file = rl.read_history_file - -get_completer_delims = rl.get_completer_delims -get_history_length = rl.get_history_length -get_line_buffer = rl.get_line_buffer -set_completer = rl.set_completer -get_completer = rl.get_completer -get_begidx = rl.get_begidx -get_endidx = rl.get_endidx - -set_completer_delims = rl.set_completer_delims -set_history_length = rl.set_history_length -set_pre_input_hook = rl.set_pre_input_hook -set_startup_hook = rl.set_startup_hook - -callback_handler_install=rl.callback_handler_install -callback_handler_remove=rl.callback_handler_remove -callback_read_char=rl.callback_read_char - -if __name__ == u'__main__': - res = [ rl.readline(u'In[%d] ' % i) for i in range(3) ] - print res -else: - console.install_readline(rl.readline) - pass diff --git a/readline.py b/readline.py index 0df5d61..5c76f79 100644 --- a/readline.py +++ b/readline.py @@ -2,4 +2,74 @@ #this file is needed in site-packages to emulate readline #necessary for rlcompleter since it relies on the existance #of a readline module -from pyreadline import * +from pyreadline.rlmain import Readline + +__all__ = [ 'parse_and_bind', + 'get_line_buffer', + 'insert_text', + 'clear_history', + 'read_init_file', + 'read_history_file', + 'write_history_file', + 'get_history_length', + 'set_history_length', + 'set_startup_hook', + 'set_pre_input_hook', + 'set_completer', + 'get_completer', + 'get_begidx', + 'get_endidx', + 'set_completer_delims', + 'get_completer_delims', + 'add_history', + 'callback_handler_install', + 'callback_handler_remove', + 'callback_read_char',] #Some other objects are added below + + +# create a Readline object to contain the state +rl = Readline() + +if rl.disable_readline: + def dummy(completer=""): + pass + for funk in __all__: + globals()[funk] = dummy +else: + def GetOutputFile(): + u'''Return the console object used by readline so that it can be used for printing in color.''' + return rl.console + __all__.append("GetOutputFile") + + import pyreadline.console as console + + # make these available so this looks like the python readline module + read_init_file = rl.read_init_file + parse_and_bind = rl.parse_and_bind + clear_history = rl.clear_history + add_history = rl.add_history + insert_text = rl.insert_text + + write_history_file = rl.write_history_file + read_history_file = rl.read_history_file + + get_completer_delims = rl.get_completer_delims + get_history_length = rl.get_history_length + get_line_buffer = rl.get_line_buffer + set_completer = rl.set_completer + get_completer = rl.get_completer + get_begidx = rl.get_begidx + get_endidx = rl.get_endidx + + set_completer_delims = rl.set_completer_delims + set_history_length = rl.set_history_length + set_pre_input_hook = rl.set_pre_input_hook + set_startup_hook = rl.set_startup_hook + + callback_handler_install=rl.callback_handler_install + callback_handler_remove=rl.callback_handler_remove + callback_read_char=rl.callback_read_char + + console.install_readline(rl.readline) + +__all__.append("rl") \ No newline at end of file