--- configure.orig 2010-05-25 12:27:03.000000000 +1000 +++ configure 2011-10-31 14:15:56.000000000 +1100 @@ -11947,9 +11947,9 @@ $as_echo_n "checking how to link readline libs... " >&6; } for py_libtermcap in "" ncursesw ncurses curses termcap; do if test -z "$py_libtermcap"; then - READLINE_LIBS="-lreadline" + READLINE_LIBS="-ledit" else - READLINE_LIBS="-lreadline -l$py_libtermcap" + READLINE_LIBS="-ledit -l$py_libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11993,13 +11993,13 @@ fi # check for readline 2.1 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_callback_handler_install in -lreadline" >&5 -$as_echo_n "checking for rl_callback_handler_install in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_callback_handler_install in -ledit" >&5 +$as_echo_n "checking for rl_callback_handler_install in -ledit... " >&6; } if test "${ac_cv_lib_readline_rl_callback_handler_install+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12039,7 +12039,7 @@ # check for readline 2.2 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : have_readline=yes @@ -12051,7 +12051,7 @@ then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | @@ -12064,7 +12064,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | @@ -12078,13 +12078,13 @@ fi # check for readline 4.0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -lreadline" >&5 -$as_echo_n "checking for rl_pre_input_hook in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -ledit" >&5 +$as_echo_n "checking for rl_pre_input_hook in -ledit... " >&6; } if test "${ac_cv_lib_readline_rl_pre_input_hook+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12122,13 +12122,13 @@ # also in 4.0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -lreadline" >&5 -$as_echo_n "checking for rl_completion_display_matches_hook in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -ledit" >&5 +$as_echo_n "checking for rl_completion_display_matches_hook in -ledit... " >&6; } if test "${ac_cv_lib_readline_rl_completion_display_matches_hook+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12166,13 +12166,13 @@ # check for readline 4.2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -lreadline" >&5 -$as_echo_n "checking for rl_completion_matches in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -ledit" >&5 +$as_echo_n "checking for rl_completion_matches in -ledit... " >&6; } if test "${ac_cv_lib_readline_rl_completion_matches+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12212,7 +12212,7 @@ # also in readline 4.2 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : have_readline=yes @@ -12224,7 +12224,7 @@ then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | --- setup.py.orig 2011-10-31 14:13:22.000000000 +1100 +++ setup.py 2011-10-31 14:18:07.000000000 +1100 @@ -601,7 +601,7 @@ missing.extend(['imageop']) # readline - do_readline = self.compiler.find_library_file(lib_dirs, 'readline') + do_readline = self.compiler.find_library_file(lib_dirs, 'edit') readline_termcap_library = "" curses_library = "" # Determine if readline is already linked against curses or tinfo. @@ -656,7 +656,7 @@ else: readline_extra_link_args = () - readline_libs = ['readline'] + readline_libs = ['edit'] if readline_termcap_library: pass # Issue 7384: Already linked against curses or tinfo. elif curses_library: --- Modules/readline.c.orig 2013-10-30 02:04:39.000000000 +1100 +++ Modules/readline.c 2019-03-09 12:52:15.000000000 +1100 @@ -28,8 +28,7 @@ /* GNU readline definitions */ #undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */ -#include -#include +#include #ifdef HAVE_RL_COMPLETION_MATCHES #define completion_matches(x, y) \ @@ -510,14 +509,12 @@ get_history_item(PyObject *self, PyObjec HISTORY_STATE *hist_st; hist_st = history_get_history_state(); - idx --; - /* * Apple's readline emulation crashes when * the index is out of range, therefore * test for that and fail gracefully. */ - if (idx < 0 || idx >= hist_st->length) { + if (idx < 1 || idx > hist_st->length) { Py_RETURN_NONE; } } @@ -846,7 +843,7 @@ setup_readline(void) rl_pre_input_hook = (Function *)on_pre_input_hook; #endif /* Set our completion function */ - rl_attempted_completion_function = (CPPFunction *)flex_complete; + rl_attempted_completion_function = (rl_completion_func_t *)flex_complete; /* Set Python word break characters */ rl_completer_word_break_characters = strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); @@ -926,7 +923,6 @@ readline_until_enter_or_signal(char *pro PyEval_SaveThread(); #endif if (s < 0) { - rl_free_line_state(); rl_cleanup_after_signal(); rl_callback_handler_remove(); *signal = 1; @@ -1025,15 +1021,6 @@ call_readline(FILE *sys_stdin, FILE *sys char *line; HISTORY_STATE *state = history_get_history_state(); if (state->length > 0) -#ifdef __APPLE__ - if (using_libedit_emulation) { - /* - * Libedit's emulation uses 0-based indexes, - * the real readline uses 1-based indexes. - */ - line = history_get(state->length - 1)->line; - } else -#endif /* __APPLE__ */ line = history_get(state->length)->line; else line = "";