emacs-orgmode
[Top][All Lists]
Advanced

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

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


From: Bastien
Subject: Re: [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: Tue, 14 Jul 2009 14:07:57 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

I think it's a good idea, I will test this a bit further before applying
the patch.  Thanks!

James TD Smith <address@hidden> 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  <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" "\\|"

-- 
 Bastien




reply via email to

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