This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 1/2] pretty-print: support URL escape sequences (PR 87488)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: David Malcolm <dmalcolm at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Sat, 7 Dec 2019 00:41:13 +0100
- Subject: Re: [PATCH 1/2] pretty-print: support URL escape sequences (PR 87488)
- References: <20191010170614.2061-1-dmalcolm@redhat.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Thu, Oct 10, 2019 at 01:06:13PM -0400, David Malcolm wrote:
> https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
> describes an emerging standard for embedding URLs in escape sequences
> for marking up text output. This is supported e.g. by recent releases
> of GNOME Terminal.
Unfortunately, as reported by several people, the
OSC 8 ;; URL ST Text OSC 8 ;; ST
sequence renders badly on recentish konsole5 terminal emulator, which is
something a lot of people use.
While the above page suggests the use of ST rather than BEL, in practice
that at least currently does better job.
Tested with
echo -e '\e]8;;http://example.com\aThis is a link\e]8;;\a\n\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
on various terminals:
gnome-terminal-3.30.2 both lines the same, URLs work
konsole5-18.12.3 the first line normal text, the second one wrapped in
between \s, i.e. \This is a link\ , URLs don't work
xterm-334 both lines the same, normal text, URLs don't work
rxvt-2.7.10 ditto
xterm-314 ditto
konsole5-15.12.1 ditto
linux kernel 5.0.13 console ditto
linux kernel 4.4.14 console ditto
gnome-terminal-3.16.2 prints garbage around and both the URL and the text
are visible, but the line with ST has more garbage
than line with BEL
BEL instead of ST is also what ls -l --hyperlink prints.
Ok for trunk?
2019-12-07 Jakub Jelinek <jakub@redhat.com>
* pretty-print.c (pp_begin_url, pp_end_url, test_urls): Use BEL
instead of ST sequence to terminate OSC 8 strings.
--- gcc/pretty-print.c.jj 2019-10-11 09:29:15.103953133 +0200
+++ gcc/pretty-print.c 2019-12-07 00:17:00.860500837 +0100
@@ -2043,7 +2043,10 @@ identifier_to_locale (const char *ident)
>
> OSC 8 ; ; ST
>
- > OSC (operating system command) is typically ESC ]. */
+ > OSC (operating system command) is typically ESC ].
+
+ Use BEL instead of ST, as that is currently rendered better in some
+ terminal emulators that don't support OSC 8, like konsole5. */
/* If URL-printing is enabled, write an "open URL" escape sequence to PP
for the given URL. */
@@ -2052,7 +2055,7 @@ void
pp_begin_url (pretty_printer *pp, const char *url)
{
if (pp->show_urls)
- pp_printf (pp, "\33]8;;%s\33\\", url);
+ pp_printf (pp, "\33]8;;%s\a", url);
}
/* If URL-printing is enabled, write a "close URL" escape sequence to PP. */
@@ -2061,7 +2064,7 @@ void
pp_end_url (pretty_printer *pp)
{
if (pp->show_urls)
- pp_string (pp, "\33]8;;\33\\");
+ pp_string (pp, "\33]8;;\a");
}
#if CHECKING_P
@@ -2369,7 +2372,7 @@ test_urls ()
pp_begin_url (&pp, "http://example.com");
pp_string (&pp, "This is a link");
pp_end_url (&pp);
- ASSERT_STREQ ("\33]8;;http://example.com\33\\This is a link\33]8;;\33\\",
+ ASSERT_STREQ ("\33]8;;http://example.com\aThis is a link\33]8;;\a",
pp_formatted_text (&pp));
}
}
Jakub