From mboxrd@z Thu Jan 1 00:00:00 1970 From: James TD Smith Subject: [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 Message-ID: <1247473682-23338-5-git-send-email-ahktenzero@mohorovi.cc> References: <1247473682-23338-1-git-send-email-ahktenzero@mohorovi.cc> <1247473682-23338-2-git-send-email-ahktenzero@mohorovi.cc> <1247473682-23338-3-git-send-email-ahktenzero@mohorovi.cc> <1247473682-23338-4-git-send-email-ahktenzero@mohorovi.cc> Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQHaV-0002o3-LB for emacs-orgmode@gnu.org; Mon, 13 Jul 2009 05:12:43 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQHaQ-0002li-EH for emacs-orgmode@gnu.org; Mon, 13 Jul 2009 05:12:42 -0400 Received: from [199.232.76.173] (port=49003 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQHaQ-0002lc-57 for emacs-orgmode@gnu.org; Mon, 13 Jul 2009 05:12:38 -0400 Received: from 81-86-40-42.dsl.pipex.com ([81.86.40.42]:62600 helo=yog-sothoth.mohorovi.cc) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MQHaP-0008Sq-CE for emacs-orgmode@gnu.org; Mon, 13 Jul 2009 05:12:37 -0400 In-Reply-To: <1247473682-23338-4-git-send-email-ahktenzero@mohorovi.cc> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org 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 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 / 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 / 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