X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-ignore.el;h=99ad31066be02c47a53db7bfe48c271e3a19d4b2;hb=a0b576c2225bad55b58b7646314c0194172a4742;hp=f8c277f9f1649fe72bd18161631e310c495d6d8f;hpb=f87287068fefe6dc73981cceddf8749e8fc1d232;p=riece diff --git a/lisp/riece-ignore.el b/lisp/riece-ignore.el index f8c277f..99ad310 100644 --- a/lisp/riece-ignore.el +++ b/lisp/riece-ignore.el @@ -37,12 +37,33 @@ "Ignore messages in IRC buffers." :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) + +(defvar riece-ignore-enabled nil) + +(defconst riece-ignore-description + "Ignore users") (defvar riece-ignored-user-list nil) (defun riece-ignore-user-rename-signal-function (signal handback) @@ -63,7 +84,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 +100,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 riece-ignore-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,9 +129,19 @@ 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-enable () + (define-key riece-command-mode-map + "\C-ck" 'riece-ignore-user) + (setq riece-ignore-enabled t)) + +(defun riece-ignore-disable () (define-key riece-command-mode-map - "\C-ck" 'riece-ignore-user)) + "\C-ck" nil) + (setq riece-ignore-enabled nil)) (provide 'riece-ignore)