X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-guess.el;h=a4df6128fd8a234a007308c336bde8d172ba39b2;hp=3112ce9388b3df95d425cc2e6eac7f4f15a98bb7;hb=9c77540d193a4f636488a360f67b84caf416ea03;hpb=1a81aa31cd21424720b8a59283ab1d01ae181f73 diff --git a/lisp/riece-guess.el b/lisp/riece-guess.el index 3112ce9..a4df612 100644 --- a/lisp/riece-guess.el +++ b/lisp/riece-guess.el @@ -32,18 +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 () - "Call \\[riece-guess-channel-try-functions] in turn and merge the results." + "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 @@ -51,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) @@ -63,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")) @@ -76,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