1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-02-14 03:12:10 +02:00

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.
This commit is contained in:
Pádraig Brady
2026-01-20 20:25:26 +00:00
parent 77e6b5d8f8
commit dfeb32f6e2
3 changed files with 7 additions and 4 deletions

3
NEWS
View File

@@ -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.,

View File

@@ -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));
}

View File

@@ -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.t >out || framework_failure_