diff options
author | Franck Cuny <franck@fcuny.net> | 2022-05-31 19:28:54 -0700 |
---|---|---|
committer | Franck Cuny <franck@fcuny.net> | 2022-05-31 19:28:54 -0700 |
commit | 6c3212c7362245a329cbf16bafabb7f4a1f9f3de (patch) | |
tree | e2259b0369d5a9f4e92f83faa321275fa443bef8 /emacs/elisp | |
parent | fix(prog): add support for workspace module to gopls (diff) | |
download | emacs.d-6c3212c7362245a329cbf16bafabb7f4a1f9f3de.tar.gz |
feat(cheeseboard): module to get the list of pizzas from cheeseboard
To see which pizzas are available this week at cheeseboard within Emacs is a dream come true. What's better than "M-x my/cheeseboard-menu" ?! This displays in a buffer the list of pizzas for the week. It includes the ingredients for the pizza, and hours of operation for that day (since the hours depending on the day of the week).
Diffstat (limited to 'emacs/elisp')
-rw-r--r-- | emacs/elisp/my-cheeseboard.el | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/emacs/elisp/my-cheeseboard.el b/emacs/elisp/my-cheeseboard.el new file mode 100644 index 0000000..9713e14 --- /dev/null +++ b/emacs/elisp/my-cheeseboard.el @@ -0,0 +1,55 @@ +;;; my-cheeseboard.el --- summary -*- lexical-binding: t -*- +;; Author: Franck Cuny <franck@fcuny.net> + +;;; Commentary: + +;; commentary: +;; As everybody knows, the best pizza in the world is at +;; cheeseboard[0]. I like to check during the week the pizzas for the +;; week and see if there are any we would like to have. This module +;; gets the list of pizzas for the week and display them in a buffer. +;; +;; [0] https://cheeseboardcollective.coop/ + +;;; Code: + +(require 'dom) + +(defconst my/cheeseboard-buffer "*cheeseboard-menu*" + "Name of the buffer for displaying the week's menu.") + +(defconst my/cheeseboard-url "https://cheeseboardcollective.coop/pizza/" + "URL to fetch to get the list of pizzas for the week.") + +(defun my/cheeseboard-menu () + "Display the list of pizzas for the week." + (interactive) + (let* ((dom (with-current-buffer (url-retrieve-synchronously my/cheeseboard-url) + (libxml-parse-html-region (point-min) (point-max)))) + ;; a class named `pizza-list' contains all the items for the + ;; week. they are wrapped in a `article' tag. + (menus (dom-by-tag (dom-by-class dom "pizza-list") 'article)) + (inhibit-read-only t) + (buffer-undo-list t)) + (pop-to-buffer my/cheeseboard-buffer) + (erase-buffer) + (insert (format "if you want to look at the menu on the website => %s\n\n" my/cheeseboard-url)) + (dolist (menu menus) + (my/pizza-of-the-day menu)) + (special-mode))) + +(defun my/pizza-of-the-day (menu) + "Print the pizzas for the day from the MENU." + (let* ((date (car (dom-strings (dom-by-tag (dom-by-class menu "date") 'p)))) + (pizza (dom-by-tag (dom-by-class menu "menu") 'p))) + (if (string= "The pizzeria is closed today." (nth 0 (dom-strings pizza))) + (insert (format "%s: cheeseboard is closed :(\n\n" (propertize date 'face 'italic))) + (insert (format "%s: 🍕 %s\n(note: %s, %s)\n\n" + (propertize date 'face 'italic) + (propertize (replace-regexp-in-string "\n" "" (nth 2 (dom-strings pizza))) 'face 'highlight) + (nth 0 (dom-strings pizza)) + (nth 1 (dom-strings pizza))))))) + +(provide 'my-cheeseboard) + +;;; my-cheeseboard.el ends here |