|
@@ -164,7 +164,6 @@ for `org-protocol-the-protocol' and sub-procols defined in
|
|
|
"Default protocols to use.
|
|
|
See `org-protocol-protocol-alist' for a description of this variable.")
|
|
|
|
|
|
-
|
|
|
(defconst org-protocol-the-protocol "org-protocol"
|
|
|
"This is the protocol to detect if org-protocol.el is loaded.
|
|
|
`org-protocol-protocol-alist-default' and `org-protocol-protocol-alist' hold
|
|
@@ -172,11 +171,10 @@ the sub-protocols that trigger the required action. You will have to define
|
|
|
just one protocol handler OS-wide (MS-Windows) or per application (Linux).
|
|
|
That protocol handler should call emacsclient.")
|
|
|
|
|
|
-
|
|
|
;;; User variables:
|
|
|
|
|
|
(defcustom org-protocol-reverse-list-of-files t
|
|
|
- "* Non-nil means re-reverse the list of filenames passed on the command line.
|
|
|
+ "Non-nil means re-reverse the list of filenames passed on the command line.
|
|
|
The filenames passed on the command line are passed to the emacs-server in
|
|
|
reverse order. Set to t (default) to re-reverse the list, i.e. use the
|
|
|
sequence on the command line. If nil, the sequence of the filenames is
|
|
@@ -184,9 +182,8 @@ unchanged."
|
|
|
:group 'org-protocol
|
|
|
:type 'boolean)
|
|
|
|
|
|
-
|
|
|
(defcustom org-protocol-project-alist nil
|
|
|
- "* Map URLs to local filenames for `org-protocol-open-source' (open-source).
|
|
|
+ "Map URLs to local filenames for `org-protocol-open-source' (open-source).
|
|
|
|
|
|
Each element of this list must be of the form:
|
|
|
|
|
@@ -229,7 +226,6 @@ Consider using the interactive functions `org-protocol-create' and
|
|
|
:group 'org-protocol
|
|
|
:type 'alist)
|
|
|
|
|
|
-
|
|
|
(defcustom org-protocol-protocol-alist nil
|
|
|
"* Register custom handlers for org-protocol.
|
|
|
|
|
@@ -287,14 +283,13 @@ Slashes are sanitized to double slashes here."
|
|
|
(setq uri (concat (car splitparts) "//" (mapconcat 'identity (cdr splitparts) "/")))))
|
|
|
uri)
|
|
|
|
|
|
-
|
|
|
-(defun org-protocol-split-data(data &optional unhexify separator)
|
|
|
- "Split, what an org-protocol handler function gets as only argument.
|
|
|
-DATA is that one argument. DATA is split at each occurrence of
|
|
|
-SEPARATOR (regexp). If no SEPARATOR is specified or SEPARATOR is
|
|
|
+(defun org-protocol-split-data (data &optional unhexify separator)
|
|
|
+ "Split what an org-protocol handler function gets as only argument.
|
|
|
+DATA is that one argument. DATA is split at each occurrence of
|
|
|
+SEPARATOR (regexp). If no SEPARATOR is specified or SEPARATOR is
|
|
|
nil, assume \"/+\". The results of that splitting are returned
|
|
|
-as a list. If UNHEXIFY is non-nil, hex-decode each split part. If
|
|
|
-UNHEXIFY is a function, use that function to decode each split
|
|
|
+as a list. If UNHEXIFY is non-nil, hex-decode each split part.
|
|
|
+If UNHEXIFY is a function, use that function to decode each split
|
|
|
part."
|
|
|
(let* ((sep (or separator "/+"))
|
|
|
(split-parts (split-string data sep)))
|
|
@@ -348,7 +343,6 @@ returned list."
|
|
|
ret)
|
|
|
l)))
|
|
|
|
|
|
-
|
|
|
(defun org-protocol-flatten (l)
|
|
|
"Greedy handlers might receive a list like this from emacsclient:
|
|
|
'( (\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\")
|
|
@@ -359,6 +353,7 @@ This function transforms it into a flat list."
|
|
|
(append (org-protocol-flatten (car l)) (org-protocol-flatten (cdr l)))
|
|
|
(list l))))
|
|
|
|
|
|
+
|
|
|
;;; Standard protocol handlers:
|
|
|
|
|
|
(defun org-protocol-store-link (fname)
|
|
@@ -390,7 +385,7 @@ The sub-protocol used to reach this function is set in
|
|
|
uri))
|
|
|
nil)
|
|
|
|
|
|
-(defun org-protocol-remember (info)
|
|
|
+(defun org-protocol-remember (info)
|
|
|
"Process an org-protocol://remember:// style url.
|
|
|
|
|
|
The location for a browser's bookmark has to look like this:
|
|
@@ -408,7 +403,7 @@ See the docs for `org-protocol-capture' for more information."
|
|
|
(message "Org-mode not loaded."))
|
|
|
nil)
|
|
|
|
|
|
-(defun org-protocol-capture (info)
|
|
|
+(defun org-protocol-capture (info)
|
|
|
"Process an org-protocol://capture:// style url.
|
|
|
|
|
|
The sub-protocol used to reach this function is set in
|
|
@@ -444,7 +439,7 @@ CAPTURE-FUNC is either the symbol `org-remember' or `org-capture'."
|
|
|
(url (org-protocol-sanitize-uri (car parts)))
|
|
|
(type (if (string-match "^\\([a-z]+\\):" url)
|
|
|
(match-string 1 url)))
|
|
|
- (title(or (cadr parts) ""))
|
|
|
+ (title (or (cadr parts) ""))
|
|
|
(region (or (caddr parts) ""))
|
|
|
(orglink (org-make-link-string
|
|
|
url (if (string-match "[^[:space:]]" title) title url)))
|
|
@@ -461,7 +456,6 @@ CAPTURE-FUNC is either the symbol `org-remember' or `org-capture'."
|
|
|
(raise-frame)
|
|
|
(funcall capture-func nil template)))
|
|
|
|
|
|
-
|
|
|
(defun org-protocol-open-source (fname)
|
|
|
"Process an org-protocol://open-source:// style url.
|
|
|
|
|
@@ -472,7 +466,6 @@ The location for a browser's bookmark should look like this:
|
|
|
|
|
|
javascript:location.href='org-protocol://open-source://'+ \\
|
|
|
encodeURIComponent(location.href)"
|
|
|
-
|
|
|
;; As we enter this function for a match on our protocol, the return value
|
|
|
;; defaults to nil.
|
|
|
(let ((result nil)
|
|
@@ -541,12 +534,14 @@ function returns nil, the filename is removed from the list of filenames
|
|
|
passed from emacsclient to the server.
|
|
|
If the function returns a non nil value, that value is passed to the server
|
|
|
as filename."
|
|
|
- (let ((sub-protocols (append org-protocol-protocol-alist org-protocol-protocol-alist-default)))
|
|
|
+ (let ((sub-protocols (append org-protocol-protocol-alist
|
|
|
+ org-protocol-protocol-alist-default)))
|
|
|
(catch 'fname
|
|
|
(let ((the-protocol (concat (regexp-quote org-protocol-the-protocol) ":/+")))
|
|
|
(when (string-match the-protocol fname)
|
|
|
(dolist (prolist sub-protocols)
|
|
|
- (let ((proto (concat the-protocol (regexp-quote (plist-get (cdr prolist) :protocol)) ":/+")))
|
|
|
+ (let ((proto (concat the-protocol
|
|
|
+ (regexp-quote (plist-get (cdr prolist) :protocol)) ":/+")))
|
|
|
(when (string-match proto fname)
|
|
|
(let* ((func (plist-get (cdr prolist) :function))
|
|
|
(greedy (plist-get (cdr prolist) :greedy))
|
|
@@ -563,7 +558,6 @@ as filename."
|
|
|
;; (message "fname: %s" fname)
|
|
|
fname)))
|
|
|
|
|
|
-
|
|
|
(defadvice server-visit-files (before org-protocol-detect-protocol-server activate)
|
|
|
"Advice server-visit-flist to call `org-protocol-modify-filename-for-protocol'."
|
|
|
(let ((flist (if org-protocol-reverse-list-of-files
|
|
@@ -572,16 +566,17 @@ as filename."
|
|
|
(client (ad-get-arg 1)))
|
|
|
(catch 'greedy
|
|
|
(dolist (var flist)
|
|
|
- (let ((fname (expand-file-name (car var)))) ;; `\' to `/' on windows. FIXME: could this be done any better?
|
|
|
- (setq fname (org-protocol-check-filename-for-protocol fname (member var flist) client))
|
|
|
+ ;; `\' to `/' on windows. FIXME: could this be done any better?
|
|
|
+ (let ((fname (expand-file-name (car var))))
|
|
|
+ (setq fname (org-protocol-check-filename-for-protocol
|
|
|
+ fname (member var flist) client))
|
|
|
(if (eq fname t) ;; greedy? We need the `t' return value.
|
|
|
(progn
|
|
|
(ad-set-arg 0 nil)
|
|
|
(throw 'greedy t))
|
|
|
(if (stringp fname) ;; probably filename
|
|
|
(setcar var fname)
|
|
|
- (ad-set-arg 0 (delq var (ad-get-arg 0))))))
|
|
|
- ))))
|
|
|
+ (ad-set-arg 0 (delq var (ad-get-arg 0))))))))))
|
|
|
|
|
|
;;; Org specific functions:
|
|
|
|
|
@@ -597,8 +592,7 @@ most of the work."
|
|
|
(message "Not in an org-project. Did mean %s?"
|
|
|
(substitute-command-keys"\\[org-protocol-create]")))))
|
|
|
|
|
|
-
|
|
|
-(defun org-protocol-create(&optional project-plist)
|
|
|
+(defun org-protocol-create (&optional project-plist)
|
|
|
"Create a new org-protocol project interactively.
|
|
|
An org-protocol project is an entry in `org-protocol-project-alist'
|
|
|
which is used by `org-protocol-open-source'.
|
|
@@ -606,15 +600,15 @@ Optionally use project-plist to initialize the defaults for this project. If
|
|
|
project-plist is the CDR of an element in `org-publish-project-alist', reuse
|
|
|
:base-directory, :html-extension and :base-extension."
|
|
|
(interactive)
|
|
|
- (let ((working-dir (expand-file-name(or (plist-get project-plist :base-directory) default-directory)))
|
|
|
+ (let ((working-dir (expand-file-name
|
|
|
+ (or (plist-get project-plist :base-directory)
|
|
|
+ default-directory)))
|
|
|
(base-url "http://orgmode.org/worg/")
|
|
|
(strip-suffix (or (plist-get project-plist :html-extension) ".html"))
|
|
|
(working-suffix (if (plist-get project-plist :base-extension)
|
|
|
(concat "." (plist-get project-plist :base-extension))
|
|
|
".org"))
|
|
|
-
|
|
|
(worglet-buffer nil)
|
|
|
-
|
|
|
(insert-default-directory t)
|
|
|
(minibuffer-allow-text-properties nil))
|
|
|
|
|
@@ -630,12 +624,12 @@ project-plist is the CDR of an element in `org-publish-project-alist', reuse
|
|
|
|
|
|
(setq strip-suffix
|
|
|
(read-string
|
|
|
- (concat "Extension to strip from published URLs ("strip-suffix"): ")
|
|
|
+ (concat "Extension to strip from published URLs (" strip-suffix "): ")
|
|
|
strip-suffix nil strip-suffix t))
|
|
|
|
|
|
(setq working-suffix
|
|
|
(read-string
|
|
|
- (concat "Extension of editable files ("working-suffix"): ")
|
|
|
+ (concat "Extension of editable files (" working-suffix "): ")
|
|
|
working-suffix nil working-suffix t))
|
|
|
|
|
|
(when (yes-or-no-p "Save the new org-protocol-project to your init file? ")
|