xdg-settings and xdg-mime do not recognize single MimeType value with no trailing semicolon
Try
xdg-settings set default-url-scheme-handler tst-protocol tst-protocol.desktop
where tst-protocol.desktop
has a single MimeType
option without the trailing semicolon.
MimeType=x-scheme-handler/tst-protocol
It is allowed accordingly to Desktop Entry Specification. The tool unexpectedly modifies the desktop file to
MimeType=x-scheme-handler/tst-protocol;x-scheme-handler/tst-protocol
The cause is incorrect list of patterns in scripts/xdg-settings.in#L67
case "$MIMETYPES" in
$MIME\;*|*\;$MIME\;*|*\;$MIME\;|*\;$MIME)
Certainly the $MIME
option is missed while I am unsure concerning necessity of *\;$MIME\;
that should be handled by *\;$MIME\;*
. Blame has not shed some light on such duplication. It might be a workaround for some shell bug, but accordingly to shellcheck reports #221 the script does not look like highly portable. Notice that a trailing semicolon is not necessary when the application can handle multiple MIME types.
I expect the following:
$MIME\;*|*\;$MIME\;*|*\;$MIME|$MIME)
xdg-mime
is affected as well, see search_desktop_file
grep -l "$MIME;" "$dir/"*.desktop 2>/dev/null
I am unsure concerning portable regexp for grep, but generally I expect
grep -l "[=;]$MIME\(;\|$\)" "$dir/"*.desktop 2>/dev/null
I am quite puzzled by set_browser_mime
in xdg-settings
restoring to orig
, but the value may be empty. In my cases it happened due to bugs described above. The result is the following error message:
Command from sh -x
, notice the empty argument:
+ xdg-mime default x-scheme-handler/tst-protocol
xdg-mime: application argument missing
Try 'xdg-mime --help' for more information.
Actually modification of desktop files by xdg-settings
is a surprise for me. It is not documented and I would expect setting [Added Associations]
in mimeapps.list
appropriately instead. Another surprise is silence in the case of failures. Usually CLI utilities print some error message.