* riece.el (riece): Scan riece-startup-channel-list and open servers.
[riece] / lisp / riece.el
index 373afff..e815b16 100644 (file)
 
 ;;; Code:
 
-(require 'riece-filter)
 (require 'riece-display)
 (require 'riece-server)
 (require 'riece-compat)
 (require 'riece-commands)
 (require 'riece-addon)
+(require 'riece-signal)
 
 (autoload 'derived-mode-class "derived")
 
@@ -303,18 +303,29 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
     (riece-display-connect-signals)
     (riece-redisplay-buffers)
     (riece-open-server riece-server "")
-    (let ((server-list riece-startup-server-list))
-      (while server-list
-       (riece-command-open-server (car server-list))
-       (setq server-list (cdr server-list))))
-    (let ((pointer riece-addons))
-      (while pointer
-       (unless (get (car pointer) 'riece-addon-default-disabled)
-         (riece-enable-addon (car pointer) riece-debug))
-       (setq pointer (cdr pointer))))
-    (run-hooks 'riece-startup-hook)
-    (message "%s" (substitute-command-keys
-                  "Type \\[describe-mode] for help"))))
+    ;; If no server process is available, exit.
+    (if (null riece-server-process-alist)
+       (riece-exit)
+      (let ((server-list riece-startup-server-list))
+       (while server-list
+         (riece-command-open-server (car server-list))
+         (setq server-list (cdr server-list))))
+      (let ((channel-list riece-startup-channel-list)
+           server)
+       (while channel-list
+         (setq server (riece-identity-server
+                       (riece-parse-identity (car channel-list))))
+         (unless (riece-server-opened server)
+           (riece-command-open-server server))
+         (setq channel-list (cdr channel-list))))
+      (let ((pointer riece-addons))
+       (while pointer
+         (unless (get (car pointer) 'riece-addon-default-disabled)
+           (riece-enable-addon (car pointer) riece-debug))
+         (setq pointer (cdr pointer))))
+      (run-hooks 'riece-startup-hook)
+      (message "%s" (substitute-command-keys
+                    "Type \\[describe-mode] for help")))))
 
 (defun riece-shrink-buffer (buffer)
   (save-excursion
@@ -341,6 +352,7 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
     (setq riece-buffer-list (cdr riece-buffer-list)))
   (if riece-shrink-buffer-idle-timer
       (riece-cancel-timer riece-shrink-buffer-idle-timer))
+  (riece-clear-signal-slots)
   (setq riece-server nil
        riece-current-channels nil
        riece-current-channel nil
@@ -364,6 +376,12 @@ For a list of the generic commands type \\[riece-command-generic] ? RET.
   (interactive)
   (kill-all-local-variables)
 
+  ;; Make `truncate-partial-width-windows' buffer local and set it to
+  ;; nil.  This causes `truncate-lines' to directly control line
+  ;; truncation.
+  (make-local-variable 'truncate-partial-width-windows)
+  (setq truncate-partial-width-windows nil)
+
   (setq riece-away-indicator "-"
        riece-operator-indicator "-"
        major-mode 'riece-command-mode
@@ -376,7 +394,8 @@ For a list of the generic commands type \\[riece-command-generic] ? RET.
           " "
           riece-user-indicator
           " "
-          riece-channel-indicator)))
+          riece-channel-indicator))
+       truncate-lines nil)
   (riece-simplify-mode-line-format)
   (use-local-map riece-command-mode-map)
 
@@ -398,6 +417,12 @@ Instead, these commands are available:
   (kill-all-local-variables)
   (make-local-variable 'riece-freeze)
   (make-local-variable 'riece-freeze-indicator)
+
+  ;; Make `truncate-partial-width-windows' buffer local and set it to
+  ;; nil.  This causes `truncate-lines' to directly control line truncation.
+  (make-local-variable 'truncate-partial-width-windows)
+  (setq truncate-partial-width-windows nil)
+
   (setq riece-freeze riece-default-freeze
        riece-away-indicator "-"
        riece-operator-indicator "-"
@@ -411,6 +436,7 @@ Instead, these commands are available:
           riece-freeze-indicator
           " "
           riece-channel-list-indicator " "))
+       truncate-lines nil
        buffer-read-only t)
   (riece-simplify-mode-line-format)
   (use-local-map riece-dialogue-mode-map)
@@ -445,6 +471,12 @@ Instead, these commands are available:
 All normal editing commands are turned off."
   (kill-all-local-variables)
   (buffer-disable-undo)
+
+  ;; Make `truncate-partial-width-windows' buffer local and set it to
+  ;; nil.  This causes `truncate-lines' to directly control line truncation.
+  (make-local-variable 'truncate-partial-width-windows)
+  (setq truncate-partial-width-windows nil)
+
   (setq major-mode 'riece-channel-list-mode
        mode-name "Channels"
        mode-line-buffer-identification
@@ -464,6 +496,12 @@ Instead, these commands are available:
 \\{riece-user-list-mode-map}"
   (kill-all-local-variables)
   (buffer-disable-undo)
+
+  ;; Make `truncate-partial-width-windows' buffer local and set it to
+  ;; nil.  This causes `truncate-lines' to directly control line truncation.
+  (make-local-variable 'truncate-partial-width-windows)
+  (setq truncate-partial-width-windows nil)
+
   (setq major-mode 'riece-user-list-mode
        mode-name "Users"
        mode-line-buffer-identification