-;;; 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 <ueno@unixuser.org>
;;; 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:
'("User"
["Finger (WHOIS)" riece-user-button-finger]
["Start Private Conversation" riece-user-button-join-partner]
- ["Give Channel Operator Privileges" riece-user-button-set-operators]
- ["Allow To Speak" riece-user-button-set-speakers])
+ ["Set +o" riece-user-button-set-operators]
+ ["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
(message "%s" (substitute-command-keys
"Type \\[riece-command-join] to join the channel")))))
+(defun riece-identity-button-click (event)
+ "Call widget-button-click and select the last selected window."
+ (interactive "e") ;widget-button-click has
+ ;interactive spec "@e"
+ (let ((buffer (current-buffer))
+ (point (point))
+ window)
+ (unwind-protect
+ (save-excursion
+ (set-buffer (riece-event-buffer event))
+ (goto-char (riece-event-point event))
+ (widget-button-click event))
+ ;; riece-button-switch-to-identity changes window-configuration
+ ;; so we must select the last selected window by _buffer_.
+ (if (setq window (get-buffer-window buffer))
+ (progn
+ (select-window window)
+ (set-window-point window point))
+ (if riece-debug
+ (riece-debug (format "buffer %s not visible"
+ (buffer-name buffer))))))))
+
(defun riece-identity-button-popup-menu (event)
"Popup the menu for identity buttons."
(interactive "e")
(defun riece-make-identity-button-map ()
(let ((map (make-sparse-keymap)))
(set-keymap-parent map (current-local-map))
+ (define-key map [down-mouse-2] 'riece-identity-button-click)
(define-key map [down-mouse-3] 'riece-identity-button-popup-menu)
map))
(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 ()
(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)
+ (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))