X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-ignore.el;h=4a7af89bc1dd461bcdc50622395e2bdae8dd563e;hb=1427368d25257dfe250b57a26e157a35783a8207;hp=f8c277f9f1649fe72bd18161631e310c495d6d8f;hpb=df47dfd8cfcaa088df3a7e7485774ab483b8ea0d;p=elisp%2Friece.git diff --git a/lisp/riece-ignore.el b/lisp/riece-ignore.el index f8c277f..4a7af89 100644 --- a/lisp/riece-ignore.el +++ b/lisp/riece-ignore.el @@ -1,4 +1,4 @@ -;;; riece-ignore.el --- ignore user +;;; riece-ignore.el --- ignore messages from some users ;; Copyright (C) 1998-2004 Daiki Ueno ;; Author: Daiki Ueno @@ -19,13 +19,12 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-ignore) +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -34,15 +33,35 @@ (require 'riece-message) (defgroup riece-ignore nil - "Ignore messages in IRC buffers." + "Ignore messages from some users." + :prefix "riece-" :group 'riece) -(defcustom riece-ignore-discard-message t - "If non-nil, messages from ignored user are completely discarded. -Otherwise, they are left there but not visible." +(defcustom riece-ignore-discard-message 'log + "If t, messages from ignored user are completely discarded. +If 'log, messages are removed from IRC buffers, but they are saved in +`riece-ignore-buffer'. +Otherwise, they are not removed from IRC buffers, but are hidden with +'invisible text-property." :group 'riece-ignore - :type 'boolean) + :type '(choice (const :tag "Discard completely" t) + (const :tag "Discard but save logs" log) + (const :tag "Make messages invisible" nil))) +(defcustom riece-ignore-buffer-name "*Ignore*" + "The name of buffer where ignored messages are stored." + :group 'riece-ignore + :type 'string) + +(defcustom riece-startup-ignored-user-list nil + "List of user names whose messages are ignored." + :group 'riece-ignore + :type '(repeat string)) + +(defvar riece-ignore-buffer nil) + +(defconst riece-ignore-description + "Ignore messages from some users.") (defvar riece-ignored-user-list nil) (defun riece-ignore-user-rename-signal-function (signal handback) @@ -63,7 +82,7 @@ Otherwise, they are left there but not visible." (riece-get-users-on-server (riece-current-server-name)) (lambda (user) (not (riece-identity-member - (riece-parse-identity user) + (riece-parse-identity (car user)) riece-ignored-user-list))))) (not current-prefix-arg)))) (if toggle @@ -79,10 +98,27 @@ Otherwise, they are left there but not visible." 'user-renamed #'riece-ignore-user-rename-signal-function)))) +(eval-when-compile + (autoload 'riece-dialogue-mode "riece")) (defun riece-ignore-message-filter (message) - (if (riece-identity-member (riece-message-speaker message) - riece-ignored-user-list) - (unless riece-ignore-discard-message + (if (and (get 'riece-ignore 'riece-addon-enabled) + (riece-identity-member (riece-message-speaker message) + riece-ignored-user-list)) + (if riece-ignore-discard-message + (when (eq riece-ignore-discard-message 'log) + (unless riece-ignore-buffer + (with-current-buffer (setq riece-ignore-buffer + (riece-get-buffer-create + riece-ignore-buffer-name + 'riece-dialogue-mode)) + (riece-dialogue-mode))) + (save-excursion + (set-buffer riece-ignore-buffer) + (goto-char (point-max)) + (let ((inhibit-read-only t) + buffer-read-only) + (insert (concat (format-time-string "%H:%M") " " + (riece-format-message message t)))))) (put-text-property 0 (length (riece-message-text message)) 'invisible 'riece-ignore (riece-message-text message)) @@ -91,10 +127,22 @@ Otherwise, they are left there but not visible." (defvar riece-command-mode-map) (defun riece-ignore-insinuate () - (add-hook 'riece-message-filter-functions 'riece-ignore-message-filter) + (setq riece-ignored-user-list + (mapcar #'riece-parse-identity riece-startup-ignored-user-list)) + (add-hook 'riece-message-filter-functions 'riece-ignore-message-filter)) + +(defun riece-ignore-uninstall () + (setq riece-ignored-user-list nil) + (remove-hook 'riece-message-filter-functions 'riece-ignore-message-filter)) + +(defun riece-ignore-enable () (define-key riece-command-mode-map "\C-ck" 'riece-ignore-user)) +(defun riece-ignore-disable () + (define-key riece-command-mode-map + "\C-ck" nil)) + (provide 'riece-ignore) ;;; riece-ignore.el ends here \ No newline at end of file