Chciałem zacząć mutt
w terminalu, kiedy kliknę jakiś mailto:
tag na stronie internetowej. Czy to jest możliwe? Obecnie uruchamia się Firefox, którego tak naprawdę nie lubię; ładuje się powoli i jest niepotrzebny.
Najpierw musisz upewnić się, że istnieje .desktop
plik wymagany przez specyfikację XDG. W przypadku programów GUI istnieje duża szansa, że istnieje już odpowiedni .desktop
plik, w przypadku aplikacji terminalowych zwykle trzeba utworzyć własny plik. Sprawdź katalog /usr/share/applications
istniejących plików. Może jest już mutt.desktop
plik. Jeśli nie, utwórz go.
Następnie edytuj plik ~/.local/share/applications/mimeapps.list
i dodaj następujący wiersz
[Default Applications]
x-scheme-handler/mailto=mutt.desktop;
To rejestruje mutt w module mailto
obsługi. Możesz potwierdzić pomyślną rejestrację za pomocą
xdg-mime query default 'x-scheme-handler/mailto'
które powinny generować mutt.desktop
. Teraz możesz kliknąć „mailto” w chromie, a terminal powinien wyskoczyć z instancją mutt. Nie trzeba nawet restartować sesji pulpitu ani przeglądarki.
Musisz napisać skrypt określający terminal, w którym chcesz mutt
otworzyć. Następnie w przeglądarce Firefox możesz powiązać ten skrypt z łączami mailto. Na przykład, jeśli używasz terminatora, możesz utworzyć następujący skrypt.
#!/usr/bin/env bash
terminator -x "mutt '$@'"
W moim przypadku mam trwały rozwijany terminator, więc chcę go w nowej karcie. Potrzebuję też palety 256 kolorów, więc używam
#!/usr/bin/env bash
terminator --new-tab -x "TERM=xterm-256color; mutt '$@'"
FWIW to mój pełny skrypt, który również odkrywa terminator (jeśli jest ukryty), używając skrótu Ctrl+ Spacei przenosi go na pierwszy plan.
#!/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
Jakie środowisko pulpitu używasz? Musisz sprawdzić, czy w ustawieniach modułu obsługi typu MIME ustawiono określony moduł obsługi tego typu rzeczy.