guile feature
[bpt/emacs.git] / lisp / erc / erc-list.el
index 8bf0d21..6787787 100644 (file)
@@ -1,9 +1,10 @@
-;;; erc-list.el --- /list support for ERC
+;;; erc-list.el --- /list support for ERC  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
-;; Version: 0.1
+;; Maintainer: emacs-devel@gnu.org
+;; Old-Version: 0.1
 ;; Keywords: comm
 
 ;; This file is part of GNU Emacs.
 
 (require 'erc)
 
+(defgroup erc-list nil
+  "Support for the /list command."
+  :group 'erc)
+
 ;; This is implicitly the width of the channel name column.  Pick
 ;; something small enough that the topic has a chance of being
 ;; readable, but long enough that most channel names won't make for
 
 (defvar erc-list-menu-mode-map
   (let ((map (make-keymap)))
-    (suppress-keymap map)
+    (set-keymap-parent map special-mode-map)
     (define-key map "k" 'erc-list-kill)
     (define-key map "j" 'erc-list-join)
     (define-key map "g" 'erc-list-revert)
     (define-key map "n" 'next-line)
     (define-key map "p" 'previous-line)
-    (define-key map "q" 'quit-window)
     map)
   "Local keymap for `erc-list-mode' buffers.")
 
-(defvar erc-list-menu-sort-button-map nil
-  "Local keymap for ERC list menu mode sorting buttons.")
-
-(unless erc-list-menu-sort-button-map
+(defvar erc-list-menu-sort-button-map
   (let ((map (make-sparse-keymap)))
     (define-key map [header-line mouse-1] 'erc-list-menu-sort-by-column)
     (define-key map [follow-link] 'mouse-face)
-    (setq erc-list-menu-sort-button-map map)))
+    map)
+  "Local keymap for ERC list menu mode sorting buttons.")
 
 ;; Helper function that makes a buttonized column header.
 (defun erc-list-button (title column)
                  'mouse-face 'highlight
                  'keymap erc-list-menu-sort-button-map))
 
-(define-derived-mode erc-list-menu-mode nil "ERC-List"
+(define-derived-mode erc-list-menu-mode special-mode "ERC-List"
   "Major mode for editing a list of irc channels."
   (setq header-line-format
        (concat
 
 ;; Handle a "322" response.  This response tells us about a single
 ;; channel.
-(defun erc-list-handle-322 (proc parsed)
+;; Called via erc-once-with-server-event with two arguments.
+(defun erc-list-handle-322 (_proc parsed)
   (let* ((args (cdr (erc-response.command-args parsed)))
         (channel (car args))
         (nusers (car (cdr args)))
     ;; Arrange for 323 (end of list) to end this.
     (erc-once-with-server-event
      323
-     '(progn
+     (lambda (_proc _parsed)
        (remove-hook 'erc-server-322-functions 'erc-list-handle-322 t)))
     ;; Find the list buffer, empty it, and display it.
     (set (make-local-variable 'erc-list-buffer)
@@ -207,15 +210,18 @@ should usually be one or more channels, separated by commas.
 Please note that this function only works with IRC servers which conform
 to RFC and send the LIST header (#321) at start of list transmission."
   (erc-with-server-buffer
-    (set (make-local-variable 'erc-list-last-argument) line)
-    (erc-once-with-server-event
-     321
-     (list 'progn
-          (list 'erc-list-install-322-handler (current-buffer)))))
+   (set (make-local-variable 'erc-list-last-argument) line)
+   (erc-once-with-server-event
+    321
+    (let ((buf (current-buffer)))
+      (lambda (_proc _parsed)
+       (erc-list-install-322-handler buf)))))
   (erc-server-send (concat "LIST :" (or (and line (substring line 1))
                                        ""))))
 (put 'erc-cmd-LIST 'do-not-parse-args t)
 
+(provide 'erc-list)
+
 ;;; erc-list.el ends here
 ;;
 ;; Local Variables:
@@ -223,4 +229,3 @@ to RFC and send the LIST header (#321) at start of list transmission."
 ;; tab-width: 8
 ;; End:
 
-;; arch-tag: 99c5f9cb-6bac-4224-86bf-e394768cd1d0