Org Mode: Create a quick timestamped note and capture a screenshot
| emacs, orgI wanted to be able to quickly create timestamped notes and possibly capture a screenshot. Prompting for a value inside an org-capture-template
disrupts my screen a little, so maybe this will make it as easy as possible. I could probably do this without going through org-capture-templates, but I wanted to take advantage of the fact that Org Mode will deal with the date tree and finding the right position itself.
(use-package org :config (add-to-list 'org-capture-templates '("p" "Podcast log - timestamped" item (file+olp+datetree "~/orgzly/timestamped.org") "%<%H:%M:%S,%3N> %^{Note}" :immediate-finish t))) (defun my/org-capture-prefill-template (template &rest values) "Pre-fill TEMPLATE with VALUES." (setq template (or template (org-capture-get :template))) (with-temp-buffer (insert template) (goto-char (point-min)) (while (re-search-forward (concat "%\\(" "\\[\\(.+\\)\\]\\|" "<\\([^>\n]+\\)>\\|" "\\([tTuUaliAcxkKInfF]\\)\\|" "\\(:[-a-zA-Z]+\\)\\|" "\\^\\({\\([^}]*\\)}\\)" "?\\([gGtTuUCLp]\\)?\\|" "%\\\\\\([1-9][0-9]*\\)" "\\)") nil t) (if (car values) (replace-match (car values) nil t)) (setq values (cdr values))) (buffer-string))) (defun my/capture-screenshot (time &optional note) "Capture screenshot and save it to a file labeled with TIME and NOTE. Return the filename." (interactive (list (current-time) (read-string "Note: "))) (let* ((filename (expand-file-name (concat "Screenshot_" (format-time-string "%Y%0m%d_%H%M%S" time) (if note (concat " " note) "") ".png") "~/Pictures")) (cmd (concat "spectacle -b -o " (shell-quote-argument filename)))) (shell-command cmd) filename)) (defun my/capture-timestamped-note (time note) "Disable Helm and capture a quick timestamped note." (interactive (list (current-time) (read-string "Note: "))) (let ((helm-completing-read-handlers-alist '((org-capture . nil))) (entry (org-capture-select-template "p"))) (org-capture-set-plist entry) (org-capture-get-template) (org-capture-set-target-location) (org-capture-put :template (org-capture-fill-template (my/org-capture-prefill-template (org-capture-get :template) (format-time-string "%H:%M:%S,%3N") note))) (org-capture-place-template) (org-capture-finalize))) (defun my/capture-timestamped-note-with-screenshot (time note) (interactive (list (current-time) (read-string "Note: "))) (kill-new (my/capture-screenshot time note)) (my/capture-timestamped-note time note))
Then I can call it with h h n
for my/capture-timestamped-note
or h h i
for my/capture-timestamped-note-with-screenshot
via keyboard shortcuts defined elsewhere in my config (see my/key-chord-commands
).
You can comment with Disqus or you can e-mail me at sacha@sachachua.com.