bug-readline
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-readline] bug report: rl_completion_append_char is reset to ' ' by


From: Chad Whipkey
Subject: [Bug-readline] bug report: rl_completion_append_char is reset to ' ' by completion
Date: Tue, 27 Nov 2018 15:14:21 -0800

Hello,

This occurs in release 6.2, and was a change in behavior from 5.x as far as I know.

If you have a program that has:
  rl_completion_append_char = '\0';
as part of its code to set up readline, then that value is reset to ' ' during completion - effectively making rl_completion_append_char not usable this way.  I am pretty sure this worked on 5.x.

I've pasted a patch below that we used to change this behavior on 6.2.

But if the intention is that rl_completion_append_character should be changed only by the completion function, then I added that to its documentation would be good :)

Thanks for your consideration!

Chad Whipkey


+++ readline/complete.c	2012-03-30 11:23:32.362371000 -0700
@@ -339,6 +339,13 @@
    default is a space. */
 int rl_completion_append_character = ' ';
 
+/* Copy of rl_completion_append_character, taken before calling the
+ * application-specific completion function. Used to restore
+ * rl_completion_append_character to its default state in
+ * _rl_reset_completion_state.
+ */
+static int rl_completion_default_append_character = ' ';
+
 /* If non-zero, the completion functions don't append any closing quote.
    This is set to 0 by rl_complete_internal and may be changed by an
    application-specific completion function. */
@@ -455,6 +462,7 @@
 {
   rl_completion_found_quote = 0;
   rl_completion_quote_character = 0;
+  rl_completion_append_character = rl_completion_default_append_character;
 }
 
 /* Set default values for readline word completion.  These are the variables
@@ -468,7 +476,6 @@
   rl_filename_quoting_desired = 1;
   rl_completion_type = what_to_do;
   rl_completion_suppress_append = rl_completion_suppress_quote = 0;
-  rl_completion_append_character = ' ';
 
   /* The completion entry function may optionally change this. */
   rl_completion_mark_symlink_dirs = _rl_complete_mark_symlink_dirs;
@@ -1807,6 +1814,7 @@
 
   RL_SETSTATE(RL_STATE_COMPLETING);
 
+  rl_completion_default_append_character = rl_completion_append_character;
   set_completion_defaults (what_to_do);
 
   saved_line_buffer = rl_line_buffer ? savestring (rl_line_buffer) : (char *)NULL;
@@ -2390,6 +2398,8 @@
 
       RL_SETSTATE(RL_STATE_COMPLETING);
 
+      rl_completion_default_append_character = rl_completion_append_character;
+
       /* Only the completion entry function can change these. */
       set_completion_defaults ('%');
 
@@ -2429,6 +2439,7 @@
 	  FREE (orig_text);
 	  orig_text = (char *)0;
 	  completion_changed_buffer = 0;
+	  rl_completion_append_character = rl_completion_default_append_character;
 	  RL_UNSETSTATE(RL_STATE_COMPLETING);
 	  return (0);
 	}
@@ -2454,6 +2465,7 @@
       FREE (matches);
       matches = (char **)0;
       completion_changed_buffer = 0;
+      rl_completion_append_character = rl_completion_default_append_character;
       return (0);
     }
 
@@ -2479,6 +2491,7 @@
     }
 
   completion_changed_buffer = 1;
+  rl_completion_append_character = rl_completion_default_append_character;
   return (0);
 }
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]