From: Pádraig Brady Date: Tue, 20 Jan 2026 20:25:26 +0000 (+0000) Subject: ls: --hyperlink: switch to more standard delimiters X-Git-Tag: v9.10~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dfeb32f6e21cac123f4995bbcbe7e4b4ec81ddb5;p=thirdparty%2Fcoreutils.git ls: --hyperlink: switch to more standard delimiters * 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. --- diff --git a/NEWS b/NEWS index 3eb51380e5..b74c19f1ff 100644 --- a/NEWS +++ b/NEWS @@ -71,6 +71,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. + 'ESC\' (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 102ef4a3f7..75215141fe 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\033\\", 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;;\033\\", stdout); if (skip_quotes) putchar (*(buf + len - 1)); } diff --git a/tests/ls/hyperlink.sh b/tests/ls/hyperlink.sh index 3fd6c4f240..dc83ea34ab 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\033\\%s\033]8;;\033\\%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 || framework_failure_