* riece.el (riece): Scan riece-startup-channel-list and open servers.
[riece] / lisp / riece.el
index 5aa8b47..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")
 
@@ -151,10 +151,13 @@ If optional argument SAFE is nil, overwrite previous definitions."
     [backspace] scroll-down
     [return] scroll-up
     " " scroll-up
+    [home] beginning-of-buffer
     "$" end-of-buffer
+    [end] end-of-buffer
     "/" riece-command-raw
     ">" end-of-buffer
     "<" beginning-of-buffer
+    "^" riece-command-list-addons
     "\C-ta" riece-command-toggle-away
     "c" riece-command-select-command-buffer
     "f" riece-command-finger
@@ -193,7 +196,9 @@ If optional argument SAFE is nil, overwrite previous definitions."
     [delete] riece-command-scroll-down
     [backspace] riece-command-scroll-down
     " " riece-command-scroll-up
+    [home] riece-command-beginning-of-buffer
     "$" riece-command-end-of-buffer
+    [end] riece-command-end-of-buffer
     ">" riece-command-next-channel
     "<" riece-command-previous-channel
     "\C-j" riece-command-next-channel
@@ -273,7 +278,7 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
       (setq riece-addons (riece-resolve-addons riece-addons))
       (let ((pointer riece-addons))
        (while pointer
-         (riece-insinuate-addon (car pointer))
+         (riece-insinuate-addon (car pointer) riece-debug)
          (setq pointer (cdr pointer))))
       (setq riece-addons-insinuated t))
     (if (or confirm (null riece-server))
@@ -298,17 +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))))
-    (run-hooks 'riece-startup-hook)
-    (let ((pointer riece-addons))
-      (while pointer
-       (riece-enable-addon (car pointer))
-       (setq pointer (cdr pointer))))
-    (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
@@ -335,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
@@ -358,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
@@ -370,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)
 
@@ -383,7 +408,7 @@ For a list of the generic commands type \\[riece-command-generic] ? RET.
      "^[]{}'`"))
 
   (run-hooks 'riece-command-mode-hook))
-  
+
 (defun riece-dialogue-mode ()
   "Major mode for displaying the IRC dialogue.
 All normal editing commands are turned off.
@@ -392,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 "-"
@@ -405,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)
@@ -424,6 +456,7 @@ Instead, these commands are available:
 All normal editing commands are turned off.
 Instead, these commands are available:
 \\{riece-channel-mode-map}"
+  (make-local-variable 'riece-channel-buffer-window-point)
   (setq mode-line-buffer-identification
        (riece-mode-line-buffer-identification
         '("Riece: "
@@ -438,8 +471,14 @@ 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-name "Channels"
        mode-line-buffer-identification
        (riece-mode-line-buffer-identification '("Riece: "))
        truncate-lines t
@@ -457,8 +496,14 @@ 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-name "Users"
        mode-line-buffer-identification
        (riece-mode-line-buffer-identification
         '("Riece: " riece-long-channel-indicator " "))
@@ -483,7 +528,7 @@ Instead, these commands are available:
                    (eq major-mode (nth 2 (car alist))))
          (funcall (nth 2 (car alist))))
        (setq alist (cdr alist))))))
-      
+
 (provide 'riece)
 
 ;;; riece.el ends here