X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-guess.el;h=2a5371db5dce419d5bb02d468aa53531cf650692;hb=9fb4441a7b9a6f36df16242d4bb06c7a037a4092;hp=5c01215f2ae097e51bee110e47dd796af5cfd010;hpb=c9e176be5079fdd2c81e0d3a2c4ee0d2d8cf5e17;p=riece diff --git a/lisp/riece-guess.el b/lisp/riece-guess.el index 5c01215..2a5371d 100644 --- a/lisp/riece-guess.el +++ b/lisp/riece-guess.el @@ -21,11 +21,6 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;;; Commentary: - -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-guess) - ;;; Code: (require 'riece-identity) @@ -37,17 +32,17 @@ :prefix "riece-" :group 'riece) -(defcustom riece-guess-channel-try-functions - '(riece-default-guess-channel) +(defcustom riece-guess-channel-try-functions nil "Functions which returns a list of channels the user wants to switch." :type '(repeat function) :group 'riece-guess) (defvar riece-current-channels) -(defun riece-default-guess-channel () - (delq nil (copy-sequence riece-current-channels))) (defun riece-guess-candidates () + "Build candidate list. +This function calls \\[riece-guess-channel-try-functions] in turn and +merge the results." (let ((functions riece-guess-channel-try-functions) candidates) (while functions @@ -55,11 +50,21 @@ (nconc candidates (delq nil (mapcar (lambda (channel) - (if (riece-identity-member channel candidates) - nil + (unless (riece-identity-member + channel candidates) channel)) (funcall (car functions))))) functions (cdr functions))) + ;; Merge the default. + (setq candidates + (nconc candidates + (delq nil (mapcar + (lambda (channel) + (if (and channel + (not (riece-identity-member + channel candidates))) + channel)) + riece-current-channels)))) candidates)) (defvar riece-guess-candidates nil) @@ -67,7 +72,8 @@ (defun riece-command-guess-switch-to-channel () "Try to switch to the channel where the user is interested in." (interactive) - (unless (eq last-command this-command) + (unless (and (eq last-command this-command) + riece-guess-candidates) (setq riece-guess-candidates (riece-guess-candidates))) (unless riece-guess-candidates (error "No channel"))