Mercurial > emacs
view lisp/erc/erc-ezbounce.el @ 85511:f873840f9fea
* emulation/edt-mapper.el (function-key-map):
(edt-map-key): Make it a function instead of using fset. Inline
edt-gnu-map-key and edt-lucid-map-key. Use featurep 'xemacs.
(edt-gnu-map-key, edt-lucid-map-key): Remove.
(edt-x-emacs-p): Remove.
(edt-emacs-variant, edt-window-system, edt-xserver):
Use featurep 'xemacs.
* net/eudc.el: Use (featurep 'xemacs) instead of the string test.
Replace eudc-xemacs-p with its definition.
(eudc-xemacs-p, eudc-emacs-p, eudc-xemacs-mule-p)
(eudc-emacs-mule-p): Remove.
(eudc-install-menu, eudc-mode): Replace eudc-emacs-p and
eudc-xemacs-p with feature tests.
* net/eudc-bob.el (eudc-bob-generic-menu, eudc-bob-mail-keymap)
(eudc-bob-url-keymap, eudc-bob-sound-keymap)
(eudc-bob-generic-keymap, eudc-bob-popup-menu)
(eudc-bob-toggle-inline-display):
* net/eudc-hotlist.el (eudc-hotlist-emacs-menu): Replace
eudc-emacs-p and eudc-xemacs-p with feature tests.
* net/eudcb-ph.el (eudc-ph-open-session): Replace
eudc-xemacs-mule-p with its former definition.
* progmodes/octave-mod.el (octave-xemacs-p): Remove.
(octave-abbrev-start): Replace octave-xemacs-p with
(featurep 'xemacs).
* progmodes/vera-mode.el (vera-xemacs): Remove.
(vera-mode-syntax-table): Replace vera-xemacs with
(featurep 'xemacs).
* progmodes/vhdl-mode.el (vhdl-xemacs): Remove.
(vhdl-doc-mode, vhdl-doc-variable, vhdl-compile-init)
(vhdl-speedbar-initialize, vhdl-ps-print-init)
(vhdl-forward-comment, vhdl-mode-map-init, vhdl-show-messages)
(vhdl-emacs-22, vhdl-emacs-21): Replace vhdl-xemacs
with (featurep 'xemacs).
* progmodes/antlr-mode.el (cond-emacs-xemacs-macfn, defunx)
(save-buffer-state-x):
* obsolete/fast-lock.el (fast-lock-verbose):
* emulation/viper-init.el (viper-xemacs-p)
(viper-cond-compile-for-xemacs-or-emacs):
* emacs-lisp/checkdoc.el (checkdoc-minor-mode-map):
* ps-print.el (case-fold-search):
* ediff-hook.el (ediff-cond-compile-for-xemacs-or-emacs):
* calculator.el (calculator-help): Use featurep 'xemacs.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Sun, 21 Oct 2007 17:22:04 +0000 |
parents | 85d67fae9a94 |
children | 5f92874bde07 |
line wrap: on
line source
;;; erc-ezbounce.el --- Handle EZBounce bouncer commands ;; Copyright (C) 2002, 2004, 2006, 2007 Free Software Foundation, Inc. ;; Author: Andreas Fuchs <asf@void.at> ;; Keywords: comm ;; This file is part of GNU Emacs. ;; 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. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; 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. ;;; Commentary: ;;; Code: (require 'erc) (eval-when-compile (require 'cl)) (defgroup erc-ezbounce nil "Interface to the EZBounce IRC bouncer (a virtual IRC server)" :group 'erc) (defcustom erc-ezb-regexp "^ezbounce!srv$" "Regexp used by the EZBouncer to identify itself to the user." :group 'erc-ezbounce :type 'string) (defcustom erc-ezb-login-alist '() "Alist of logins suitable for the server we're connecting to. The alist's format is as follows: (((server . port) . (username . password)) ((server . port) . (username . password)) ...)" :group 'erc-ezbounce :type '(repeat (cons (cons :tag "Server" string string) (cons :tag "Login" string string)))) (defvar erc-ezb-action-alist '(("^\\[awaiting login/pass command\\]$" . erc-ezb-identify) ("^\\[use /quote CONN <server> to connect\\]$" . erc-ezb-select) ("^ID +IRC NICK +TO +TIME$" . erc-ezb-init-session-list) ("^$" . erc-ezb-end-of-session-list) (".*" . erc-ezb-add-session)) "Alist of actions to take on NOTICEs from EZBounce.") (defvar erc-ezb-session-list '() "List of detached EZBounce sessions.") (make-variable-buffer-local 'erc-ezb-session-list) (defvar erc-ezb-inside-session-listing nil "Indicate whether current notices are expected to be EZB session listings.") ;;;###autoload (defun erc-cmd-ezb (line &optional force) "Send EZB commands to the EZBouncer verbatim." (erc-server-send (concat "EZB " line))) (put 'erc-cmd-EZB 'do-not-parse-args t) ;;;###autoload (defun erc-ezb-get-login (server port) "Return an appropriate EZBounce login for SERVER and PORT. Look up entries in `erc-ezb-login-alist'. If the username or password in the alist is `nil', prompt for the appropriate values." (let ((login (cdr (assoc (cons server port) erc-ezb-login-alist)))) (when login (let ((username (car login)) (password (cdr login))) (when (null username) (setq username (read-from-minibuffer (format "EZBounce user name for %s:%s: " server port)))) (when (null password) (setq password (read-passwd (format "EZBounce password for %s:%s: " server port)))) (cons username password))))) ;;;###autoload (defun erc-ezb-lookup-action (message) (let ((function-alist erc-ezb-action-alist) found) (while (and (not found) function-alist) (let ((regexp (caar function-alist)) (function (cdar function-alist))) (when (string-match regexp message) (setq found function)) (setq function-alist (cdr function-alist)))) found)) ;;;###autoload (defun erc-ezb-notice-autodetect (proc parsed) "React on an EZBounce NOTICE request." (let* ((sender (erc-response.sender parsed)) (message (erc-response.contents parsed)) (function (erc-ezb-lookup-action message))) (when (and (string-match erc-ezb-regexp sender) function) (funcall function message))) nil) ;;;###autoload (defun erc-ezb-identify (message) "Identify to the EZBouncer server." (let ((login (erc-ezb-get-login erc-session-server (erc-port-to-string erc-session-port)))) (unless (null login) (let ((username (car login)) (pass (cdr login))) (erc-server-send (concat "LOGIN " username " " pass)))))) ;;;###autoload (defun erc-ezb-init-session-list (message) "Reset the EZBounce session list to nil." (setq erc-ezb-session-list nil) (setq erc-ezb-inside-session-listing t)) ;;;###autoload (defun erc-ezb-end-of-session-list (message) "Indicate the end of the EZBounce session listing." (setq erc-ezb-inside-session-listing nil)) ;;;###autoload (defun erc-ezb-add-session (message) "Add an EZBounce session to the session list." (when (and erc-ezb-inside-session-listing (string-match "^\\([^ \n]+\\) +\\([^ \n]+\\) +\\([^ \n]+\\) +\\([^ \n]+\\)$" message)) (let ((id (match-string 1 message)) (nick (match-string 2 message)) (to (match-string 3 message))) (add-to-list 'erc-ezb-session-list (list id nick to))))) ;;;###autoload (defun erc-ezb-select (message) "Select an IRC server to use by EZBounce, in ERC style." (unless (and erc-ezb-session-list (erc-ezb-select-session)) (let* ((server (read-from-minibuffer "IRC server: " "" nil nil 'erc-server-history-list)) (port (erc-string-to-port (read-from-minibuffer "IRC port: " (erc-port-to-string "6667"))))) (erc-server-send (format "CONN %s %s" server port))))) ;;;###autoload (defun erc-ezb-select-session () "Select a detached EZBounce session." (let ((session (completing-read "Existing Session (RET to enter a new one): " erc-ezb-session-list))) (if (string= session "") nil (erc-server-send (format "REATTACH %s" session))))) ;;;###autoload (defun erc-ezb-initialize () "Add EZBouncer convenience functions to ERC." (add-hook 'erc-server-NOTICE-functions 'erc-ezb-notice-autodetect)) (provide 'erc-ezbounce) ;; arch-tag: e972aa7b-a9f4-4d16-a489-074ec7a1002e ;;; erc-ezbounce.el ends here