X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-guess.el;h=a4df6128fd8a234a007308c336bde8d172ba39b2;hb=dde303afb4f1fbc63ae3bc01ee17aebb7bab79df;hp=5c01215f2ae097e51bee110e47dd796af5cfd010;hpb=3ace33170c3b9e25696842e84dc61a910e21f50f;p=elisp%2Friece.git diff --git a/lisp/riece-guess.el b/lisp/riece-guess.el index 5c01215..a4df612 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,22 @@ :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-guess-enabled nil) + +(defconst riece-guess-description + "Guess the next channel, using multiple methods") + (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 +55,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 +77,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")) @@ -80,13 +91,26 @@ (defvar riece-channel-list-mode-map) (defun riece-guess-insinuate () + ) + +(defun riece-guess-enable () (define-key riece-command-mode-map "\C-cg" 'riece-command-guess-switch-to-channel) (define-key riece-dialogue-mode-map "g" 'riece-command-guess-switch-to-channel) (define-key riece-channel-list-mode-map - "g" 'riece-command-guess-switch-to-channel)) - + "g" 'riece-command-guess-switch-to-channel) + (setq riece-guess-enabled t)) + +(defun riece-guess-disable () + (define-key riece-command-mode-map + "\C-cg" nil) + (define-key riece-dialogue-mode-map + "g" nil) + (define-key riece-channel-list-mode-map + "g" nil) + (setq riece-guess-enabled nil)) + (provide 'riece-guess) ;;; riece-guess.el ends here