`mailto` links don't work
Describe the bug
Links with addresses starting with mailto: don't open in the mail client; instead nyxt attempts to open them and fails. This is an issue, as many places where mailto links are used (e.g. mailing list web interfaces) include parameters that otherwise can't be set in the UI of many email clients (e.g. "In-Reply-To" headers.)
Precise recipe to reproduce the issue
Enter the command xdg-open mailto:[email protected]. If properly configured, your mail client should open. Now, launch nyxt and click this link. Nyxt will fail to launch your mail client.
For website-specific issues: Can you reproduce this issue with Epiphany / GNOME Web (https://wiki.gnome.org/Apps/Web)? N/A
Information
- OS name+version: Guix 070c073
- Graphics card and driver: AMD Radeon 7900XTX, radv Mesa 24.3.2
- Desktop environment / Window manager name+version: Hyprland 0.47.0
- Installation method (Flatpak, Guix, package manager, build from source): Guix (channel aadcg cb6faa5, aadcg-nyxt)
- Output of
nyxt --system-information:
Nyxt version: 3.12.0
Renderer: GI-GTK
Operating system kernel: Linux 6.12.11
Lisp implementation: SBCL 2.4.10 (Dynamic space size: 3221225472)
Features: (:NYXT-GI-GTK :NYXT-GTK :NYXT-GI-GTK :NYXT-GTK :NYXT-3.12 :NYXT-3 :NYXT-3.12.0
:CLIPBOARD-CONTENT-METHOD :SWANK :SLYNK :PLUMP-UTF-32 :PARENSCRIPT :NSYMBOLS
:FSET-EXT-STRINGS :SBCL+SAFE-STANDARD-READTABLE :NAMED-READTABLES :GLOBAL-VARS
:CL-FAD :LPARALLEL :21BIT-CHARS :CUSTOM-HASH-TABLE-NATIVE :CL-PPCRE-UNICODE
:CL-UNICODE :CL-JSON-DOUBLE-FLOAT-IS-SUBSUMED
:CL-JSON-SINGLE-FLOAT-IS-SUBSUMED :CHUNGA :FLEXI-STREAMS :CL-PPCRE :WEBKIT2
:WEBKIT-2.44.1 :WEBKIT-2.44 :WEBKIT-2 :WEBKIT2-CORS-ALLOWLIST
:WEBKIT2-PASTE-PLAINTEXT :WEBKIT2-TRACKING :WEBKIT2-MUTE :WEBKIT2-EMOJI
:WEBKIT2-MEDIA :WEBKIT2-SANDBOXING :GTK-3-22 :GTK-3-20 :GTK-3-18 :GTK-3-16
:GTK-3-14 :GTK-3-12 :GTK-3-10 :GTK-3-8 :GTK-3-6 :GTK-3-4 :GTK :GDK-3-22
:GDK-3-20 :GDK-3-18 :GDK-3-16 :GDK-3-14 :GDK-3-12 :GDK-3-10 :GDK-3-8 :GDK-3-6
:GDK-3-4 :CAIRO-1-10 :CAIRO-1-12 :GDK-PIXBUF :CLOSER-MOP :GLIB-2-30 :GLIB-2-32
:GLIB-2-34 :GLIB-2-36 :GLIB-2-38 :GLIB-2-40 :GLIB-2-42 :GLIB-2-44 :GLIB-2-46
:GLIB-2-48 :GLIB-2-50 :GLIB-2-52 :GLIB-2-54 :GLIB-2-56 :GLIB-2-58 :GLIB
:BORDEAUX-THREADS :LPARALLEL.WITH-CLTL2 :LPARALLEL.WITH-CAS
:LPARALLEL.WITH-STEALING-SCHEDULER :SPLIT-SEQUENCE
CFFI-FEATURES:FLAT-NAMESPACE CFFI-FEATURES:X86-64 CFFI-FEATURES:UNIX :CFFI
CFFI-SYS::FLAT-NAMESPACE ALEXANDRIA::SEQUENCE-EMPTYP :FAST-IO-SV :FAST-IO
:CL-JSON-CLOS :CL-JSON :SBCL-USES-SB-ROTATE-BYTE CHIPZ-SYSTEM:GRAY-STREAMS
:THREAD-SUPPORT :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX
:NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :ARENA-ALLOCATOR :X86-64 :GENCGC :64-BIT
:ANSI-CL :COMMON-LISP :ELF :IEEE-FLOATING-POINT :LINUX :LITTLE-ENDIAN
:PACKAGE-LOCAL-NICKNAMES :SB-CORE-COMPRESSION :SB-LDB :SB-PACKAGE-LOCKS
:SB-THREAD :SB-UNICODE :SBCL :UNIX)
ASDF version: 3.3.7
ASDF registries: (NYXT-SOURCE-REGISTRY ENVIRONMENT-SOURCE-REGISTRY)
Critical dependencies: (/tmp/guix-build-aadcg-nyxt-3.12.0.drv-0/source/_build/cl-cffi-gtk/gtk/cl-cffi-gtk.asd
/tmp/guix-build-aadcg-nyxt-3.12.0.drv-0/source/_build/cl-gobject-introspection/cl-gobject-introspection.asd
/tmp/guix-build-aadcg-nyxt-3.12.0.drv-0/source/_build/cl-webkit/webkit2/cl-webkit2.asd)
Guix version:
Output when started from a shell
~ 🮲🮳 nyxt
Nyxt version 3.12.0
<INFO> [00:10:16] Source location: #P"/gnu/store/hd7mgl09glflizslbvjn5qffgdjbi349-aadcg-nyxt-3.12.0/share/nyxt/"
<INFO> [00:10:16] Loading Lisp file #P"/home/wong/.config/nyxt/auto-config.3.lisp".
<INFO> [00:10:16] Loading Lisp file #P"/home/wong/.config/nyxt/config.lisp".
<INFO> [00:10:16] Listening to socket: #P"/run/user/1000/nyxt/nyxt.socket"
(process:2): Gtk-WARNING **: 05:10:16.286: Locale not supported by C library.
Using the fallback 'C' locale.
(WebKitWebProcess:2): Gdk-WARNING **: 05:10:16.290: Failed to read portal settings: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface ?org.freedesktop.portal.Settings? on object at path /org/freedesktop/portal/desktop
<INFO> [00:10:16] Loading #P"/home/wong/.local/share/nyxt/history/default.lisp".
(process:2): Gtk-WARNING **: 05:10:16.807: Locale not supported by C library.
Using the fallback 'C' locale.
(WebKitWebProcess:2): Gdk-WARNING **: 05:10:16.810: Failed to read portal settings: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface ?org.freedesktop.portal.Settings? on object at path /org/freedesktop/portal/desktop
<INFO> [00:10:16] Loading #P"/home/wong/.local/share/nyxt/auto-rules.lisp".
<INFO> [00:10:16] Loading #P"/home/wong/.local/share/nyxt/hostlist-stevenblack.txt".
<INFO> [00:10:16] Restoring 5 buffers from history.
(process:2): Gtk-WARNING **: 05:10:17.566: Locale not supported by C library.
Using the fallback 'C' locale.
(WebKitWebProcess:2): Gdk-WARNING **: 05:10:17.569: Failed to read portal settings: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface ?org.freedesktop.portal.Settings? on object at path /org/freedesktop/portal/desktop
<INFO> [00:10:17] Loading "https://github.com/atlas-engineer/nyxt/issues/new?template=bug_report.md".
(process:2): Gtk-WARNING **: 05:10:17.712: Locale not supported by C library.
Using the fallback 'C' locale.
(WebKitWebProcess:2): Gdk-WARNING **: 05:10:17.715: Failed to read portal settings: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface ?org.freedesktop.portal.Settings? on object at path /org/freedesktop/portal/desktop
<INFO> [00:10:19] Finished loading "https://github.com/atlas-engineer/nyxt/issues/new?template=bug_report.md".
** (nyxt:12190): WARNING **: 00:10:36.761: WebKitWebView returned by WebKitWebView::create signal was not created with the related WebKitWebView
(process:2): Gtk-WARNING **: 05:10:36.792: Locale not supported by C library.
Using the fallback 'C' locale.
(WebKitWebProcess:2): Gdk-WARNING **: 05:10:36.795: Failed to read portal settings: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface ?org.freedesktop.portal.Settings? on object at path /org/freedesktop/portal/desktop
<INFO> [00:10:36] Failed to load URL mailto:[email protected] in buffer 6005.
<INFO> [00:10:36] Loading "mailto:[email protected]".
<INFO> [00:10:36] Loading "mailto:[email protected]".
<INFO> [00:10:36] Finished loading "mailto:[email protected]".
<INFO> [00:10:36] Finished loading "mailto:[email protected]".
<INFO> [00:10:40] Loading "https://github.com/atlas-engineer/nyxt/issues/new?template=bug_report.md".
<INFO> [00:10:41] Finished loading "https://github.com/atlas-engineer/nyxt/issues/new?template=bug_report.md".
<INFO> [00:10:41] Deleting socket #P"/run/user/1000/nyxt/nyxt.socket".
That seems easy to fix. Just see how the javascript scheme is handled in buffer-load. Patches welcome.
buffer-load may only handle requests that we explicitly load, if the user clicks on the link, then it shall not work!