;; erc-button.el --- A way of buttonizing certain things in ERC buffers
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;; 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2004, 2006-2011 Free Software Foundation, Inc.
;; Author: Mario Lang <mlang@delysid.org>
;; Keywords: irc, button, url, regexp
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
((add-hook 'erc-insert-modify-hook 'erc-button-add-buttons 'append)
(add-hook 'erc-send-modify-hook 'erc-button-add-buttons 'append)
(add-hook 'erc-complete-functions 'erc-button-next)
- (add-hook 'erc-mode-hook 'erc-button-add-keys))
+ (add-hook 'erc-mode-hook 'erc-button-setup))
((remove-hook 'erc-insert-modify-hook 'erc-button-add-buttons)
(remove-hook 'erc-send-modify-hook 'erc-button-add-buttons)
(remove-hook 'erc-complete-functions 'erc-button-next)
- (remove-hook 'erc-mode-hook 'erc-button-add-keys)))
-
-;; Make XEmacs use `erc-button-face'.
-(when (featurep 'xemacs)
- (add-hook 'erc-mode-hook
- (lambda () (set (make-local-variable 'widget-button-face) nil))))
+ (remove-hook 'erc-mode-hook 'erc-button-setup)
+ (when (featurep 'xemacs)
+ (dolist (buffer (erc-buffer-list))
+ (with-current-buffer buffer
+ (kill-local-variable 'widget-button-face))))))
;;; Variables
(define-key map (kbd "<mouse-2>") 'erc-button-click-button))
(define-key map (kbd "TAB") 'erc-button-next)
(define-key map (kbd "<backtab>") 'erc-button-previous)
+ (define-key map [follow-link] 'mouse-face)
(set-keymap-parent map erc-mode-map)
map)
"Local keymap for ERC buttons.")
(modify-syntax-entry ?\\ "w" table)
table)
"Syntax table used when buttonizing messages.
-This syntax table should make all the legal nick characters word
+This syntax table should make all the valid nick characters word
constituents.")
(defvar erc-button-keys-added nil
"Internal variable used to keep track of whether we've added the
global-level ERC button keys yet.")
-(defun erc-button-add-keys ()
+(defun erc-button-setup ()
"Add ERC mode-level button movement keys. This is only done once."
+ ;; Make XEmacs use `erc-button-face'.
+ (when (featurep 'xemacs)
+ (set (make-local-variable 'widget-button-face) nil))
+ ;; Add keys.
(unless erc-button-keys-added
(define-key erc-mode-map (kbd "<backtab>") 'erc-button-previous)
(setq erc-button-keys-added t)))
(setq bounds (bounds-of-thing-at-point 'word))
(setq word (buffer-substring-no-properties
(car bounds) (cdr bounds)))
- (if (erc-get-server-user word)
- (erc-button-add-button (car bounds) (cdr bounds)
- fun t (list word)))))))
+ (when (or (and (erc-server-buffer-p) (erc-get-server-user word))
+ (and erc-channel-users (erc-get-channel-user word)))
+ (erc-button-add-button (car bounds) (cdr bounds)
+ fun t (list word)))))))
(defun erc-button-add-buttons-1 (regexp entry)
"Search through the buffer for matches to ENTRY and add buttons."
(list 'keymap erc-button-keymap)
(list 'rear-nonsticky t)
(and data (list 'erc-data data))))
- (widget-convert-button 'link from to :action 'erc-button-press-button
- :suppress-face t
- ;; Make XEmacs use our faces.
- :button-face (if nick-p
- erc-button-nickname-face
- erc-button-face)
- ;; Make XEmacs behave with mouse-clicks, for
- ;; some reason, widget stuff overrides the
- ;; 'keymap text-property.
- :mouse-down-action 'erc-button-click-button))
+ (when (featurep 'xemacs)
+ (widget-convert-button 'link from to :action 'erc-button-press-button
+ :suppress-face t
+ ;; Make XEmacs use our faces.
+ :button-face (if nick-p
+ erc-button-nickname-face
+ erc-button-face)
+ ;; Make XEmacs behave with mouse-clicks, for
+ ;; some reason, widget stuff overrides the
+ ;; 'keymap text-property.
+ :mouse-down-action 'erc-button-click-button)))
(defun erc-button-add-face (from to face)
"Add FACE to the region between FROM and TO."
;; indent-tabs-mode: nil
;; End:
-;; arch-tag: 7d23bed4-2f30-4273-a03f-d7a274c605c4