From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bastien Subject: Re: [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: Fri, 17 Jul 2009 19:20:36 +0200 Message-ID: <87fxcv4463.fsf@bzg.ath.cx> 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> <1247473682-23338-5-git-send-email-ahktenzero@mohorovi.cc> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MRr73-0002wH-Sw for emacs-orgmode@gnu.org; Fri, 17 Jul 2009 13:20:49 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MRr6y-0002sq-Ep for emacs-orgmode@gnu.org; Fri, 17 Jul 2009 13:20:48 -0400 Received: from [199.232.76.173] (port=39285 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MRr6y-0002si-8d for emacs-orgmode@gnu.org; Fri, 17 Jul 2009 13:20:44 -0400 Received: from mail-px0-f193.google.com ([209.85.216.193]:52231) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MRr6x-0007nf-Qw for emacs-orgmode@gnu.org; Fri, 17 Jul 2009 13:20:44 -0400 Received: by pxi31 with SMTP id 31so650627pxi.14 for ; Fri, 17 Jul 2009 10:20:43 -0700 (PDT) In-Reply-To: <1247473682-23338-5-git-send-email-ahktenzero@mohorovi.cc> (James TD Smith's message of "Mon, 13 Jul 2009 09:28:01 +0100") 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: James TD Smith Cc: emacs-orgmode@gnu.org Hi James, I'm still hesitating for this patch. Something I like when I insert a link is that I get rid of it, it doesn't stay in org-stored-links (unless explicitely told so). If org-insert-links accepts links from the kill-ring and/or from the clipboard, then some links will stay. More generally, the source of links becomes a bit "unstable". I understand the purpose and I see how it could be useful but I would need other advice on this. Thanks! James TD Smith writes: > 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" "\\|" -- Bastien