Don't alter message-text if decryption fails.
[riece] / lisp / riece-addon.el
index 90d78de..74db7d9 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:
 
   :group 'riece-addon-list-faces)
 (defvar riece-addon-list-disabled-face 'riece-addon-list-disabled-face)
 
-(defface riece-addon-list-unsupported-face
-  '((((class color) (background dark))
-     (:foreground "PaleTurquoise"))
-    (t
-     ()))
-  "Face used for displaying the unsupported addon."
-  :group 'riece-addon-list-faces)
-(defvar riece-addon-list-unsupported-face 'riece-addon-list-unsupported-face)
-
 (defface riece-addon-list-uninstalled-face
   '((t
      (:italic t)))
@@ -99,7 +90,6 @@
 (defcustom riece-addon-list-mark-face-alist
   '((?+ . riece-addon-list-enabled-face)
     (?- . riece-addon-list-disabled-face)
-    (?! . riece-addon-list-unsupported-face)
     (?? . riece-addon-list-uninstalled-face)
     (?  . riece-addon-list-unloaded-face))
   "An alist mapping marks on riece-addon-list-buffer to faces."
   :group 'riece-addon-list)
 
 (defcustom riece-addon-list-font-lock-keywords
-  '(("^\\([-+!? ] \\S-+\\)\\s-+\\(.*\\)"
+  '(("^\\([-+? ] \\S-+\\)\\s-+\\(.*\\)"
      (1 (cdr (assq (aref (match-string 1) 0)
                   riece-addon-list-mark-face-alist)))
      (2 riece-addon-list-description-face)))
       (if (eq (car (car pointer)) addon)
          (setq pointer nil)
        (setq pointer (cdr pointer))))
-    (if (y-or-n-p (format "%s will be insinuated.  Continue?"
-                         (mapconcat #'symbol-name addons ", ")))
-       (while addons
-         (riece-insinuate-addon-1 (car addons))
-         (setq addons (cdr addons))))))
+    (setq addons (nreverse addons))
+    (if (and (> (length addons) 1)
+            (eq verbose 'ask)
+            (not (y-or-n-p (format "%s will be insinuated.  Continue? "
+                                   (mapconcat #'symbol-name addons ", ")))))
+       (error "Insinuate operation was cancelled"))
+    (while addons
+      (riece-insinuate-addon-1 (car addons) verbose)
+      (setq addons (cdr addons)))))
 
 (defun riece-uninstall-addon (addon &optional verbose)
   (if (not (get addon 'riece-addon-insinuated))
 (defun riece-enable-addon (addon &optional verbose)
   (unless (get addon 'riece-addon-insinuated)
     (error "Add-on %S is not insinuated" addon))
-  (let ((enable (intern-soft (concat (symbol-name addon) "-enable"))))
-    (if (or (null enable)
-           (not (fboundp enable)))
-       (if verbose
-           (message "Add-on %S doesn't support enable/disable" addon))
-      (if (get addon 'riece-addon-enabled)
-         (if verbose
-             (message "Add-on %S is already enabled" addon))
-       (funcall enable)
-       (put addon 'riece-addon-enabled t)
-       (if verbose
-           (message "Add-on %S enabled" addon))))))
+  (if (get addon 'riece-addon-enabled)
+      (if verbose
+         (message "Add-on %S is already enabled" addon))
+    (let ((enable (intern-soft (concat (symbol-name addon) "-enable"))))
+      (if (and enable
+              (fboundp enable))
+         (funcall enable))
+      (put addon 'riece-addon-enabled t)
+      (if verbose
+         (message "Add-on %S enabled" addon)))))
 
 (defun riece-disable-addon (addon &optional verbose)
   (unless (get addon 'riece-addon-insinuated)
     (error "Add-on %S is not insinuated" addon))
-  (let ((disable (intern-soft (concat (symbol-name addon) "-disable"))))
-    (if (or (null disable)
-           (not (fboundp disable)))
-       (if verbose
-           (message "Add-on %S doesn't support enable/disable" addon))
-      (if (get addon 'riece-addon-enabled)
-         (progn
-           (funcall disable)
-           (put addon 'riece-addon-enabled nil)
-           (if verbose
-               (message "Add-on %S disabled" addon)))
-       (if verbose
-           (message "Add-on %S is already enabled" addon))))))
+  (if (not (get addon 'riece-addon-enabled))
+      (if verbose
+         (message "Add-on %S is already disabled" addon))
+    (let ((disable (intern-soft (concat (symbol-name addon) "-disable"))))
+      (if (and disable
+              (fboundp disable))
+         (funcall disable))
+      (put addon 'riece-addon-enabled nil)
+      (if verbose
+         (message "Add-on %S disabled" addon)))))
 
 (put 'riece-addon-list-mode 'font-lock-defaults
      '(riece-addon-list-font-lock-keywords t))
@@ -332,7 +321,7 @@ All normal editing commands are turned off."
        buffer-read-only
        (pointer riece-addon-dependencies)
        module-description-alist
-       description enable point)
+       description point longest)
     (while pointer
       (setq description (intern-soft (concat (symbol-name (car (car pointer)))
                                             "-description"))
@@ -353,26 +342,28 @@ 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 enable (intern-soft (concat (symbol-name (car (car pointer)))
-                                       "-enable")))
       (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))
                                      'riece-addon-insinuated))
                            ??
-                         (if (or (null enable)
-                                 (not (fboundp enable)))
-                             ?!
-                           (if (get (car (car pointer)) 'riece-addon-enabled)
-                               ?+
-                             ?-))))
+                         (if (get (car (car pointer)) 'riece-addon-enabled)
+                             ?+
+                           ?-)))
                      (car (car pointer))
                      (cdr (car pointer))))
       (put-text-property point (point) 'riece-addon (car (car pointer)))
@@ -382,7 +373,6 @@ Symbols in the leftmost column:
 
    +     The add-on is enabled.
    -     The add-on is disabled.
-   !     The add-on doesn't support enable/disable operation.
    ?     The add-on is not insinuated.
          The add-on is not loaded.
 ")
@@ -391,7 +381,7 @@ Useful keys:
 
    `\\[riece-command-enable-addon]' to enable the current add-on.
    `\\[riece-command-disable-addon]' to disable the current add-on.
-   `\\[riece-command-insinuate-addon]' to insinuate the add-on.
+   `\\[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.
 "))
@@ -464,7 +454,7 @@ Useful keys:
                          (lambda (pointer)
                            (not (get (car pointer) 'riece-addon-insinuated)))
                          t)))))
-  (riece-insinuate-addon addon t)
+  (riece-insinuate-addon addon 'ask)
   (when (eq major-mode 'riece-addon-list-mode)
     (riece-command-list-addons)
     (riece-addon-list-set-point addon)))