Note #2025-03-24-002

Srijan Choudhary Srijan Choudhary

Read Jeremy's post on quickly switching the default browser.

I had a shell script to do this as well. Doing it from Emacs makes more sense because I can have a completion UI.

So, here's my modified version for Linux:

(defun sj/default-browser (&optional name)
  "Set the default browser based on the given NAME."
  (interactive
   (list
    (completing-read
     "Browser: "
     (split-string
      (shell-command-to-string
       "find /usr/share/applications ~/.local/share/applications -name \"*.desktop\" -exec grep -l \"Categories=.*WebBrowser\" {} \\;")
      "\n" t))))
  (let ((browser-desktop (file-name-nondirectory name)))
    (shell-command (format "xdg-mime default %s text/html" browser-desktop))
    (shell-command (format "xdg-mime default %s application/xhtml+xml" browser-desktop))
    (shell-command (format "xdg-mime default %s application/x-extension-html" browser-desktop))
    (shell-command (format "xdg-settings set default-web-browser %s" browser-desktop))))

As a plus, it automatically lists the installed browsers based on .desktop files on your system.

Interactions

↩️ 1 mention

  • m0rp30
    m0rp30

    It's really interesting ... i have a litle bit simplified the function like so:

    (defun sj/default-browser (&optional name)
    Set the default browser based on the given NAME.
    (interactive
    (list
    (completing-read "Browser: "
    (split-string
    (shell-command-to-string
    "grep -rl \"Categories=.*WebBrowser\" /usr/share/applications/ ~/.local/share/applications/")
    "\n" t))))
    (let ((mime-tipe-list '("text/html" "application/xhtml+xml" "application/x-extension-html"))
    (browser-desktop (file-name-nondirectory name)))
    (dolist (mime-tipe mime-tipe-list)
    (shell-command (format "xdg-mime default %s %s" browser-desktop mime-tipe)))
    (shell-command (format "xdg-settings set default-web-browser %s" browser-desktop))))

    really good job

    Reply