by . (updated

Before this morning, I had two barebones Emacs commands which I used to open my website in a browser. One opened the index page in the build folder, and one opened the index page on the deployed site.


(defun mj/browse-my-website ()
  (interactive)
  (browse-url "https://www.maxwelljoslyn.com"))

(defun mj/browse-my-website-locally ()
  (interactive)
  (browse-url site-build-folder))

Since I frequently used the "browse-locally" command to check how the site looks before deploying, but rarely used the command to browse the deployed site, I turned the latter into an option triggered by passing an argument.

More substantially, browsing the index page is still the default, but if I'm viewing a webpage's source in Emacs, the command instead browses that page on the (local or deployed) site. This is usually what I want when checking pages.

Here is the new and improved command.


(defun mj/browse-my-website (arg)
  "If visiting a webpage source file,
  open corresponding page on the site.
  Otherwise, browse the homepage. 
  
  Local browsing is the the default.
  With prefix ARG, browse deployed site instead."
  (interactive "P")
  (let ((site-name
         (if arg
           "https://www.maxwelljoslyn.com/"
           site-build-folder))
        (visited-file (buffer-file-name))
        (path))
    (cond
     ((not visited-file)
      (setq path "index"))

     ((string-match blog-post-regex visited-file)
      (setq path  (concat "blog/"
                          (match-string 1 visited-file))))
     ((string-match article-regex visited-file)
      (setq path (match-string 1 visited-file)))

     (t
      (setq path  "index")))
    (browse-url (concat site-name path))))