macro: Small refactoring.
* lisp/org-macro.el (org-macro--collect-macros): Use `org-collect-keywords'.
This commit is contained in:
parent
0826461bc1
commit
3e44ddbe78
|
@ -50,6 +50,7 @@
|
|||
(require 'org-macs)
|
||||
(require 'org-compat)
|
||||
|
||||
(declare-function org-collect-keywords "org" (keywords &optional unique directory))
|
||||
(declare-function org-element-at-point "org-element" ())
|
||||
(declare-function org-element-context "org-element" (&optional element))
|
||||
(declare-function org-element-copy "org-element" (datum))
|
||||
|
@ -94,42 +95,18 @@ templates. Return the updated list."
|
|||
(t (push (cons name (or value "")) templates))))
|
||||
templates)
|
||||
|
||||
(defun org-macro--collect-macros (&optional files templates)
|
||||
(defun org-macro--collect-macros ()
|
||||
"Collect macro definitions in current buffer and setup files.
|
||||
Return an alist containing all macro templates found.
|
||||
|
||||
FILES is a list of setup files names read so far, used to avoid
|
||||
circular dependencies. TEMPLATES is the alist collected so far.
|
||||
The two arguments are used in recursive calls."
|
||||
(let ((case-fold-search t))
|
||||
(org-with-point-at 1
|
||||
(while (re-search-forward "^[ \t]*#\\+\\(MACRO\\|SETUPFILE\\):" nil t)
|
||||
(let ((element (org-element-at-point)))
|
||||
(when (eq (org-element-type element) 'keyword)
|
||||
(let ((val (org-element-property :value element)))
|
||||
(if (equal "MACRO" (org-element-property :key element))
|
||||
;; Install macro in TEMPLATES.
|
||||
(when (string-match "^\\(\\S-+\\)[ \t]*" val)
|
||||
(let ((name (match-string 1 val))
|
||||
(value (substring val (match-end 0))))
|
||||
(setq templates
|
||||
(org-macro--set-template name value templates))))
|
||||
;; Enter setup file.
|
||||
(let* ((uri (org-strip-quotes val))
|
||||
(uri-is-url (org-file-url-p uri))
|
||||
(uri (if uri-is-url
|
||||
uri
|
||||
(expand-file-name uri))))
|
||||
;; Avoid circular dependencies.
|
||||
(unless (member uri files)
|
||||
(with-temp-buffer
|
||||
(unless uri-is-url
|
||||
(setq default-directory (file-name-directory uri)))
|
||||
(org-mode)
|
||||
(insert (org-file-contents uri 'noerror))
|
||||
(setq templates
|
||||
(org-macro--collect-macros
|
||||
(cons uri files) templates)))))))))))
|
||||
Return an alist containing all macro templates found."
|
||||
(let ((templates nil))
|
||||
(pcase (org-collect-keywords '("MACRO"))
|
||||
(`(("MACRO" . ,values))
|
||||
(dolist (value values)
|
||||
(when (string-match "^\\(\\S-+\\)[ \t]*" value)
|
||||
(let ((name (match-string 1 value))
|
||||
(definition (substring value (match-end 0))))
|
||||
(setq templates
|
||||
(org-macro--set-template name definition templates)))))))
|
||||
(let ((macros `(("author" . ,(org-macro--find-keyword-value "AUTHOR"))
|
||||
("email" . ,(org-macro--find-keyword-value "EMAIL"))
|
||||
("title" . ,(org-macro--find-keyword-value "TITLE" t))
|
||||
|
|
Loading…
Reference in New Issue