With the release of GNU coreutils 9.10 (Feb 2026), we now link directly to the full online documentation from --help and man pages. Here we describe how we used terminal hyperlink functionality to address a common complaint GNU coreutils users had accessing help. The techniques discussed here should be quite generally applicable.
coreutils help links conversion flow

The problem

--help and man pages provide summary info so as not to overwhelm users, but there was no direct link to the corresponding full documentation. This full documentation is carefully curated and significant, being about 100k words (the size of an average book), and traditionally accessed through a dedicated "info" reader. However users are often unaware of this full documentation, and in any case can't really be expected to learn another interface to access it. This documentation is all available on the web already though (or installable as HTML locally), so all that was needed was to make the direct link from the summary help to the full documentation in a web browser, which all users are familiar with.

The solution

Leverage existing terminal support for hyperlinks.
To be clear, we're not talking about text that looks like a URL which many terminals automatically create a link for. Rather we're talking about marking up arbitrary text using the appropriate OSC 8 escape sequences. Most terminals support these, and if not, gracefully fall back to just displaying the text. Note ls --hyperlink already uses these hyperlinks to present links to local file:// URLs.

Add known fixed anchors in the full 100k word manual.
Having a particular place to link to is key, and "command"-"option" is the perfect identifier for this in our case. So we first added a new optItem macro to output the appropriate anchors. Note the refactoring to the new optItem macro, resulted in about 1000 fewer lines in the texiinfo source when all options were updated to use it.

Note there is a caveat with the use of hyphen in our identifiers as texinfo already uses "-" in anchors for spaces, hence it escapes literal "-" with "_002d". Therefore for our use we need to transform any "_002d" back to "-" in the html. This was initially done is a post-processing step as seen in the patch referenced above, however that wasn't triggered in all cases, so instead we needed to introduce a makeinfo wrapper to make the necessary transformations for any html generated by makeinfo.

Adjust --help to generate links from each --option.
I.e., to the output the appropriate ANSI escape sequences to link to the "command"-"option" anchor in the local or online manual. This was supported with a configurable base URL, which can be used to disable the feature or point to a locally installed manual, and also the provision of oputs() and oprintf() to markup the options in the --help output of each utility.

Note we provide some runtime configurability in these routines to support the unlikely situation where you want to suppress the output of links. If the TERM environment variable is unset or set to "dumb", then --help will not output links. Note we didn't gate the functionality on whether standard output was connected to a tty, as usually you'd want the links output if directing to less(1) etc. BTW less(1) needs the -R option to display links appropriately, which should be the default really. The less(1) default can be set with export LESS=-R.

Update help2man to convert from OSC links to roff \X links.
We auto generate our man pages from --help output using the help2man utility. This was updated to identify the OSC hyperlinks and convert to roff \X links. These are then converted to clickable links in the man page destination, which is often back to OSC links on a terminal. I.e., the output from --help and the man page are very similar, both resulting in clickable links.

The result

The terminal output from --help and man pages look similar, with the following example from part of sort --help or man sort, demonstrating the clickable links to the full manual. The links also serve as a visual distinction between the --option and its description. Note this output was generated by ansi2html.sh which was also updated to support OSC hyperlinks.
...
  -b, --ignore-leading-blanks
         ignore leading blanks when finding sort keys in each line
  -d, --dictionary-order
         consider only blanks and alphanumeric characters
  -f, --ignore-case
         fold lower case to upper case characters
  -g, --general-numeric-sort
         compare according to general numerical value
  -i, --ignore-nonprinting
         consider only printable characters
  -M, --month-sort
         compare (unknown) < 'JAN' < ... < 'DEC'
  -h, --human-numeric-sort
         compare human readable numbers (e.g., 2K 1G)
...
© Feb 13 2026