summaryrefslogtreecommitdiff
path: root/lisp/net
diff options
context:
space:
mode:
authorDeniz Dogan <deniz@dogan.se>2012-12-05 17:45:37 +0100
committerDeniz Dogan <deniz@dogan.se>2012-12-05 17:45:37 +0100
commit5602a53a2c1b65a22fcf055e4aae6080e4134905 (patch)
tree775bfc39a77c03e74d2342a5b22f761ccc28d10f /lisp/net
parent82176fcdeb6ec2fb09224087ff852ebc16d3cfb5 (diff)
downloademacs-5602a53a2c1b65a22fcf055e4aae6080e4134905.tar.gz
emacs-5602a53a2c1b65a22fcf055e4aae6080e4134905.tar.bz2
emacs-5602a53a2c1b65a22fcf055e4aae6080e4134905.zip
* lisp/net/rcirc.el (rcirc-urls): Update documentation.
(rcirc-condition-filter): New function. (rcirc-browse-url, rcirc-markup-urls): Use only URLs before point and exclude consecutive duplicate URLs. Fixes: debbugs:6082
Diffstat (limited to 'lisp/net')
-rw-r--r--lisp/net/rcirc.el34
1 files changed, 24 insertions, 10 deletions
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index e9828c5f813..fa5bc4a9822 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -406,7 +406,8 @@ will be killed."
"The channel or user associated with this buffer.")
(defvar rcirc-urls nil
- "List of urls seen in the current buffer.")
+ "List of URLs seen in the current buffer and the position in
+the buffer where the URL starts.")
(put 'rcirc-urls 'permanent-local t)
(defvar rcirc-timeout-seconds 600
@@ -2392,12 +2393,23 @@ keywords when no KEYWORD is given."
"\\)")
"Regexp matching URLs. Set to nil to disable URL features in rcirc.")
+(defun rcirc-condition-filter (condp lst)
+ "Given a condition and a list, returns the list with elements
+that do not satisfy the condition removed."
+ (delq nil (mapcar (lambda (x) (and (funcall condp x) x)) lst)))
+
(defun rcirc-browse-url (&optional arg)
- "Prompt for URL to browse based on URLs in buffer."
+ "Prompt for URL to browse based on URLs in buffer before point.
+
+If ARG is given, opens the URL in a new browser window."
(interactive "P")
- (let ((completions (mapcar (lambda (x) (cons x nil)) rcirc-urls))
- (initial-input (car rcirc-urls))
- (history (cdr rcirc-urls)))
+ (let* ((point (point))
+ (filtered (rcirc-condition-filter
+ (lambda (x) (>= point (cdr x)))
+ rcirc-urls))
+ (completions (mapcar (lambda (x) (car x)) filtered))
+ (initial-input (caar filtered))
+ (history (mapcar (lambda (x) (car x)) (cdr filtered))))
(browse-url (completing-read "rcirc browse-url: "
completions nil nil initial-input 'history)
arg)))
@@ -2441,17 +2453,19 @@ keywords when no KEYWORD is given."
(defun rcirc-markup-urls (sender response)
(while (and rcirc-url-regexp ;; nil means disable URL catching
(re-search-forward rcirc-url-regexp nil t))
- (let ((start (match-beginning 0))
- (end (match-end 0))
- (url (match-string-no-properties 0)))
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (url (match-string-no-properties 0))
+ (link-text (buffer-substring-no-properties start end)))
(make-button start end
'face 'rcirc-url
'follow-link t
'rcirc-url url
'action (lambda (button)
(browse-url (button-get button 'rcirc-url))))
- ;; record the url
- (push url rcirc-urls))))
+ ;; record the url if it is not already the latest stored url
+ (when (not (string= link-text (caar rcirc-urls)))
+ (push (cons link-text start) rcirc-urls)))))
(defun rcirc-markup-keywords (sender response)
(when (and (string= response "PRIVMSG")