blob: 3cdb45fd4329de18716d9fe15250ad7010a44af3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
;;; org-capture-config.el --- Org Capture Configuration -*- lexical-binding: t; -*-
;;; Commentary:
;; Customizations related to org-capture and org-refile is here.
;; This includes 'org-webpage-clipper' functionality.
;; To ensure the code below is only loaded after org-mode, all code is wrapped in an
;; eval-after-load function.
;;; Code:
(with-eval-after-load 'org
;; ---------------------- Org-Webpage-Clipper ----------------------
;; Saves a copy of the page eww is visiting in the 'articles'-file for offline
;; reading. In other words, it's a "Poor Man's Pocket/Instapaper"
(defun org-webpage-clipper ()
"Capture a web page for later viewing in an org-file.
Encodes all links and marks that may interfere with org mode
display, then inserts the content into a file for later offline use.
This is meant to be used in coordination with an org-capture-template.
Example Template:
,@
(\"w\" \"Website\" plain (function org-webpage-clipper)
\"* %a\\nArticle Link: %L\\nCaptured On: %U\\n\\n\" :immediate-finish t)
'@"
(interactive)
;; Ensure valid major mode before encoding
(cond
((eq major-mode 'w3m-mode)
(org-w3m-copy-for-org-mode))
((eq major-mode 'eww-mode)
(org-eww-copy-for-org-mode))
(t
(error "Not valid -- must be in w3m or eww mode")))
;; Check for full path to the archive file. Create missing directories.
(unless (file-exists-p article-file)
(let ((dir (file-name-directory article-file)))
(unless (file-exists-p dir)
(make-directory dir))))
;; Move to end of file and insert blank line for org-capture to add timestamp, etc.
(find-file article-file)
(goto-char (point-max))
(insert "\n\n\n\n\n")
;; Insert the web content keeping our place.
(save-excursion (yank))
;; Remove page info from kill ring. Also, fix the yank pointer.
(setq kill-ring (cdr kill-ring))
(setq kill-ring-yank-pointer kill-ring)
;; Final repositioning.
(forward-line -1))
;;;; --------------------------------- Functions -------------------------------
(defun org-capture-pdf-active-region ()
"Capture the active region of the pdf-view buffer.
Intended to be called within an org capture template."
(let* ((pdf-buf-name (plist-get org-capture-plist :original-buffer))
(pdf-buf (get-buffer pdf-buf-name)))
(if (buffer-live-p pdf-buf)
(with-current-buffer pdf-buf
(car (pdf-view-active-region-text)))
(user-error "Buffer %S not alive" pdf-buf-name))))
;;;; --------------------------- Org-Capture Templates -------------------------
;; ORG-CAPTURE TEMPLATES
(setq org-protocol-default-template-key "L")
(setq org-capture-templates
'(
("e" "Event" entry (file+headline schedule-file "Scheduled Events")
"* %?\nWHEN: %^t" :prepend t)
("E" "Epub Text" entry (file+headline inbox-file "Inbox")
"* %?\n#+BEGIN_QUOTE\n %i\n#+END_QUOTE\nSource: [[%:link][%(buffer-name (org-capture-get :original-buffer))]]\nCaptured On: %U" :prepend t)
("P" "PDF Text" entry (file+headline inbox-file "Inbox")
"* %?\n#+BEGIN_QUOTE\n %(org-capture-pdf-active-region)\n#+END_QUOTE\nSource:[[%L][%(buffer-name (org-capture-get :original-buffer))]]\nCaptured On: %U" :prepend t)
("p" "Link with Selection" entry (file+headline inbox-file "Inbox")
"* TODO %?\n#+BEGIN_QUOTE\n%i\n#+END_QUOTE\n[[%:link][%:description]]\nCaptured On: %U" :prepend t)
("L" "Link" entry (file+headline inbox-file "Inbox")
"* TODO %?\n[[%:link][%:description]]\nCaptured On: %U" :prepend t)
("m" "Mu4e Email" entry (file+headline inbox-file "Inbox")
"* TODO %?%(if (string= \"%i\" \"\") \"\" \"\n#+BEGIN_QUOTE\n%i\n#+END_QUOTE\")\n[[%:link][%:description]]\nCaptured On: %U"
:prepend t)
("w" "Website" plain
(function org-webpage-clipper)
"* %a\nArticle Link: %L\nCaptured On: %U\n\n" :immediate-finish t)))
) ;; end with-eval-after-load 'org
(provide 'org-capture-config)
;;; org-capture-config.el ends here.
|