lang/org: refactor contrib modules

- Fix #1546
- Ensure contrib modules aren't included in byte-compilation/autoload
  generation if their requisite flags aren't enabled
This commit is contained in:
Henrik Lissner 2019-07-09 22:44:51 +02:00
parent 69ba8bb657
commit 468e630110
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
7 changed files with 56 additions and 60 deletions

View file

@ -0,0 +1,39 @@
;;; lang/org/autoload/contrib-dragndrop.el -*- lexical-binding: t; -*-
;;;###if (featurep! +dragndrop)
;;;###autoload
(defun +org-dragndrop-download-dnd (uri action)
"TODO"
(if (eq major-mode 'org-mode)
(+org-attach/uri uri)
(let ((dnd-protocol-alist
(rassq-delete-all '+org-attach-download-dnd
(copy-alist dnd-protocol-alist))))
(dnd-handle-one-url nil action uri))))
;;;###autoload
(defun +org-dragndrop*insert-link (_link filename)
"Produces and inserts a link to FILENAME into the document.
If FILENAME is an image, produce an attach:%s path, otherwise use file:%s (with
an file icon produced by `+org-attach--icon')."
(if (looking-back "^[ \t]+" (line-beginning-position))
(delete-region (match-beginning 0) (match-end 0))
(newline))
(cond ((image-type-from-file-name filename)
(insert
(concat (if (= org-download-image-html-width 0) ""
(format "#+attr_html: :width %dpx\n" org-download-image-html-width))
(if (= org-download-image-latex-width 0) ""
(format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))
(cond ((file-in-directory-p filename org-attach-directory)
(format "[[attach:%s]]" (file-relative-name filename org-attach-directory)))
((file-in-directory-p filename org-directory)
(format org-download-link-format (file-relative-name filename org-directory)))
((format org-download-link-format filename)))))
(org-display-inline-images))
((insert
(format "%s [[./%s][%s]] "
(+org-attach--icon filename)
(file-relative-name filename (file-name-directory buffer-file-name))
(file-name-nondirectory (directory-file-name filename)))))))

View file

@ -1,8 +1,8 @@
;;; lang/org/autoload/ipython.el -*- lexical-binding: t; -*- ;;; lang/org/autoload/contrib-ipython.el -*- lexical-binding: t; -*-
;;;###if (featurep! +ipython) ;;;###if (featurep! +ipython)
;;;###autoload ;;;###autoload
(defun +org*org-babel-ipython-initiate-session (&optional session params) (defun +org*ob-ipython-initiate-session (&optional session params)
"Create a session named SESSION according to PARAMS." "Create a session named SESSION according to PARAMS."
(if (string= session "none") (if (string= session "none")
(error (error
@ -88,7 +88,7 @@ create a repl connecting to remote session."
(format "*%s*" process-name)))))) (format "*%s*" process-name))))))
;;;###autoload ;;;###autoload
(defun +org*org-babel-execute:ipython (body params) (defun +org*babel-execute:ipython (body params)
"Execute a BODY of IPython code with PARAMS in org-babel. "Execute a BODY of IPython code with PARAMS in org-babel.
This function is called by `org-babel-execute-src-block'." This function is called by `org-babel-execute-src-block'."
(message default-directory) (message default-directory)
@ -104,7 +104,7 @@ This function is called by `org-babel-execute-src-block'."
;; * org-src-edit ;; * org-src-edit
;;;###autoload ;;;###autoload
(defun +org*org-babel-edit-prep:ipython (info) (defun +org*babel-edit-prep:ipython (info)
(let* ((params (nth 2 info)) (let* ((params (nth 2 info))
(session (cdr (assoc :session params)))) (session (cdr (assoc :session params))))
(org-babel-ipython-initiate-session session params)) (org-babel-ipython-initiate-session session params))

View file

@ -1,4 +1,4 @@
;;; lang/org/autoload/org-present.el -*- lexical-binding: t; -*- ;;; lang/org/autoload/contrib-present.el -*- lexical-binding: t; -*-
;;;###if (featurep! +present) ;;;###if (featurep! +present)
(defvar +org-present--overlays nil) (defvar +org-present--overlays nil)
@ -12,7 +12,8 @@
(add-hook 'kill-buffer-hook '+org-present--cleanup-org-tree-slides-mode)) (add-hook 'kill-buffer-hook '+org-present--cleanup-org-tree-slides-mode))
;; --- Hooks ------------------------------ ;;
;;; Hooks
;;;###autoload ;;;###autoload
(defun +org-present|add-overlays () (defun +org-present|add-overlays ()
@ -69,8 +70,8 @@
(org-remove-inline-images))))) (org-remove-inline-images)))))
;;
;; --- Helpers ---------------------------- ;;; Helpers
(defun +org-present--cleanup-org-tree-slides-mode () (defun +org-present--cleanup-org-tree-slides-mode ()
(unless (cl-loop for buf in (doom-buffers-in-mode 'org-mode) (unless (cl-loop for buf in (doom-buffers-in-mode 'org-mode)
@ -85,7 +86,8 @@
(overlay-put overlay 'invisible '+org-present))) (overlay-put overlay 'invisible '+org-present)))
;; --- Advice ----------------------------- ;;
;;; Advice
;;;###autoload ;;;###autoload
(defun +org-present*narrow-to-subtree (orig-fn &rest args) (defun +org-present*narrow-to-subtree (orig-fn &rest args)

View file

@ -98,47 +98,3 @@ the cursor."
(org-download-insert-link raw-uri new-path)))) (org-download-insert-link raw-uri new-path))))
(error (error
(user-error "Failed to attach file: %s" (error-message-string ex)))))) (user-error "Failed to attach file: %s" (error-message-string ex))))))
;;;###autoload
(defun +org-attach-download-dnd (uri action)
"TODO"
(if (eq major-mode 'org-mode)
(+org-attach/uri uri)
(let ((dnd-protocol-alist
(rassq-delete-all '+org-attach-download-dnd
(copy-alist dnd-protocol-alist))))
(dnd-handle-one-url nil action uri))))
;;
;; Advice
;;;###autoload
(defun +org-attach*insert-link (_link filename)
"Produces and inserts a link to FILENAME into the document.
If FILENAME is an image, produce an attach:%s path, otherwise use file:%s (with
an file icon produced by `+org-attach--icon')."
(if (looking-back "^[ \t]+" (line-beginning-position))
(delete-region (match-beginning 0) (match-end 0))
(newline))
(cond ((image-type-from-file-name filename)
(insert
(concat (if (= org-download-image-html-width 0) ""
(format "#+attr_html: :width %dpx\n" org-download-image-html-width))
(if (= org-download-image-latex-width 0) ""
(format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))
(cond ((file-in-directory-p filename org-attach-directory)
(format "[[attach:%s]]" (file-relative-name filename org-attach-directory)))
((file-in-directory-p filename org-directory)
(format org-download-link-format (file-relative-name filename org-directory)))
(t
(format org-download-link-format filename)))))
(org-display-inline-images))
(t
(insert
(format "%s [[./%s][%s]] "
(+org-attach--icon filename)
(file-relative-name filename (file-name-directory buffer-file-name))
(file-name-nondirectory (directory-file-name filename)))))))

View file

@ -1,4 +1,5 @@
;;; lang/org/contrib/dragndrop.el -*- lexical-binding: t; -*- ;;; lang/org/contrib/dragndrop.el -*- lexical-binding: t; -*-
;;;###if (featurep! +dragndrop)
(def-package! org-download (def-package! org-download
:commands (org-download-dnd org-download-dnd-base64) :commands (org-download-dnd org-download-dnd-base64)
@ -23,10 +24,6 @@
;; to, with an icon indicating the type of file. ;; to, with an icon indicating the type of file.
(advice-add #'org-download-insert-link :override #'+org-dragndrop*insert-link) (advice-add #'org-download-insert-link :override #'+org-dragndrop*insert-link)
(defun +org-dragndrop*download-subdir ()
(when (file-in-directory-p buffer-file-name org-directory)
(file-relative-name buffer-file-name org-directory)))
(defun +org-dragndrop*download-fullname (path) (defun +org-dragndrop*download-fullname (path)
"Write PATH relative to current file." "Write PATH relative to current file."
(let ((dir (or (if buffer-file-name (file-name-directory buffer-file-name)) (let ((dir (or (if buffer-file-name (file-name-directory buffer-file-name))

View file

@ -1,4 +1,5 @@
;;; lang/org/contrib/babel.el -*- lexical-binding: t; -*- ;;; lang/org/contrib/babel.el -*- lexical-binding: t; -*-
;;;###if (featurep! +ipython)
(def-package! ob-ipython (def-package! ob-ipython
:defer t :defer t
@ -22,9 +23,9 @@
;; advices for remote kernel and org-src-edit ;; advices for remote kernel and org-src-edit
(advice-add #'ob-ipython--create-repl :override #'+org*ob-ipython--create-repl) (advice-add #'ob-ipython--create-repl :override #'+org*ob-ipython--create-repl)
(advice-add #'org-babel-edit-prep:ipython :override #'+org*org-babel-edit-prep:ipython) (advice-add #'org-babel-edit-prep:ipython :override #'+org*babel-edit-prep:ipython)
(advice-add #'org-babel-execute:ipython :override #'+org*org-babel-execute:ipython) (advice-add #'org-babel-execute:ipython :override #'+org*babel-execute:ipython)
(advice-add #'org-babel-ipython-initiate-session :override #'+org*org-babel-ipython-initiate-session) (advice-add #'org-babel-ipython-initiate-session :override #'+org*ob-ipython-initiate-session)
;; retina resolution image hack ;; retina resolution image hack
(when IS-MAC (when IS-MAC

View file

@ -1,4 +1,5 @@
;;; lang/org/contrib/present.el -*- lexical-binding: t; -*- ;;; lang/org/contrib/present.el -*- lexical-binding: t; -*-
;;;###if (featurep! +present)
(defvar +org-present-text-scale 7 (defvar +org-present-text-scale 7
"The `text-scale-amount' for `org-tree-slide-mode'.") "The `text-scale-amount' for `org-tree-slide-mode'.")