Proposal: use /usr/bin/open as an alternative for run-mailcap and others.
Simon McVittie
smcv at debian.org
Wed Oct 7 23:17:34 BST 2020
On Thu, 08 Oct 2020 at 05:54:27 +0900, Charles Plessy wrote:
> /bin/open has been kindly freed a couple years ago (#732796) and I would
> like to propose to repurpose it as a standard command for opening files,
> like on Mac OS and NextStep before it.
>
> As I maintain the mime-support package (soon to be split in `mailcap`
> and `media-types`, seee #964850), that provides the `run-mailcap`
> command to open files, I propose to provide /usr/bin/open as a symbolic
> link to it using the alternatives system.
>
> While `run-mailcap` has mutiple command-line options, I would like to
> define the "interface" of /usr/bin/open as having a single argument
> only, which is a path to a file or a directory. This would give the
> opportunity for other packages such as xdg-utils to provide
> /usr/bin/open if they wish so.
Is this intentionally a filename, and not a URI reference like the
argument to xdg-open(1), the `gio open` subcommand in gio(1), and macOS
open(1)? In particular, if we're using this name by analogy with the
command in macOS, it doesn't seem great to be using a different invocation
pattern.
(In most cases a relative or absolute path turns into a URI reference
that evaluates to the file:/// URI of the file you first thought of,
although there are differences - you'd have to prepend './' to filenames
with a ':' before '/', and filenames with '%' could be misinterpreted.)
If open(1) is defined to take only a single local file or directory
argument, and URI-based programs like xdg-open and gio open are allowed
to be alternatives for it, then I think it's inevitable that we will
have bugs where people incorrectly assume that open(1) is *always*
able to act on a URI argument, unless the URI-based programs are always
invoked via a wrapper something like this (untested):
#!/bin/bash
if [ "$#" != 1 ]; then
... error ...
fi
url="${1/[%]/%25/}"
case "$url" in
(/* | ./*)
;;
(*)
url="./$url"
;;
esac
exec xdg-open "$url"
Regards,
smcv
More information about the Pkg-freedesktop-maintainers
mailing list