emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] [misc-new-features 4/5] Allow org-insert-link to check the X c


From: James TD Smith
Subject: [Orgmode] [misc-new-features 4/5] Allow org-insert-link to check the X clipboard and the Emacs kill-ring for links, as well as the stored links. This makes getting URLs into org from a browser much easier, as you don't have to paste the URL into the minibuffer to insert a link.
Date: Mon, 13 Jul 2009 09:28:01 +0100

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  <address@hidden>
 
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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]