[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUS] Displaying available news-groups, sorted by name
From: |
Emanuele Santoro |
Subject: |
[GNUS] Displaying available news-groups, sorted by name |
Date: |
Fri, 12 Feb 2016 20:49:08 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
Hi all!
I recently configured Gnus on GNU Emacs 24.4.1 as newsreader. In order
to subscribe to newsgroups, I type M-d, bound to the
gnus-group-describe-all-groups.
The problem is that newsgroups shown are not sorted by name, making
quite anooying to browse.
I tried to edit the gnus-group-describe-all-groups function as follows:
(defun gnus-group-describe-all-groups (&optional force)
"Pop up a buffer with descriptions of all newsgroups."
(interactive "P")
(when force
(setq gnus-description-hashtb nil))
(when (not (or gnus-description-hashtb
(gnus-read-all-descriptions-files)))
(error "Couldn't request descriptions file"))
;; MODIFCATIONS START HERE
;; remove newsgroups with strange names that make sorting fail
(setq gnus-description-hashtb (remove-if 'numberp gnus-description-hashtb))
;; sort the gnus-description-hashtb
(setq gnus-description-hashtb
(cl-sort gnus-description-hashtb (lambda (x y)
(string< (symbol-name y)
(symbol-name x)))))
;; MODIFICATIONS END HERE
(let ((buffer-read-only nil)
b)
(erase-buffer)
(mapatoms
(lambda (group)
(setq b (point))
(let ((charset (gnus-group-name-charset nil (symbol-name group))))
(insert (format " *: %-20s %s\n"
(gnus-group-name-decode
(symbol-name group) charset)
(gnus-group-name-decode
(symbol-value group) charset))))
(gnus-add-text-properties
b (1+ b) (list 'gnus-group group
'gnus-unread t 'gnus-marked nil
'gnus-level (1+ gnus-level-subscribed))))
gnus-description-hashtb)
(goto-char (point-min))
(gnus-group-position-point)))
Basically, since gnus-description-hashtb is a vector (not an hash-table
as the name would suggest) of symbol whose name is the name of the
newsgroup, my approach is to sort such vector and then let the mapatoms
function work.
I placed this function in my *scratch* buffer and evaluated it after
loading Gnus, but reloading the newsgroup list shows no effect: the
newsgroup list is still unsorted.
Please note that I am not an expert Lisp programmer nor an expert GNU
Emacs user.
How could I solve this problem?
Thanks in advance,
--
Emanuele Santoro