Я хотел запустить mutt
в терминале, когда я нажимаю на тег mailto:
на веб-странице. Это возможно? В настоящее время Firefox запускается, что я действительно не одобряю; это медленная загрузка и ненужная.
3 ответа
Сначала вам нужно убедиться, что есть файл .desktop
который требуется спецификацией XDG. Для программ с графическим интерфейсом велика вероятность того, что подходящий файл .desktop
уже существует, для терминальных приложений обычно приходится создавать свой собственный. Проверьте каталог /usr/share/applications
для существующих файлов. Возможно, там уже есть файл mutt.desktop
. Если нет, создайте его.
Затем отредактируйте файл ~/.local/share/applications/mimeapps.list
и добавьте следующую строку
[Default Applications]
x-scheme-handler/mailto=mutt.desktop;
Это регистрирует mutt с обработчиком mailto
. Вы можете подтвердить успешную регистрацию с
xdg-mime query default 'x-scheme-handler/mailto'
который должен вывести mutt.desktop
. Теперь вы можете нажать на «mailto» в chromium, и в терминале должен появиться экземпляр Mutt. Нет необходимости даже перезапускать сеанс рабочего стола или браузер.
Вам нужно написать скрипт, который определяет терминал, в котором вы хотите открыть mutt
. Затем в Firefox вы можете связать этот скрипт со ссылками mailto. Например, если вы используете терминатор, вы можете создать следующий скрипт.
#!/usr/bin/env bash
terminator -x "mutt '$@'"
В моем случае у меня есть постоянный выпадающий терминатор, поэтому я хочу его на новой вкладке. Мне также нужна 256 цветовая палитра, поэтому я использую
#!/usr/bin/env bash
terminator --new-tab -x "TERM=xterm-256color; mutt '$@'"
FWIW это мой полный скрипт, который также показывает терминатор (если он скрыт), используя сочетание клавиш Ctrl+Space, и выводит его на передний план.
#!/usr/bin/env bash
terminator --new-tab -x "TERM=xterm-256color; mutt '$@'"
# If necessary, unhide and focus terminator window.
windowlist=$(xprop -root | sed -rn 's/_NET_CLIENT_LIST_STACKING\(WINDOW\): window id # (.*)/\1/p' | tr -d ',')
terminator_visible=false
for i in $windowlist; do
[[ $(xprop -id $i | grep WM_CLASS\(STRING\)) == 'WM_CLASS(STRING) = "terminator", "Terminator"' ]] && terminator_visible=true && term_id=$i
done
if [[ $terminator_visible == false ]]; then # it's hidden
xdotool key --clearmodifiers ctrl+space
elif [[ $(xprop -id $(xdotool getactivewindow) | grep WM_CLASS\(STRING\)) != 'WM_CLASS(STRING) = "terminator", "Terminator"' ]]; then # it's visible, but not active
xdotool windowactivate $term_id 2> /dev/null # Gives error; not sure why. XGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)
fi
В какой среде вы работаете? Вам нужно проверить настройки обработчика MIME-типа, чтобы узнать, как установить конкретный обработчик для подобных вещей.