@@ -144,24 +144,32 @@ def test_nonascii(self):
144144
145145 script = r"""import readline
146146
147- if readline.__doc__ and "libedit" in readline.__doc__:
148- readline.parse_and_bind(r'bind ^B ed-prev-char')
149- readline.parse_and_bind(r'bind "\t" rl_complete')
147+ is_editline = readline.__doc__ and "libedit" in readline.__doc__
148+ inserted = "[\xEFnserted]"
149+ macro = "|t\xEB[after]"
150+ set_pre_input_hook = getattr(readline, "set_pre_input_hook", None)
151+ if is_editline or not set_pre_input_hook:
150152 # The insert_line() call via pre_input_hook() does nothing with Editline,
151153 # so include the extra text that would have been inserted here
152- readline.parse_and_bind('bind -s ^A "[\xEFnserted]|t\xEB[after]"')
154+ macro = inserted + macro
155+
156+ if is_editline:
157+ readline.parse_and_bind(r'bind ^B ed-prev-char')
158+ readline.parse_and_bind(r'bind "\t" rl_complete')
159+ readline.parse_and_bind(r'bind -s ^A "{}"'.format(macro))
153160else:
154161 readline.parse_and_bind(r'Control-b: backward-char')
155162 readline.parse_and_bind(r'"\t": complete')
156163 readline.parse_and_bind(r'set disable-completion off')
157164 readline.parse_and_bind(r'set show-all-if-ambiguous off')
158165 readline.parse_and_bind(r'set show-all-if-unmodified off')
159- readline.parse_and_bind('Control-a: "|t\xEB[after]"' )
166+ readline.parse_and_bind(r 'Control-a: "{}"'.format(macro) )
160167
161168def pre_input_hook():
162- readline.insert_text("[\xEFnserted]" )
169+ readline.insert_text(inserted )
163170 readline.redisplay()
164- readline.set_pre_input_hook(pre_input_hook)
171+ if set_pre_input_hook:
172+ set_pre_input_hook(pre_input_hook)
165173
166174def completer(text, state):
167175 if text == "t\xEB":
0 commit comments