(push primary urls))
(delete-dups urls)))
+;; cf. `ediff-truncate-string-left', to become `string-truncate-left'
+;; in Emacs 28
+(defun gnus--string-truncate-left (string length)
+ "Truncate STRING to LENGTH, replacing initial surplus with \"...\"."
+ (let ((strlen (length string)))
+ (if (<= strlen length)
+ string
+ (setq length (max 0 (- length 3)))
+ (concat "..." (substring string (max 0 (- strlen 1 length)))))))
+
(defun gnus-shorten-url (url max)
- "Return an excerpt from URL."
+ "Return an excerpt from URL not exceeding MAX characters."
(if (<= (length url) max)
url
- (let ((parsed (url-generic-parse-url url)))
- (concat (url-host parsed)
- "..."
- (substring (url-filename parsed)
- (- (length (url-filename parsed))
- (max (- max (length (url-host parsed))) 0)))))))
+ (let* ((parsed (url-generic-parse-url url))
+ (host (url-host parsed))
+ (rest (concat (url-filename parsed)
+ (when-let ((target (url-target parsed)))
+ (concat "#" target)))))
+ (concat host (gnus--string-truncate-left rest (- max (length host)))))))
(defun gnus-summary-browse-url (&optional external)
"Scan the current article body for links, and offer to browse them.