summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-core/readline/readline-6.2/readline-only-enable-meta-key-for-a-single-call-read.patch114
-rw-r--r--meta/recipes-core/readline/readline_6.2.bb1
2 files changed, 115 insertions, 0 deletions
diff --git a/meta/recipes-core/readline/readline-6.2/readline-only-enable-meta-key-for-a-single-call-read.patch b/meta/recipes-core/readline/readline-6.2/readline-only-enable-meta-key-for-a-single-call-read.patch
new file mode 100644
index 0000000000..ccfdb9f8c9
--- /dev/null
+++ b/meta/recipes-core/readline/readline-6.2/readline-only-enable-meta-key-for-a-single-call-read.patch
@@ -0,0 +1,114 @@
+readline: only enable meta key for a single call readline().
+
+terminal.c
+ - change _rl_enable_meta_key to set a flag indicating that it sent the
+ enable-meta sequence
+ - _rl_disable_meta_key: new function to turn off meta mode after we
+ turned it on with _rl_enable_meta_key
+
+rlprivate.h
+ - extern declaration for _rl_disable_meta_key
+
+readline.c
+- _rl_internal_teardown: add call to _rl_disable_meta_key to make the
+ meta key active only for the duration of the call to readline()
+- _rl_internal_setup: move call to _rl_enable_meta_key here from
+ readline_initialize_everything so the meta key is active only for
+ the duration of the call to readline(). Suggestion from Miroslav
+ Lichvar <mlichvar@redhat.com>
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Upstream-Status: backport
+Imported patch from: http://git.savannah.gnu.org/cgit/bash.git/tag/?id=bash-4.3-alpha
+---
+ readline.c | 12 ++++++++----
+ rlprivate.h | 1 +
+ terminal.c | 19 ++++++++++++++++++-
+ 3 files changed, 27 insertions(+), 5 deletions(-)
+
+diff --git a/readline.c b/readline.c
+--- a/readline.c
++++ b/readline.c
+@@ -369,6 +369,11 @@ readline_internal_setup ()
+ _rl_in_stream = rl_instream;
+ _rl_out_stream = rl_outstream;
+
++ /* Enable the meta key only for the duration of readline(), if this
++ terminal has one. */
++ if (_rl_enable_meta)
++ _rl_enable_meta_key ();
++
+ if (rl_startup_hook)
+ (*rl_startup_hook) ();
+
+@@ -437,6 +442,9 @@ readline_internal_teardown (eof)
+ if (rl_undo_list)
+ rl_free_undo_list ();
+
++ /* Disable the meta key, if this terminal has one. */
++ _rl_disable_meta_key ();
++
+ /* Restore normal cursor, if available. */
+ _rl_set_insert_mode (RL_IM_INSERT, 0);
+
+@@ -1091,10 +1099,6 @@ readline_initialize_everything ()
+ /* Try to bind a common arrow key prefix, if not already bound. */
+ bind_arrow_keys ();
+
+- /* Enable the meta key, if this terminal has one. */
+- if (_rl_enable_meta)
+- _rl_enable_meta_key ();
+-
+ /* If the completion parser's default word break characters haven't
+ been set yet, then do so now. */
+ if (rl_completer_word_break_characters == (char *)NULL)
+diff --git a/rlprivate.h b/rlprivate.h
+index 384ff67..be2c2c6 100644
+--- a/rlprivate.h
++++ b/rlprivate.h
+@@ -339,6 +339,7 @@ extern int _rl_output_character_function PARAMS((int));
+ extern void _rl_output_some_chars PARAMS((const char *, int));
+ extern int _rl_backspace PARAMS((int));
+ extern void _rl_enable_meta_key PARAMS((void));
++extern void _rl_disable_meta_key PARAMS((void));
+ extern void _rl_control_keypad PARAMS((int));
+ extern void _rl_set_cursor PARAMS((int, int));
+
+diff --git a/terminal.c b/terminal.c
+index f8c2f6e..21ee031 100644
+--- a/terminal.c
++++ b/terminal.c
+@@ -683,12 +683,29 @@ rl_ding ()
+ /* */
+ /* **************************************************************** */
+
++static int enabled_meta = 0; /* flag indicating we enabled meta mode */
++
+ void
+ _rl_enable_meta_key ()
+ {
+ #if !defined (__DJGPP__)
+ if (term_has_meta && _rl_term_mm)
+- tputs (_rl_term_mm, 1, _rl_output_character_function);
++ {
++ tputs (_rl_term_mm, 1, _rl_output_character_function);
++ enabled_meta = 1;
++ }
++#endif
++}
++
++void
++_rl_disable_meta_key ()
++{
++#if !defined (__DJGPP__)
++ if (term_has_meta && _rl_term_mo && enabled_meta)
++ {
++ tputs (_rl_term_mo, 1, _rl_output_character_function);
++ enabled_meta = 0;
++ }
+ #endif
+ }
+
+--
+1.8.1.2
+
diff --git a/meta/recipes-core/readline/readline_6.2.bb b/meta/recipes-core/readline/readline_6.2.bb
index 45fa4e7f3e..87636da4e3 100644
--- a/meta/recipes-core/readline/readline_6.2.bb
+++ b/meta/recipes-core/readline/readline_6.2.bb
@@ -6,6 +6,7 @@ SRC_URI += "${GNU_MIRROR}/readline/readline-6.2-patches/readline62-001;name=patc
${GNU_MIRROR}/readline/readline-6.2-patches/readline62-002;name=patch2;apply=yes;striplevel=0 \
${GNU_MIRROR}/readline/readline-6.2-patches/readline62-003;name=patch3;apply=yes;striplevel=0 \
${GNU_MIRROR}/readline/readline-6.2-patches/readline62-004;name=patch4;apply=yes;striplevel=0 \
+file://readline-only-enable-meta-key-for-a-single-call-read.patch \
"
SRC_URI[archive.md5sum] = "67948acb2ca081f23359d0256e9a271c"