X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-button.el;h=cbb16d6199aca4150db6513c7cb474a67436da1d;hb=d879dde79debe966faabb49315faedb1bbf016a8;hp=1975024c2cfdd7fe2ec89310fa90496b97d39a38;hpb=b49c9607db850d16fcd86baf1b3070cf40092f21;p=riece diff --git a/lisp/riece-button.el b/lisp/riece-button.el index 1975024..cbb16d6 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 @@ -24,8 +24,7 @@ ;;; 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: @@ -45,14 +44,14 @@ '("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 @@ -83,6 +82,28 @@ This function is used as a callback for a channel 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") @@ -179,6 +200,7 @@ This function is used as a callback for a channel button." (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)) @@ -204,28 +226,52 @@ 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 () (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))