X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-button.el;h=b7f51261eeedfb4d5686b098086eae7b9f88f62d;hp=c33a1ec9cd52c50247ac420e8ca9a4451fe931b3;hb=41f70b5a0e3fdc63c54bb5ce34c024b0d4d625d5;hpb=160ff5b6d44a795ee10a10ba95d6b4a14e43d18e diff --git a/lisp/riece-button.el b/lisp/riece-button.el index c33a1ec..b7f5126 100644 --- a/lisp/riece-button.el +++ b/lisp/riece-button.el @@ -1,4 +1,4 @@ -;;; riece-button.el --- adding buttons in channel buffers +;;; riece-button.el --- display useful buttons in IRC buffers ;; Copyright (C) 1998-2003 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-button) +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -49,10 +48,8 @@ ["Set +v" riece-user-button-set-speakers]) "Menu for user buttons.") -(defvar riece-button-enabled nil) - (defconst riece-button-description - "Display useful buttons in IRC buffers") + "Display useful buttons in IRC buffers.") (defvar help-echo-owns-message) (define-widget 'riece-identity-button 'push-button @@ -207,7 +204,7 @@ This function is used as a callback for a channel button." (defvar riece-identity-button-map) (defun riece-button-add-identity-button (start end) - (if riece-button-enabled + (if (get 'riece-button 'riece-addon-enabled) (riece-scan-property-region 'riece-identity start end @@ -227,30 +224,70 @@ This function is used as a callback for a channel button." (defvar riece-channel-list-mode-map) (defvar riece-user-list-mode-map) (defvar riece-dialogue-mode-map) + +(defun riece-button-channel-list-mode-hook () + (set-keymap-parent riece-channel-list-mode-map widget-keymap) + (set (make-local-variable 'riece-identity-button-map) + (riece-make-identity-button-map)) + (add-hook 'riece-update-buffer-functions + 'riece-button-update-buffer t t)) + +(defun riece-button-user-list-mode-hook () + (set-keymap-parent riece-user-list-mode-map widget-keymap) + (set (make-local-variable 'riece-identity-button-map) + (riece-make-identity-button-map)) + (add-hook 'riece-update-buffer-functions + 'riece-button-update-buffer t t)) + +(defun riece-button-dialogue-mode-hook () + (set-keymap-parent riece-dialogue-mode-map widget-keymap) + (set (make-local-variable 'riece-identity-button-map) + (riece-make-identity-button-map))) + (defun riece-button-insinuate () + (save-excursion + (when riece-channel-list-buffer + (set-buffer riece-channel-list-buffer) + (riece-button-channel-list-mode-hook)) + (when riece-user-list-buffer + (set-buffer riece-user-list-buffer) + (riece-button-user-list-mode-hook)) + (let ((buffers riece-buffer-list)) + (while buffers + (set-buffer (car buffers)) + (if (eq (derived-mode-class major-mode) + 'riece-dialogue-mode) + (riece-button-dialogue-mode-hook)) + (setq buffers (cdr buffers))))) (add-hook 'riece-channel-list-mode-hook - (lambda () - (set-keymap-parent riece-channel-list-mode-map widget-keymap) - (set (make-local-variable 'riece-identity-button-map) - (riece-make-identity-button-map)) - (add-hook 'riece-update-buffer-functions - 'riece-button-update-buffer t t))) + 'riece-button-channel-list-mode-hook) (add-hook 'riece-user-list-mode-hook - (lambda () - (set-keymap-parent riece-user-list-mode-map widget-keymap) - (set (make-local-variable 'riece-identity-button-map) - (riece-make-identity-button-map)) - (add-hook 'riece-update-buffer-functions - 'riece-button-update-buffer t t))) + 'riece-button-user-list-mode-hook) (add-hook 'riece-dialogue-mode-hook - (lambda () - (set-keymap-parent riece-dialogue-mode-map widget-keymap) - (set (make-local-variable 'riece-identity-button-map) - (riece-make-identity-button-map)))) + 'riece-button-dialogue-mode-hook) (add-hook 'riece-after-insert-functions 'riece-button-add-identity-button)) +(defun riece-button-uninstall () + (let ((buffers riece-buffer-list)) + (save-excursion + (while buffers + (set-buffer (car buffers)) + (remove-hook 'riece-update-buffer-functions + 'riece-button-update-buffer t) + (if (local-variable-p 'riece-identity-button-map + (car buffers)) + (kill-local-variable 'riece-identity-button-map)) + (setq buffers (cdr buffers))))) + (remove-hook 'riece-channel-list-mode-hook + 'riece-button-channel-list-mode-hook) + (remove-hook 'riece-user-list-mode-hook + 'riece-button-user-list-mode-hook) + (remove-hook 'riece-dialogue-mode-hook + 'riece-button-dialogue-mode-hook) + (remove-hook 'riece-after-insert-functions + 'riece-button-add-identity-button)) + (defun riece-button-enable () - (setq riece-button-enabled t) (let ((pointer riece-buffer-list)) (while pointer (with-current-buffer (car pointer) @@ -263,7 +300,6 @@ This function is used as a callback for a channel button." (riece-emit-signal 'channel-list-changed))) (defun riece-button-disable () - (setq riece-button-enabled nil) (save-excursion (let ((pointer riece-buffer-list)) (while pointer