about summary refs log tree commit diff stats
path: root/lisp/+org-drawer-list.el
blob: 5066d4dfcec21993af60ef46064a7c7b1cff54fa (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
;;; +org-drawer-list.el --- Add stuff to org drawers easy-style -*- lexical-binding: t; -*-

;;; Commentary:

;;; Code:

(require 'org)
(require '+org)
(require 'ol)
(require 'org-drawer-list)

(defcustom +org-drawer-list-resources-drawer "RESOURCES"
  "Where to add links with `+org-drawer-list-add-resource'.")

(defun +org-drawer-list-add-resource (url &optional title)
  "Add URL to the resource drawer of the current tree.
The resource drawer is given by the variable
`+org-drawer-list-resources-drawer'.  If optional TITLE is given,
format the list item as an Org link."
  (interactive
   (let* ((clipboard-url (if (string-match-p (rx (sequence bos
                                                           (or "http"
                                                               "gemini"
                                                               "gopher"
                                                               "tel"
                                                               "mailto")))
                                             (current-kill 0))
                             (string-trim (current-kill 0))
                           (read-string "Resource URL: ")))
          (url-title (let ((clipboard-headings
                            (+org-insert--get-title-and-headings clipboard-url)))
                       (read-string "title (edit): "
                                    (completing-read
                                     "title: " clipboard-headings
                                     nil nil nil nil (car clipboard-headings))))))
     (list clipboard-url url-title)))
  (let (current-visible-mode visible-mode)
    ;; XXX: This is not the "proper" way to fix the issue I was having --- I've
    ;; isolated the bug to somewhere in `org-insert-item', but this fix works
    ;; well enough™ for now.
    (visible-mode +1)
    (org-drawer-list-add +org-drawer-list-resources-drawer
                         (org-link-make-string url title))
    (visible-mode (if current-visible-mode +1 -1))))

(provide '+org-drawer-list)
;;; +org-drawer-list.el ends here