Use lexical binding.
[riece] / lisp / riece-display.el
index 82af80f..fb61458 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-display.el --- buffer arrangement
+;;; riece-display.el --- buffer arrangement -*- lexical-binding: t -*-
 ;; Copyright (C) 1998-2003 Daiki Ueno
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
@@ -19,8 +19,8 @@
 
 ;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
@@ -29,8 +29,7 @@
 (require 'riece-misc)
 (require 'riece-layout)
 (require 'riece-signal)
-
-(autoload 'derived-mode-class "derived")
+(require 'riece-mcat)
 
 (defvar riece-channel-buffer-format "*Channel:%s*"
   "Format of channel message buffer.")
@@ -52,16 +51,14 @@ Local to the buffer in `riece-buffer-list'.")
 (defun riece-display-connect-signals ()
   (riece-connect-signal
    'channel-list-changed
-   (lambda (signal handback)
-     (save-excursion
-       (set-buffer riece-channel-list-buffer)
+   (lambda (_signal _handback)
+     (with-current-buffer riece-channel-list-buffer
        (run-hooks 'riece-update-buffer-functions))
      (riece-update-channel-list-indicator)))
   (riece-connect-signal
    'user-list-changed
-   (lambda (signal handback)
-     (save-excursion
-       (set-buffer riece-user-list-buffer)
+   (lambda (_signal _handback)
+     (with-current-buffer riece-user-list-buffer
        (run-hooks 'riece-update-buffer-functions)))
    (lambda (signal)
      (and riece-current-channel
@@ -69,7 +66,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'channel-switched
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-status-indicators)
      (riece-update-channel-status-indicator)
      (riece-update-channel-indicator)
@@ -81,7 +78,7 @@ Local to the buffer in `riece-buffer-list'.")
        (riece-redraw-layout))))
   (riece-connect-signal
    'user-joined-channel
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-emit-signal 'user-list-changed riece-current-channel))
    (lambda (signal)
      (and riece-current-channel
@@ -91,7 +88,7 @@ Local to the buffer in `riece-buffer-list'.")
                                     (riece-current-nickname))))))
   (riece-connect-signal
    'user-joined-channel
-   (lambda (signal handback)
+   (lambda (signal _handback)
      (riece-join-channel (nth 1 (riece-signal-args signal)))
      (riece-switch-to-channel (nth 1 (riece-signal-args signal)))
      (setq riece-join-channel-candidate nil))
@@ -100,7 +97,7 @@ Local to the buffer in `riece-buffer-list'.")
                           (riece-current-nickname))))
   (riece-connect-signal
    'user-left-channel
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-emit-signal 'user-list-changed riece-current-channel))
    (lambda (signal)
      (and riece-current-channel
@@ -110,14 +107,14 @@ Local to the buffer in `riece-buffer-list'.")
                                     (riece-current-nickname))))))
   (riece-connect-signal
    'user-left-channel
-   (lambda (signal handback)
+   (lambda (signal _handback)
      (riece-part-channel (nth 1 (riece-signal-args signal))))
    (lambda (signal)
      (riece-identity-equal (car (riece-signal-args signal))
                           (riece-current-nickname))))
   (riece-connect-signal
    'user-renamed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-emit-signal 'user-list-changed riece-current-channel))
    (lambda (signal)
      (and riece-current-channel
@@ -125,14 +122,16 @@ Local to the buffer in `riece-buffer-list'.")
                 (riece-identity-server riece-current-channel))
          (riece-with-server-buffer (riece-identity-server
                                     riece-current-channel)
-           (riece-identity-assoc
-            (riece-identity-prefix (nth 1 (riece-signal-args signal)))
-            (riece-channel-get-users (riece-identity-prefix
-                                      riece-current-channel))
-            t)))))
+           (when (riece-channel-p (riece-identity-prefix
+                                   riece-current-channel))
+             (riece-identity-assoc
+              (riece-identity-prefix (nth 1 (riece-signal-args signal)))
+              (riece-channel-get-users (riece-identity-prefix
+                                        riece-current-channel))
+              t))))))
   (riece-connect-signal
    'user-renamed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-status-indicators)
      (riece-update-channel-indicator)
      (force-mode-line-update t))
