* src/ls.c (quote_name): Use ST (ESC \) rather than BEL,
as that's the only terminator mentioned in at least
ECMA-48, DEC STD 070, and EK-VT520-RM.
* NEWS: Mention the change in behavior.
* tests/ls/hyperlink.sh: Adjust accordingly.

Suggested by Egmont Koblinger.
---
 NEWS                  | 3 +++
 src/ls.c              | 4 ++--
 tests/ls/hyperlink.sh | 4 ++--
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index e91c4f760..b88f721e0 100644
--- a/NEWS
+++ b/NEWS
@@ -65,6 +65,9 @@ GNU coreutils NEWS                                    -*- 
outline -*-
   'fmt' -w,--width no longer includes '\n' in the width of a line.
   I.e., the specified width is interpreted to be an _inclusive_ maximum.
 
+  'ls --hyperlink' now uses more standard format hyperlinks.
+  '\e\' (ST) is now used as a delimiter, instead of '\a' (BEL).
+
   'ptx' -t is no longer a no-op, and now sets the default width to 100 columns.
 
   'timeout' now honors ignored signals and will not propagate them.  E.g.,
diff --git a/src/ls.c b/src/ls.c
index 102ef4a3f..5d87a1c36 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -4723,7 +4723,7 @@ quote_name (char const *name, struct quoting_options 
const *options,
          For example since ls is outputting a dense block of URIs
          it would be best to not underline by default, and only
          do so upon hover etc.  */
-      printf ("\033]8;;file://%s%s%s\a", h, *n == '/' ? "" : "/", n);
+      printf ("\033]8;;file://%s%s%s\e\\", h, *n == '/' ? "" : "/", n);
       free (h);
       free (n);
     }
@@ -4740,7 +4740,7 @@ quote_name (char const *name, struct quoting_options 
const *options,
 
   if (absolute_name)
     {
-      fputs ("\033]8;;\a", stdout);
+      fputs ("\033]8;;\e\\", stdout);
       if (skip_quotes)
         putchar (*(buf + len - 1));
     }
diff --git a/tests/ls/hyperlink.sh b/tests/ls/hyperlink.sh
index 3fd6c4f24..5f813e3ee 100755
--- a/tests/ls/hyperlink.sh
+++ b/tests/ls/hyperlink.sh
@@ -31,7 +31,7 @@ encode() {
 ls_encoded() {
   ef=$(encode "$1")
   echo "$ef" | grep 'dir$' >/dev/null && dir=: || dir=''
-  printf '\033]8;;file:///%s\a%s\033]8;;\a%s\n' \
+  printf '\033]8;;file:///%s\e\\%s\033]8;;\e\\%s\n' \
     "$ef" "$1" "$dir"
 }
 
@@ -51,7 +51,7 @@ for f in 'an#chor' 'back\slash' 'col:on' 'encoded%3Fquestion' 
\
 done
 )
 ln -s testdir testdirl || framework_failure_
-(cat exp.t && printf '\n' && sed 's/[^\/]testdir/&l/' exp.t) > exp \
+(cat exp.t && printf '\n' && sed 's|[^/]testdir|&l|' exp.t) > exp \
   || framework_failure_
 ls --hyper testdir testdirl >out.t || fail=1
 strip_host_and_path <out.t >out || framework_failure_
-- 
2.52.0


Reply via email to