Есть у меня пара файлов — .mailcap
и .mime.types
, и существует эта пара файлов уже почти 20 лет, и тиражируется на все машины.
И уже лет 20 я запускаю run-mailcap %s
. И у меня даже есть возможность конфигурировать некую простую логику выбора нужной программы в случае, если есть несколько альтернатив (самый примитивный случай — это разные обработчики в X Window и в консоли), напр.:
text/plain; nedit %s; test=test -n "${VAR}" -a ${VAR} -eq 0
text/plain; vim %s; test=test -n "${VAR}" -a ${VAR} -eq 1
text/plain; gvim %s; test=test -n "${VAR}" -a ${VAR} -eq 2
text/plain; emacs %s; test=test -n "${VAR}" -a ${VAR} -eq 3
text/plain; emacs -nw %s; test=test -n "${VAR}" -a ${VAR} -eq 4
text/plain; mcedit %s;
(Сама форма записи ; test=
описана в RFC 1524.)
И работает эта штука достаточно быстро.
Но вот уже лет пять как продвигается альернатива — xdg-open
. Которая прекрасна всем:
- Пытается определить, какое у меня DE, чтобы запустить «браузер по умолчанию». GNOME? Нет, не GNOME. KDE? Нет, не KDE. XFCE? Опять мимо. Нет, я, конечно, даже глазом не успеваю моргнуть — процесоры нынче быстрые.
- По MIME-типу файла пытается найти нужное приложение, распарсив 100500
*.desktop
-файлов в/usr/share/applications
. - После этого запускает наименее подходящее приложение (напр., для открытия каталогов я использовал
thunar
(inode/directory; thunar %s; test=test -n "${DISPLAY}"
)), но вотxdg-open
, с*ка, решил, что разумнее запуститьgit-cola
, а затем —audacious
(видимо, потому, что в обычных каталогахgit-cola
возвращает ненулевой код). - Наконец, для программ, у которых отсутствуют
*.desktop
-файлы, таковые приходится создавать вручную, что однозначно дольше добавления одной строки в.mailcap
. Короче, снова приходится настраивать то, что уже годы работало.
Проблема в том, что всё больше инструментов пытаются использовать xdg-open
вместо run-mailcap
, а сам xdg-open
попытается запустить run-mailcap
только в случае, если сам не придумает какой-нибудь глупости. Снести xdg-open
не получится — от него зависит chromium и ещё куча софта.
Посему вопрос: как сделать, чтобы run-mailcap
запускался всегда, и запретить всякие странные эвристики и танцы с бубном?
Для Midnight Commander всё (пока) решается просто:
export MC_XDG_OPEN='run-mailcap'
Для всего остального я, увы, пока вижу лишь
dpkg-divert --divert /usr/bin/xdg-open.orig --local --rename /usr/bin/xdg-open
ln -s run-mailcap /usr/bin/xdg-open
Есть менее радикальные решения?
UPD: Временно решил проблему, создав run-mailcap.desktop
след. содержания:
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
NoDisplay=true
Exec=run-mailcap %u
Name=run-mailcap
Comment=run-mailcap
и прописав его в качестве обработчика для всех типов в ~/.config/mimeapps.list
, но как-то это всё равно через задницу.