@@ -141,7 +140,7 @@ Local to the buffer in `riece-buffer-list'.")
                           (riece-current-nickname))))
   (riece-connect-signal
    'user-renamed
-   (lambda (signal handback)
+   (lambda (signal _handback)
      (riece-switch-to-channel (nth 1 (riece-signal-args signal))))
    (lambda (signal)
      (and riece-current-channel
@@ -149,7 +148,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'user-renamed
-   (lambda (signal handback)
+   (lambda (signal _handback)
      (let* ((old-identity (car (riece-signal-args signal)))
            (new-identity (nth 1 (riece-signal-args signal)))
            (pointer (riece-identity-member old-identity
@@ -166,7 +165,7 @@ Local to the buffer in `riece-buffer-list'.")
                             riece-channel-buffer-alist))))))))
   (riece-connect-signal
    'user-away-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-status-indicators)
      (force-mode-line-update t))
    (lambda (signal)
@@ -174,7 +173,7 @@ Local to the buffer in `riece-buffer-list'.")
                           (riece-current-nickname))))
   (riece-connect-signal
    'user-operator-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-status-indicators)
      (force-mode-line-update t))
    (lambda (signal)
@@ -182,7 +181,7 @@ Local to the buffer in `riece-buffer-list'.")
                           (riece-current-nickname))))
   (riece-connect-signal
    'channel-topic-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-long-channel-indicator)
      (force-mode-line-update t))
    (lambda (signal)
@@ -191,7 +190,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'channel-modes-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-long-channel-indicator)
      (force-mode-line-update t))
    (lambda (signal)
@@ -200,7 +199,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'channel-operators-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-channel-status-indicator)
      (riece-emit-signal 'user-list-changed riece-current-channel))
    (lambda (signal)
@@ -209,7 +208,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'channel-speakers-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-channel-status-indicator)
      (riece-emit-signal 'user-list-changed riece-current-channel))
    (lambda (signal)
@@ -218,7 +217,7 @@ Local to the buffer in `riece-buffer-list'.")
                                riece-current-channel))))
   (riece-connect-signal
    'buffer-freeze-changed
-   (lambda (signal handback)
+   (lambda (_signal _handback)
      (riece-update-status-indicators)
      (force-mode-line-update t))))
 
@@ -278,7 +277,7 @@ Local to the buffer in `riece-buffer-list'.")
   (setq riece-channel-indicator
        (if riece-current-channel
            (riece-format-identity riece-current-channel)
-         "None")))
+         (riece-mcat "None"))))
 
 (defun riece-update-long-channel-indicator ()
   (setq riece-long-channel-indicator
@@ -290,7 +289,7 @@ Local to the buffer in `riece-buffer-list'.")
                  riece-current-channel
                  (riece-format-identity riece-current-channel)))
              (riece-format-identity riece-current-channel))
-         "None")))
+         (riece-mcat "None"))))
 
 (defun riece-format-identity-for-channel-list-indicator (index identity)
   (or (run-hook-with-args-until-success
@@ -328,7 +327,7 @@ Local to the buffer in `riece-buffer-list'.")
          (setq pointer (cdr (cdr pointer))))
        (setq riece-channel-list-indicator
              (riece-normalize-modeline-string riece-channel-list-indicator)))
-    (setq riece-channel-list-indicator "No channel")))
+    (setq riece-channel-list-indicator (riece-mcat "No channel"))))
 
 (defun riece-update-status-indicators ()
   (let ((server-name (riece-current-server-name)))
@@ -345,15 +344,17 @@ Local to the buffer in `riece-buffer-list'.")
                           (riece-user-get-operator riece-real-nickname))
                      "O"
                    "-")
-                 riece-user-indicator
-                 (riece-format-identity
-                  (riece-make-identity riece-real-nickname riece-server-name)
-                  t))))))
+                 )
+           (if riece-real-nickname
+               (setq riece-user-indicator
+                     (riece-format-identity
+                      (riece-make-identity riece-real-nickname
+                                           riece-server-name)
+                      t)))))))
   (walk-windows
    (lambda (window)
      (with-current-buffer (window-buffer window)
-       (if (eq (derived-mode-class major-mode)
-              'riece-dialogue-mode)
+       (if (riece-derived-mode-p 'riece-dialogue-mode)
           (setq riece-freeze-indicator
                 (if (eq riece-freeze 'own)
                     "f"
@@ -389,8 +390,7 @@ Local to the buffer in `riece-buffer-list'.")
     (setq buffers riece-buffer-list))
   (while buffers
     (if (buffer-live-p (car buffers))
-       (save-excursion
-         (set-buffer (car buffers))
+       (with-current-buffer (car buffers)
          (run-hooks 'riece-update-buffer-functions)))
     (setq buffers (cdr buffers)))
   (run-hooks 'riece-update-indicator-functions)
@@ -402,7 +402,8 @@ Local to the buffer in `riece-buffer-list'.")
     (if channels
        (setq identity (car channels))
       (if riece-debug
-         (message "%S is not a member of riece-current-channels" identity)))
+         (riece-debug (format "%S is not a member of riece-current-channels"
+                              identity))))
     (format riece-channel-buffer-format (riece-format-identity identity))))
 
 (eval-when-compile
@@ -418,15 +419,21 @@ Local to the buffer in `riece-buffer-list'.")
       (riece-channel-mode)
       (let (buffer-read-only)
        (riece-insert-info (current-buffer)
-                          (concat "Created on "
+                          (format (riece-mcat "Created on %s\n")
                                   (funcall riece-format-time-function
-                                           (current-time))
-                                  "\n"))
+                                           (current-time))))
        (run-hook-with-args 'riece-channel-buffer-create-functions identity)))
     (current-buffer)))
 
 (defun riece-channel-buffer (identity)
-  (cdr (riece-identity-assoc identity riece-channel-buffer-alist)))
+  (let ((entry (riece-identity-assoc identity riece-channel-buffer-alist)))
+    (if entry
+       (if (buffer-live-p (cdr entry))
+           (cdr entry)
+         (if riece-debug
+             (riece-debug
+              (format "riece-channel-buffer: nonexistent buffer: %s"
+                      (riece-format-identity identity))))))))
 
 (defun riece-switch-to-channel (identity)
   (let ((last riece-current-channel)
@@ -473,10 +480,12 @@ Local to the buffer in `riece-buffer-list'.")
 
 (defun riece-part-channel (identity)
   (let ((pointer (riece-identity-member identity riece-current-channels)))
-    (if pointer
-       (setcar pointer nil))
+    (unless pointer
+      (error "No such channel!"))
+    (setcar pointer nil)
     (if (riece-identity-equal identity riece-current-channel)
-       (riece-switch-to-nearest-channel pointer))
+       (riece-switch-to-nearest-channel pointer)
+      (riece-emit-signal 'channel-list-changed))
     (funcall riece-buffer-dispose-function (riece-channel-buffer identity))))
 
 (defun riece-redisplay-buffers (&optional force)