* riece-addon.el (riece-command-insinuate-addon)
[elisp/riece.git] / lisp / riece.el
index 2fc1393..400404d 100644 (file)
@@ -31,8 +31,6 @@
 (require 'riece-addon)
 (require 'riece-signal)
 
-(autoload 'derived-mode-class "derived")
-
 (defvar riece-channel-list-mode-map (make-sparse-keymap))
 (defvar riece-user-list-mode-map (make-sparse-keymap))
 
@@ -238,30 +236,45 @@ If optional argument SAFE is nil, overwrite previous definitions."
   (let ((files (if file
                   (setq riece-variables-file file
                         riece-variables-files (list file))
-                riece-variables-files)))
+                riece-variables-files))
+       (variables riece-saved-forms))
     (while files
       (condition-case nil
          (load (expand-file-name (car files)))
        (file-error nil))
-      (setq files (cdr files)))))
+      (setq files (cdr files)))
+    (while variables
+      (if (fboundp 'custom-reevaluate-setting)
+         (custom-reevaluate-setting (car variables))
+       (funcall (or (get (car variables) 'custom-set) 'set-default)
+                (car variables)
+                (eval (car (or (get (car variables) 'saved-value)
+                               (get (car variables) 'standard-value))))))
+      (setq variables (cdr variables)))))
 
 (defvar print-quoted)
 (defvar print-escape-multibyte)
 (defun riece-save-variables-files ()
   "Save current settings to `riece-saved-variables-file'."
+  (message (riece-mcat "Saving %s...") riece-saved-variables-file)
   (with-temp-file riece-saved-variables-file
+    (insert ";;; This file is generated automatically by " riece-version ".\n"
+           ";;; Do not edit this file!\n\n")
     (let ((print-quoted t)
          (print-readably t)
          print-escape-multibyte
          print-level
          print-length
          (variables riece-saved-forms))
+      (insert "(custom-set-variables\n")
       (while variables
-       (prin1 `(setq ,(car variables)
-                     ',(symbol-value (car variables)))
+       (insert " '")
+       (prin1 `(,(car variables) ',(symbol-value (car variables)))
               (current-buffer))
        (insert "\n")
-       (setq variables (cdr variables)))))
+       (setq variables (cdr variables)))
+      (insert ")")))
+  (message (riece-mcat "Saving %s...done") riece-saved-variables-file)
   (setq riece-save-variables-are-dirty nil))
 
 ;;;###autoload
@@ -284,7 +297,8 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
        (riece-insinuate-addon (car (car pointer)) riece-debug)
        (setq pointer (cdr pointer))))
     (if (or confirm (null riece-server))
-       (setq riece-server (completing-read "Server: " riece-server-alist)))
+       (setq riece-server (completing-read (riece-mcat "Server: ")
+                                           riece-server-alist)))
     (if (stringp riece-server)
        (setq riece-server (riece-server-name-to-server riece-server)))
     (riece-create-buffers)
@@ -314,7 +328,7 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
          (setq pointer (cdr pointer))))
       (run-hooks 'riece-startup-hook)
       (message "%s" (substitute-command-keys
-                    "Type \\[describe-mode] for help")))))
+                    (riece-mcat "Type \\[describe-mode] for help"))))))
 
 (defun riece-exit ()
   (if riece-save-variables-are-dirty
@@ -331,8 +345,8 @@ If optional argument CONFIRM is non-nil, ask which IRC server to connect."
        riece-channel-buffer nil
        riece-channel-buffer-alist nil
        riece-user-indicator nil
-       riece-long-channel-indicator "None"
-       riece-channel-list-indicator "No channel"
+       riece-long-channel-indicator (riece-mcat "None")
+       riece-channel-list-indicator (riece-mcat "No channel")
        riece-away-indicator "-"
        riece-operator-indicator "-"
        riece-channel-status-indicator "-"
@@ -383,9 +397,12 @@ For a list of the generic commands type \\[riece-command-generic] ? RET.
     (setq riece-command-mode-syntax-table
          (copy-syntax-table (syntax-table)))
     (set-syntax-table riece-command-mode-syntax-table)
-    (mapcar
-     (lambda (c) (modify-syntax-entry c "w"))
-     "^[]{}'`"))
+    (let* ((chars "^[]{}'`")
+          (length (length chars))
+          (index 0))
+      (while (< index length)
+       (modify-syntax-entry (aref chars index) "w")
+       (setq index (1+ index)))))
 
   (run-hooks 'riece-command-mode-hook))
 
@@ -475,7 +492,7 @@ All normal editing commands are turned off."
         riece-mode-line-buffer-identification)
        truncate-lines t
        buffer-read-only t)
-  (make-local-hook 'riece-update-buffer-functions)
+  (riece-make-local-hook 'riece-update-buffer-functions)
   (add-hook 'riece-update-buffer-functions
            'riece-update-channel-list-buffer nil t)
   (use-local-map riece-channel-list-mode-map)
@@ -506,7 +523,7 @@ Instead, these commands are available:
        buffer-read-only t)
   (if (boundp 'transient-mark-mode)
       (set (make-local-variable 'transient-mark-mode) t))
-  (make-local-hook 'riece-update-buffer-functions)
+  (riece-make-local-hook 'riece-update-buffer-functions)
   (add-hook 'riece-update-buffer-functions
            'riece-update-user-list-buffer nil t)
   (use-local-map riece-user-list-mode-map)