leoliu pushed a commit to branch master in repository elpa. commit ce53c47e331d699bf2bf642157c28322e01733af Author: Leo Liu <sdl....@gmail.com> Date: Sun Oct 6 23:05:09 2013 +0800
Restore the ability to inspect char properties for URLs with new function easy-kill-on-url. --- easy-kill.el | 34 ++++++++++++++++++++++++++++++++-- 1 files changed, 32 insertions(+), 2 deletions(-) diff --git a/easy-kill.el b/easy-kill.el index 453225d..1b3f94b 100644 --- a/easy-kill.el +++ b/easy-kill.el @@ -125,7 +125,7 @@ Otherwise, it is the value of the overlay's candidate property." ?0))) (easy-kill-thing (overlay-get easy-kill-candidate 'thing) n)) -(defun easy-kill-thing (thing &optional n) +(defun easy-kill-thing (thing &optional n inhibit-handler) (interactive (list (cdr (assoc (car (last (listify-key-sequence (single-key-description last-command-event)))) @@ -135,7 +135,8 @@ Otherwise, it is the value of the overlay's candidate property." (if (and thing (let ((n (or n 1))) (cond - ((intern-soft (format "easy-kill-on-%s" thing)) + ((and (not inhibit-handler) + (intern-soft (format "easy-kill-on-%s" thing))) (funcall (intern-soft (format "easy-kill-on-%s" thing)) n)) ((eq thing (overlay-get easy-kill-candidate 'thing)) (easy-kill-enlarge n)) @@ -202,6 +203,9 @@ Otherwise, it is the value of the overlay's candidate property." (lambda () (cons (region-beginning) (region-end)))) (defun easy-kill-on-buffer-file-name (n) + "Get `buffer-file-name' or `default-directory'. +If N is zero, remove the directory part; negative, remove the +file name party; positive, full path." (let ((file (or buffer-file-name default-directory))) (when file (move-overlay easy-kill-candidate (point) (point)) @@ -217,5 +221,31 @@ Otherwise, it is the value of the overlay's candidate property." (put 'buffer-file-name 'easy-kill-enlarge 'easy-kill-on-buffer-file-name) +(defun easy-kill-on-url (&optional _n) + "Get url at point or from char properties. +Char properties `help-echo', `shr-url' and `w3m-href-anchor' are +inspected." + (if (bounds-of-thing-at-point 'url) + (easy-kill-thing 'url nil t) + (let* ((get-url (lambda (text) + (when (stringp text) + (with-temp-buffer + (insert text) + (and (bounds-of-thing-at-point 'url) + (thing-at-point 'url)))))) + (url (dolist (p '(help-echo shr-url w3m-href-anchor)) + (pcase-let* ((`(,text . ,ov) + (get-char-property-and-overlay (point) p)) + (u (or (funcall get-url text) + (funcall get-url + (and ov (overlay-get ov p)))))) + (and u (return u)))))) + (when url + (move-overlay easy-kill-candidate (point) (point)) + (overlay-put easy-kill-candidate 'thing 'url) + (overlay-put easy-kill-candidate 'candidate url) + (easy-kill-message-nolog "%s" url) + t)))) + (provide 'easy-kill) ;;; easy-kill.el ends here