diff --git a/modules/lang/org/+protocol.el b/modules/lang/org/+protocol.el new file mode 100644 index 000000000..9fd46fa50 --- /dev/null +++ b/modules/lang/org/+protocol.el @@ -0,0 +1,36 @@ +;;; lang/org/+protocol.el -*- lexical-binding: t; -*- + +;; Brings lazy-loaded support for org-protocol, so external programs (like +;; browsers) can invoke specialized behavior from Emacs. Normally you'd simply +;; require `org-protocol' and use it, but the package loads all of org for no +;; compelling reason, so... +(defun +org*server-visit-files (args) + "Advise `server-visit-flist' to invoke `org-protocol' lazily." + (cl-destructuring-bind (files proc &optional nowait) args + (catch 'greedy + (let ((flist (reverse files))) + (dolist (var flist) + (when (string-match-p ":/+" (car var)) + (require 'server) + (require 'org-protocol) + ;; `\' to `/' on windows + (let ((fname (org-protocol-check-filename-for-protocol + (expand-file-name (car var)) + (member var flist) + proc))) + (cond ((eq fname t) ; greedy? We need the t return value. + (setq files nil) + (throw 'greedy t)) + ((stringp fname) ; probably filename + (setcar var fname)) + ((setq files (delq var files))))))))) + (list files proc nowait))) +(advice-add #'server-visit-files :filter-args #'+org*server-visit-files) + +;; Disable built-in, clumsy advice +(after! org-protocol + (ad-disable-advice 'server-visit-files 'before 'org-protocol-detect-protocol-server)) + + +;; TODO org-board or better link grabbing support +;; TODO org-capture + org-protocol instead of bin/org-capture diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 21d508ab2..18c1063b7 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -49,11 +49,12 @@ :config ;; Sub-modules - (if (featurep! +attach) (load! "+attach")) - (if (featurep! +babel) (load! "+babel")) - (if (featurep! +capture) (load! "+capture")) - (if (featurep! +export) (load! "+export")) - (if (featurep! +present) (load! "+present"))) + (if (featurep! +attach) (load! "+attach")) + (if (featurep! +babel) (load! "+babel")) + (if (featurep! +capture) (load! "+capture")) + (if (featurep! +export) (load! "+export")) + (if (featurep! +present) (load! "+present")) + (if (featurep! +protocol) (load! "+protocol"))) ;;