;;; chd.el --- CHD customizations -*- lexical-binding: t -*- (require 'acdw-org) (require 'org) (defun chd/narrow-to-task (&optional point) "Narrow the buffer to the task POINT is in." (interactive "d") (when point (goto-char point)) (if (called-interactively-p 'interactive) (save-excursion (while (not (org-entry-is-todo-p)) (acdw/org-previous-heading-widen 1)) (org-narrow-to-subtree)) ;; well this is dumb... (while (not (org-entry-is-todo-p)) (acdw/org-previous-heading-widen 1)) (org-narrow-to-subtree))) (defun chd/clock-in () "Clock in to the current task." (save-excursion (chd/narrow-to-task) (org-clock-in))) (defun chd/do-the-thing () "Copy the plain version of the current task and open its link." (interactive) (chd/narrow-to-task) (save-excursion ;; Prepare buffer (acdw/flyspell-correct-f7) ; This is defined... elsewhere. ;; Export the buffer and copy it (pcase (org-entry-get (point-min) "EXPORTAS" t) ("html" (acdw/org-export-copy-html)) (_ (acdw/org-export-copy))) ;; Open the link to the doc (org-back-to-heading) (org-open-at-point))) (defun chd/click-bits (date) "Create a new Click Bits org file, or edit the one for DATE." (interactive (list (progn (require 'org) (org-read-date)))) ;; TODO: implement actual logic. (message "%s" date)) (defun chd/insert-client () "Insert the current client at point." (interactive) (if-let ((client (org-entry-get nil "CLIENT" :inherit))) (insert client) (beep) (user-error "No client found in current subtree"))) ;;; NOTES ;; org-protocol: https://orgmode.org/worg/org-contrib/org-protocol.html ;; the bit i wanna pull from TaskIQ: 'document.getElementById("preview") (provide 'chd) ;;; chd.el ends here