X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-highlight.el;h=f40638e5388bf29df4d88cd015904c581959a9de;hb=01d6fbe45960cd4709fde0b8865b70383d69441e;hp=329645a45a98ed69338c2ee5740995ce19dd1783;hpb=7df46c9996ce1f3bb2155dd6669347800cdbef85;p=elisp%2Friece.git diff --git a/lisp/riece-highlight.el b/lisp/riece-highlight.el index 329645a..f40638e 100644 --- a/lisp/riece-highlight.el +++ b/lisp/riece-highlight.el @@ -19,8 +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: + +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -177,7 +181,7 @@ (defcustom riece-channel-list-mark-face-alist '((?* . riece-channel-list-current-face)) "An alist mapping marks on riece-channel-list-buffer to faces." - :type 'list + :type '(repeat (cons character symbol)) :group 'riece-highlight) (defcustom riece-channel-list-font-lock-keywords @@ -197,10 +201,8 @@ (set-face-foreground 'riece-modeline-current-face (face-foreground 'riece-channel-list-current-face))) -(defvar riece-highlight-enabled nil) - (defconst riece-highlight-description - "Highlight IRC buffers") + "Highlight IRC buffers.") (defun riece-highlight-server-match (limit) (and (re-search-forward "(from [^)]+)$" limit t) @@ -212,10 +214,10 @@ ;; In XEmacs, auto-initialization of font-lock is not affective ;; when buffer-file-name is not set. (font-lock-set-defaults) - (make-local-hook 'after-change-functions) + (riece-make-local-hook 'after-change-functions) (add-hook 'after-change-functions - 'riece-highlight-hide-prefix nil 'local) - (if riece-highlight-enabled + 'riece-highlight-hide-prefix nil t) + (if (get 'riece-highlight 'riece-addon-enabled) (font-lock-mode 1))) (defun riece-highlight-setup-channel-list () @@ -224,7 +226,7 @@ ;; In XEmacs, auto-initialization of font-lock is not affective ;; when buffer-file-name is not set. (font-lock-set-defaults) - (if riece-highlight-enabled + (if (get 'riece-highlight 'riece-addon-enabled) (font-lock-mode 1))) (defun riece-highlight-hide-prefix (start end length) @@ -234,7 +236,7 @@ (put-text-property (match-beginning 1) (match-end 1) 'invisible t)))) (defun riece-highlight-put-overlay-faces (start end) - (if riece-highlight-enabled + (if (get 'riece-highlight 'riece-addon-enabled) (riece-scan-property-region 'riece-overlay-face start end @@ -245,7 +247,7 @@ (defun riece-highlight-format-identity-for-channel-list-indicator (index identity) - (if (and riece-highlight-enabled + (if (and (get 'riece-highlight 'riece-addon-enabled) (riece-identity-equal identity riece-current-channel)) (let ((string (riece-format-identity identity)) (start 0)) @@ -260,12 +262,8 @@ (defun riece-highlight-insinuate () (put 'riece-channel-mode 'font-lock-defaults '(riece-dialogue-font-lock-keywords t)) - (add-hook 'riece-channel-mode-hook - 'riece-highlight-setup-dialogue) (put 'riece-others-mode 'font-lock-defaults '(riece-dialogue-font-lock-keywords t)) - (add-hook 'riece-others-mode-hook - 'riece-highlight-setup-dialogue) (put 'riece-dialogue-mode 'font-lock-defaults '(riece-dialogue-font-lock-keywords t)) (add-hook 'riece-dialogue-mode-hook @@ -279,29 +277,47 @@ (add-hook 'riece-after-insert-functions 'riece-highlight-put-overlay-faces)) +(defun riece-highlight-uninstall () + (let ((buffers riece-buffer-list)) + (save-excursion + (while buffers + (set-buffer (car buffers)) + (if (riece-derived-mode-p 'riece-dialogue-mode) + (remove-hook 'after-change-functions + 'riece-highlight-hide-prefix t)) + (setq buffers (cdr buffers))))) + (riece-remprop 'riece-channel-mode 'font-lock-defaults) + (riece-remprop 'riece-others-mode 'font-lock-defaults) + (riece-remprop 'riece-dialogue-mode 'font-lock-defaults) + (remove-hook 'riece-dialogue-mode-hook + 'riece-highlight-setup-dialogue) + (riece-remprop 'riece-channel-list-mode 'font-lock-defaults) + (remove-hook 'riece-channel-list-mode-hook + 'riece-highlight-setup-channel-list) + (remove-hook 'riece-format-identity-for-channel-list-indicator-functions + 'riece-highlight-format-identity-for-channel-list-indicator) + (remove-hook 'riece-after-insert-functions + 'riece-highlight-put-overlay-faces)) + (defun riece-highlight-enable () (let ((buffers riece-buffer-list)) (while buffers - (if (memq (derived-mode-class - (with-current-buffer (car buffers) - major-mode)) - '(riece-dialogue-mode riece-channel-list-mode)) + (if (with-current-buffer (car buffers) + (riece-derived-mode-p 'riece-dialogue-mode + 'riece-channel-list-mode)) (with-current-buffer (car buffers) (font-lock-mode 1))) - (setq buffers (cdr buffers)))) - (setq riece-highlight-enabled t)) + (setq buffers (cdr buffers))))) (defun riece-highlight-disable () (let ((buffers riece-buffer-list)) (while buffers - (if (memq (derived-mode-class - (with-current-buffer (car buffers) - major-mode)) - '(riece-dialogue-mode riece-channel-list-mode)) + (if (with-current-buffer (car buffers) + (riece-derived-mode-p 'riece-dialogue-mode + 'riece-channel-list-mode)) (with-current-buffer (car buffers) (font-lock-mode 0))) - (setq buffers (cdr buffers)))) - (setq riece-highlight-enabled nil)) + (setq buffers (cdr buffers))))) (provide 'riece-highlight)