64 lines
1.8 KiB
EmacsLisp
64 lines
1.8 KiB
EmacsLisp
;;; 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
|