You can customise `org-link-check-clipboards' to check either the X clipboards
or kill-ring only, or both, or none. If you have the interprogram-cut/paste
functions set, you probably only want to use the kill-ring only.
---
lisp/ChangeLog | 5 ++++
lisp/org.el | 66 ++++++++++++++++++++++++++++++++++++++++---------------
2 files changed, 53 insertions(+), 18 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9ce7a17..662a585 100755
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -14,6 +14,11 @@
(org-tags-sort-function): Add custom declaration for tags
sorting function.
(org-set-tags): Sort tags if org-tags-sort-function is set
+ (org-link-check-clipboards): Add a custom option for
+ clipboard link checking
+ (org-insert-link): If enabled, check the X clipboard and emacs
+ kill ring for strings which look like links, and include them in
+ the stored links to select from.
2009-07-08 Carsten Dominik <[email protected]>
diff --git a/lisp/org.el b/lisp/org.el
index 854d09c..47fb0b6 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -1024,6 +1024,15 @@ to use."
:group 'org-link
:type 'function)
+(defcustom org-link-check-clipboards nil
+ "Should org-insert-link check clipboards for links"
+ :group 'org-link
+ :type '(choice
+ (const :tag "Just stored links" nil)
+ (const :tag "The X11 clipboards" x)
+ (const :tag "The Emacs kill-ring" emacs)
+ (const :tag "Both" both)))
+
(defgroup org-link-store nil
"Options concerning storing links in Org-mode."
:tag "Org Store Link"
@@ -7323,6 +7332,7 @@ used as the link location instead of reading one
interactively."
(desc region)
tmphist ; byte-compile incorrectly complains about this
(link link-location)
+ (stored-links org-stored-links)
entry file all-prefixes)
(cond
(link-location) ; specified by arg, just use it.
@@ -7342,26 +7352,46 @@ used as the link location instead of reading one
interactively."
((member complete-file '((4) (16)))
;; Completing read for file names.
(setq link (org-file-complete-link complete-file)))
- (t
- ;; Read link, with completion for stored links.
- (with-output-to-temp-buffer "*Org Links*"
- (princ "Insert a link.
+ (t ;; Read link, with completion for stored links.
+ ;;Check clipboards/kill ring for links
+ (when org-link-check-clipboards
+ (setq stored-links
+ (append stored-links
+ (mapcar
+ (lambda (x) (list x "Link from clipboard"))
+ (remove
+ nil
+ (remove-duplicates
+ (mapcar
+ (lambda (x)
+ (when (and x (string-match org-link-types-re x)) x))
+ (append (when
+ (or (eq org-link-check-clipboards 'x)
+ (eq org-link-check-clipboards 'both))
+ (list (org-get-x-clipboard 'PRIMARY)
+ (org-get-x-clipboard 'CLIPBOARD)
+ (org-get-x-clipboard 'SECONDARY)))
+ (when
+ (or (eq org-link-check-clipboards 'emacs)
+ (eq org-link-check-clipboards 'both))
+ (mapcar 'org-no-properties
kill-ring))))))))))
+ (with-output-to-temp-buffer "*Org Links*"
+ (princ "Insert a link.
Use TAB to complete link prefixes, then RET for type-specific completion
support\n")
- (when org-stored-links
- (princ "\nStored links are available with <up>/<down> or M-p/n (most
recent with RET):\n\n")
- (princ (mapconcat
- (lambda (x)
- (if (nth 1 x) (concat (car x) " (" (nth 1 x) ")") (car x)))
- (reverse org-stored-links) "\n"))))
- (let ((cw (selected-window)))
- (select-window (get-buffer-window "*Org Links*"))
+ (when stored-links
+ (princ "\nStored links are available with <up>/<down> or M-p/n
(most recent with RET):\n\n")
+ (princ (mapconcat
+ (lambda (x)
+ (if (nth 1 x) (concat (car x) " (" (nth 1 x) ")") (car
x)))
+ (reverse stored-links) "\n"))))
+ (let ((cw (selected-window)))
+ (select-window (get-buffer-window "*Org Links*"))
(setq truncate-lines t)
(unless (pos-visible-in-window-p (point-max))
(org-fit-window-to-buffer))
(and (window-live-p cw) (select-window cw)))
;; Fake a link history, containing the stored links.
- (setq tmphist (append (mapcar 'car org-stored-links)
- org-insert-link-history))
+ (setq tmphist (append (mapcar 'car stored-links)
org-insert-link-history))
(setq all-prefixes (append (mapcar 'car org-link-abbrev-alist-local)
(mapcar 'car org-link-abbrev-alist)
org-link-types))
@@ -7375,7 +7405,7 @@ Use TAB to complete link prefixes, then RET for
type-specific completion support
all-prefixes)
nil nil nil
'tmphist
- (or (car (car org-stored-links))))))
+ (or (car (car stored-links))))))
(if (or (member link all-prefixes)
(and (equal ":" (substring link -1))
(member (substring link 0 -1) all-prefixes)
@@ -8729,8 +8759,8 @@ This function can be used in a hook."
;;;; Completion
(defconst org-additional-option-like-keywords
- '("BEGIN_HTML" "END_HTML" "HTML:" "ATTR_HTML"
- "BEGIN_DocBook" "END_DocBook" "DocBook:" "ATTR_DocBook"
+ '("BEGIN_HTML" "END_HTML" "HTML:" "ATTR_HTML"
+ "BEGIN_DocBook" "END_DocBook" "DocBook:" "ATTR_DocBook"
"BEGIN_LaTeX" "END_LaTeX" "LaTeX:" "LATEX_HEADER:" "ATTR_LaTeX"
"BEGIN:" "END:"
"ORGTBL" "TBLFM:" "TBLNAME:"
@@ -15842,7 +15872,7 @@ which make use of the date at the cursor."
(org-set-local 'comment-start-skip "^#+[ \t]*")
(org-set-local 'paragraph-separate "\f\\|\\*+ \\|[ ]*$\\|[ \t]*[:|]")
;; The paragraph starter includes hand-formatted lists.
- (org-set-local
+ (org-set-local
'paragraph-start
(concat
"\f" "\\|"
--
1.6.3.3
_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
[email protected]
http://lists.gnu.org/mailman/listinfo/emacs-orgmode