X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-guess.el;h=c5c32703abafe49553e4e58c058840865a617a66;hb=3ee8a4af3c8254994a95ffac8926af4e7b32f8bd;hp=5c01215f2ae097e51bee110e47dd796af5cfd010;hpb=c9e176be5079fdd2c81e0d3a2c4ee0d2d8cf5e17;p=riece diff --git a/lisp/riece-guess.el b/lisp/riece-guess.el index 5c01215..c5c3270 100644 --- a/lisp/riece-guess.el +++ b/lisp/riece-guess.el @@ -23,8 +23,7 @@ ;;; Commentary: -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-guess) +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -32,22 +31,25 @@ (require 'riece-commands) (defgroup riece-guess nil - "Guess the next channel" + "Guess the next channel." :tag "Guess" :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) +(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 +57,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 +79,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 +93,24 @@ (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)) - + +(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)) + (provide 'riece-guess) ;;; riece-guess.el ends here