Mercurial > emacs
changeset 108875:d01ede419552
* lisp/net/rcirc.el (rcirc-sort-nicknames): New custom.
(rcirc-nickname<, rcirc-sort-nicknames-join): New funs.
(rcirc-handler-366): Use them.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 03 Jun 2010 11:07:49 -0400 |
parents | 22e354ac21fd |
children | d81856a405a6 |
files | lisp/ChangeLog lisp/net/rcirc.el |
diffstat | 2 files changed, 47 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Jun 03 14:04:35 2010 +0200 +++ b/lisp/ChangeLog Thu Jun 03 11:07:49 2010 -0400 @@ -1,3 +1,9 @@ +2010-06-03 Deniz Dogan <deniz.a.m.dogan@gmail.com> + + * net/rcirc.el (rcirc-sort-nicknames): New custom. + (rcirc-nickname<, rcirc-sort-nicknames-join): New funs. + (rcirc-handler-366): Use them. + 2010-06-03 Stefan Monnier <monnier@iro.umontreal.ca> Split smie-indent-calculate into more manageable chunks.
--- a/lisp/net/rcirc.el Thu Jun 03 14:04:35 2010 +0200 +++ b/lisp/net/rcirc.el Thu Jun 03 11:07:49 2010 -0400 @@ -281,6 +281,11 @@ :type 'hook :group 'rcirc) +(defcustom rcirc-sort-nicknames nil + "If non-nil, sorts nickname listings." + :type 'boolean + :group 'rcirc) + (defcustom rcirc-always-use-server-buffer-flag nil "Non-nil means messages without a channel target will go to the server buffer." :type 'boolean @@ -1650,6 +1655,38 @@ rcirc-ignore-list (delete nick rcirc-ignore-list)))) +(defun rcirc-nickname< (s1 s2) + "Compares two IRC nicknames. Operator nicknames (@) are +considered less than voiced nicknames (+). Any other nicknames +are greater than voiced nicknames. + +Returns t if S1 is less than S2, otherwise nil. + +The comparison is case-insensitive." + (setq s1 (downcase s1) + s2 (downcase s2)) + (let* ((s1-op (eq ?@ (string-to-char s1))) + (s2-op (eq ?@ (string-to-char s2)))) + (if s1-op + (if s2-op + (string< (substring s1 1) (substring s2 1)) + t) + (if s2-op + nil + (string< s1 s2))))) + +(defun rcirc-sort-nicknames-join (input sep) + "Takes a string of nicknames and returns the string with the +nicknames sorted. + +INPUT is a string containing nicknames separated by SEP. + +This function is non-destructive, sorting a copy of the input." + (let ((parts (split-string input sep t)) + copy) + (setq copy (sort parts 'rcirc-nickname<)) + (mapconcat 'identity copy sep))) + ;;; activity tracking (defvar rcirc-track-minor-mode-map (make-sparse-keymap) "Keymap for rcirc track minor mode.") @@ -2554,7 +2591,10 @@ (buffer (rcirc-get-temp-buffer-create process channel))) (with-current-buffer buffer (rcirc-print process sender "NAMES" channel - (buffer-substring (point-min) (point-max)))) + (let ((content (buffer-substring (point-min) (point-max)))) + (if rcirc-sort-nicknames + (rcirc-sort-nicknames-join content " ") + content)))) (kill-buffer buffer))) (defun rcirc-handler-433 (process sender args text)