@@ -129,24 +129,32 @@ def test_nonascii(self):
129129
130130 script = r"""import readline
131131
132- if readline.__doc__ and "libedit" in readline.__doc__:
133- readline.parse_and_bind(r'bind ^B ed-prev-char')
134- readline.parse_and_bind(r'bind "\t" rl_complete')
132+ is_editline = readline.__doc__ and "libedit" in readline.__doc__
133+ inserted = "[\xEFnserted]"
134+ macro = "|t\xEB[after]"
135+ set_pre_input_hook = getattr(readline, "set_pre_input_hook", None)
136+ if is_editline or not set_pre_input_hook:
135137 # The insert_line() call via pre_input_hook() does nothing with Editline,
136138 # so include the extra text that would have been inserted here
137- readline.parse_and_bind('bind -s ^A "[\xEFnserted]|t\xEB[after]"')
139+ macro = inserted + macro
140+
141+ if is_editline:
142+ readline.parse_and_bind(r'bind ^B ed-prev-char')
143+ readline.parse_and_bind(r'bind "\t" rl_complete')
144+ readline.parse_and_bind(r'bind -s ^A "{}"'.format(macro))
138145else:
139146 readline.parse_and_bind(r'Control-b: backward-char')
140147 readline.parse_and_bind(r'"\t": complete')
141148 readline.parse_and_bind(r'set disable-completion off')
142149 readline.parse_and_bind(r'set show-all-if-ambiguous off')
143150 readline.parse_and_bind(r'set show-all-if-unmodified off')
144- readline.parse_and_bind('Control-a: "|t\xEB[after]"' )
151+ readline.parse_and_bind(r 'Control-a: "{}"'.format(macro) )
145152
146153def pre_input_hook():
147- readline.insert_text("[\xEFnserted]" )
154+ readline.insert_text(inserted )
148155 readline.redisplay()
149- readline.set_pre_input_hook(pre_input_hook)
156+ if set_pre_input_hook:
157+ set_pre_input_hook(pre_input_hook)
150158
151159def completer(text, state):
152160 if text == "t\xEB":
0 commit comments