bug-readline
[Top][All Lists]
Advanced

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

Re: bracketed-paste-mode and gdb


From: Andrew Burgess
Subject: Re: bracketed-paste-mode and gdb
Date: Thu, 3 Mar 2022 11:08:17 +0000

Hi Chet,

I don't really know how readline development works, but I wondered if
it would be at all helpful if I supplied a slightly more complete
patch.

The patch below renames _rl_eof_found to rl_eof_found, and moves the
declaration into the readline.h header file.  I've updated
doc/rltech.texi to mention this variable, though I've not regenerated
any of the final doc formats, which I note are also part of the repo.

Finally, I've added a line to callback.c to set rl_eof_found.  Inline
with your suggestions here:

  https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00024.html

I've just assigned to rl_eof_found from eof, rather than replacing the
use of eof with rl_eof_found throughout rl_callback_read_char.

You did mention here:

  https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00026.html

Both having rl_eof_found _and_ adding a new state flag.  I've not done
that here, I figure this is a minimal patch that would resolve the
issues I was seeing.  If having the state flag is a requirement then
I'm happy to rewrite this patch to include that, or that state flag
could be added later.

If there's anything at all that I can do to facilitate landing this,
or anything equivalent into readline, then please do let me know.

Many thanks,

Andrew

---

commit 021341e37a3dc7c4e6c3849eaf32bfeb069907a4
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Thu Mar 3 10:50:19 2022 +0000

    add rl_eof_found to the api, and set correctly for callback api
    
    Currently _rl_eof_found is only set for the traditional (non-callback)
    api.  This commit ensures that _rl_eof_found is also set for the
    callback api.
    
    Additionally, this commit renamed _rl_eof_found to rl_eof_found, and
    makes this variable part of the advertised api.  The documentation is
    updated to include mention of this variable.

diff --git a/callback.c b/callback.c
index a466cf9..5624781 100644
--- a/callback.c
+++ b/callback.c
@@ -127,7 +127,7 @@ void
 rl_callback_read_char (void)
 {
   char *line;
-  int eof, jcode;
+  int eof = 0, jcode;
   static procenv_t olevel;
 
   if (rl_linefunc == NULL)
@@ -261,6 +261,8 @@ rl_callback_read_char (void)
       else
        eof = readline_internal_char ();
 
+      rl_eof_found = eof;
+
       RL_CHECK_SIGNALS ();
       if (rl_done == 0 && _rl_want_redisplay)
        {
diff --git a/doc/rltech.texi b/doc/rltech.texi
index bbf57c2..4c98d21 100644
--- a/doc/rltech.texi
+++ b/doc/rltech.texi
@@ -325,6 +325,13 @@
 line immediately.
 @end deftypevar
 
+@deftypevar int rl_eof_found
+Set to a non-zero value if readline encountered @code{EOF}, zero
+otherwise.  Application functions can test this to discover if the
+user has sent @code{EOF}.
+
+@end deftypevar
+
 @deftypevar int rl_num_chars_to_read
 Setting this to a positive value before calling @code{readline()} causes
 Readline to return after accepting that many characters, rather
diff --git a/readline.c b/readline.c
index e61d188..e315209 100644
--- a/readline.c
+++ b/readline.c
@@ -218,8 +218,8 @@ int _rl_eof_char = CTRL ('D');
 /* Non-zero makes this the next keystroke to read. */
 int rl_pending_input = 0;
 
-/* If non-zero when readline_internal returns, it means we found EOF */
-int _rl_eof_found = 0;
+/* Non-zero when EOF is found at the end of the input line. */
+int rl_eof_found = 0;
 
 /* Pointer to a useful terminal name. */
 const char *rl_terminal_name = (const char *)NULL;
@@ -703,8 +703,8 @@ static char *
 readline_internal (void)
 {
   readline_internal_setup ();
-  _rl_eof_found = readline_internal_charloop ();
-  return (readline_internal_teardown (_rl_eof_found));
+  rl_eof_found = readline_internal_charloop ();
+  return (readline_internal_teardown (rl_eof_found));
 }
 
 void
diff --git a/readline.h b/readline.h
index 78fa39d..b51e327 100644
--- a/readline.h
+++ b/readline.h
@@ -553,6 +553,10 @@ extern int rl_mark;
    line and should return it. */
 extern int rl_done;
 
+/* Flag to indicate that readline has encountered EOF at the end of the
+   current input line.  */
+extern int rl_eof_found;
+
 /* If set to a character value, that will be the next keystroke read. */
 extern int rl_pending_input;
 
diff --git a/rlprivate.h b/rlprivate.h
index 23ab2d8..02838ae 100644
--- a/rlprivate.h
+++ b/rlprivate.h
@@ -544,7 +544,6 @@ extern FILE *_rl_in_stream;
 extern FILE *_rl_out_stream;
 extern int _rl_last_command_was_kill;
 extern int _rl_eof_char;
-extern int _rl_eof_found;
 extern procenv_t _rl_top_level;
 extern _rl_keyseq_cxt *_rl_kscxt;
 extern int _rl_keyseq_timeout;
diff --git a/rltty.c b/rltty.c
index d0cd572..b5e9199 100644
--- a/rltty.c
+++ b/rltty.c
@@ -692,7 +692,7 @@ rl_deprep_terminal (void)
   if (terminal_prepped & TPX_BRACKPASTE)
     {
       fprintf (rl_outstream, BRACK_PASTE_FINI);
-      if (_rl_eof_found)
+      if (rl_eof_found)
        fprintf (rl_outstream, "\n");
     }
 




reply via email to

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