* riece-mcat.el (riece-mcat-extract): Abolished ALIST arg.
[elisp/riece.git] / lisp / riece-addon.el
index bbced80..3666e8a 100644 (file)
@@ -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:
 
   :type '(repeat (list string))
   :group 'riece-addon-list)
 
+(eval-when-compile
+  (autoload 'riece-command-save-variables "riece-commands"))
+
 (defvar riece-addon-list-mode-map
   (let ((keymap (make-sparse-keymap)))
     (define-key keymap "+" 'riece-command-enable-addon)
     (define-key keymap " " 'scroll-up)
     (define-key keymap [delete] 'scroll-down)
     (define-key keymap "q" 'bury-buffer)
+    (define-key keymap "s" 'riece-command-save-variables)
     keymap))
 
 (defun riece-load-and-build-addon-dependencies (addons)
       (if verbose
          (message "Add-on %S is already enabled" addon))
     (let ((enable (intern-soft (concat (symbol-name addon) "-enable"))))
-      (if (or (null enable)
-             (not (fboundp enable)))
+      (if (and enable
+              (fboundp enable))
          (funcall enable))
       (put addon 'riece-addon-enabled t)
       (if verbose
       (if verbose
          (message "Add-on %S is already disabled" addon))
     (let ((disable (intern-soft (concat (symbol-name addon) "-disable"))))
-      (if (or (null disable)
-             (not (fboundp disable)))
+      (if (and disable
+              (fboundp disable))
          (funcall disable))
       (put addon 'riece-addon-enabled nil)
       (if verbose
@@ -321,7 +325,7 @@ All normal editing commands are turned off."
        buffer-read-only
        (pointer riece-addon-dependencies)
        module-description-alist
-       description point)
+       description point longest)
     (while pointer
       (setq description (intern-soft (concat (symbol-name (car (car pointer)))
                                             "-description"))
@@ -342,13 +346,20 @@ All normal editing commands are turned off."
       (setq pointer (cdr pointer)))
     (erase-buffer)
     (riece-kill-all-overlays)
+    (setq pointer module-description-alist
+         longest "")
+    (while pointer
+      (if (> (length (symbol-name (car (car pointer))))
+            (length longest))
+         (setq longest (symbol-name (car (car pointer)))))
+      (setq pointer (cdr pointer)))
     (setq pointer (sort module-description-alist
                        (lambda (entry1 entry2)
                          (string-lessp (symbol-name (car entry1))
                                        (symbol-name (car entry2))))))
     (while pointer
       (setq point (point))
-      (insert (format "%c %-15S %s\n"
+      (insert (format (format "%%c %%-%dS %%s\n" (length longest))
                      (if (not (featurep (car (car pointer))))
                          ? 
                        (if (not (get (car (car pointer))
@@ -377,6 +388,7 @@ Useful keys:
    `\\[riece-command-insinuate-addon]' to insinuate the current add-on.
    `\\[riece-command-uninstall-addon]' to uninstall the current add-on.
    `\\[riece-command-unload-addon]' to unload the current add-on.
+   `\\[riece-command-save-variables]' to save the current setting.
 "))
     (goto-char (point-min))
     (pop-to-buffer (current-buffer))
@@ -407,6 +419,7 @@ Useful keys:
                              (and enabled
                                   (null (symbol-value enabled)))))
                          t)))))
+  (riece-command-insinuate-addon addon)
   (riece-enable-addon addon t)
   (when (eq major-mode 'riece-addon-list-mode)
     (riece-command-list-addons)