* riece-addon.el (riece-resolve-addons): Fixed
[riece] / lisp / riece-addon.el
index 9ffa494..092e6a5 100644 (file)
 
 ;;; Code:
 
+(require 'font-lock)
+(require 'riece-options)
+(require 'riece-compat)
+(require 'riece-misc)
+
 (defgroup riece-addon-list nil
   "Add-on management"
   :tag "Addon"
 (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-unsupported-face)
     (?? . riece-addon-list-unknown-face))
   "An alist mapping marks on riece-addon-list-buffer to faces."
   :type 'list
   :group 'riece-addon-list)
 
 (defcustom riece-addon-list-font-lock-keywords
-  '(("^\\([-+=?] [^:]+\\): \\(.*\\)"
+  '(("^\\([-+!?] [^:]+\\): \\(.*\\)"
      (1 (cdr (assq (aref (match-string 1) 0)
                   riece-addon-list-mark-face-alist)))
      (2 riece-addon-list-description-face)))
       (setq addons (cdr addons)))
     dependencies))
 
-(defun riece-resolve-addons (addons)
+(defun riece-resolve-addon-dependencies (addons)
   (let ((pointer addons)
        dependencies queue)
     ;; Uniquify, first.
        (error "Circular add-on dependency found"))
     (nreverse addons)))
 
+(defun riece-resolve-addons (addons)
+  (riece-resolve-addon-dependencies
+   (if (file-directory-p riece-addon-directory)
+       (append addons
+              (mapcar
+               (lambda (name)
+                 (unless (file-directory-p
+                          (expand-file-name name riece-addon-directory))
+                   (intern (file-name-sans-extension name))))
+               (directory-files riece-addon-directory nil "\\`[^.]" t)))
+     addons)))
+
 (defun riece-insinuate-addon (addon &optional verbose)
   (require addon)              ;implicit dependency
   (funcall (intern (concat (symbol-name addon) "-insinuate")))
@@ -214,7 +231,7 @@ All normal editing commands are turned off."
   (kill-all-local-variables)
   (buffer-disable-undo)
   (setq major-mode 'riece-addon-list-mode
-        mode-name "AddOns"
+       mode-name "AddOns"
        mode-line-buffer-identification
        (riece-mode-line-buffer-identification '("Riece: %12b"))
        truncate-lines t
@@ -233,7 +250,10 @@ All normal editing commands are turned off."
   (riece-addon-list-mode)
   (let ((inhibit-read-only t)
        buffer-read-only
-       (pointer riece-addons)
+       (pointer (sort (copy-sequence riece-addons)
+                      (lambda (symbol1 symbol2)
+                                 (string-lessp (symbol-name symbol1)
+                                               (symbol-name symbol2)))))
        enabled description point)
     (erase-buffer)
     (riece-kill-all-overlays)
@@ -247,7 +267,7 @@ All normal editing commands are turned off."
                      (if (not (featurep (car pointer)))
                          ??
                        (if (null enabled)
-                           ?=
+                           ?!
                          (if (symbol-value enabled)
                              ?+
                            ?-)))
@@ -262,7 +282,7 @@ 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 doesn't support enable/disable operation.
   ?    The add-on status is unknown.
 ")
     (insert (substitute-command-keys "
@@ -280,18 +300,18 @@ Useful keys:
    (list
     (or (if (eq major-mode 'riece-addon-list-mode)
            (get-text-property (point) 'riece-addon))
-       (completing-read "Add-on: "
-                        (mapcar (lambda (addon)
-                                  (list (symbol-name addon)))
-                                riece-addons)
-                        (lambda (pointer)
-                          (let ((enabled
-                                 (intern-soft (concat (symbol-name
-                                                       (car pointer))
-                                                      "-enabled"))))
-                            (and enabled
-                                 (null (symbol-value enabled)))))
-                        t))))
+       (intern-soft
+        (completing-read "Add-on: "
+                         (mapcar (lambda (addon)
+                                   (list (symbol-name addon)))
+                                 riece-addons)
+                         (lambda (pointer)
+                           (let ((enabled
+                                  (intern-soft (concat (car pointer)
+                                                       "-enabled"))))
+                             (and enabled
+                                  (null (symbol-value enabled)))))
+                         t)))))
   (riece-enable-addon addon t)
   (let ((enabled (intern-soft (concat (symbol-name addon) "-enabled"))))
     (if (and (eq major-mode 'riece-addon-list-mode)
@@ -311,18 +331,18 @@ Useful keys:
    (list
     (or (if (eq major-mode 'riece-addon-list-mode)
            (get-text-property (point) 'riece-addon))
-       (completing-read "Add-on: "
-                        (mapcar (lambda (addon)
-                                  (list (symbol-name addon)))
-                                riece-addons)
-                        (lambda (pointer)
-                          (let ((enabled
-                                 (intern-soft (concat (symbol-name
-                                                       (car pointer))
-                                                      "-enabled"))))
-                            (and enabled
-                                 (symbol-value enabled))))
-                        t))))
+       (intern-soft
+        (completing-read "Add-on: "
+                         (mapcar (lambda (addon)
+                                   (list (symbol-name addon)))
+                                 riece-addons)
+                         (lambda (pointer)
+                           (let ((enabled
+                                  (intern-soft (concat (car pointer)
+                                                       "-enabled"))))
+                             (and enabled
+                                  (symbol-value enabled))))
+                         t)))))
   (riece-disable-addon addon t)
   (let ((enabled (intern-soft (concat (symbol-name addon) "-enabled"))))
     (if (and (eq major-mode 'riece-addon-list-mode)
@@ -336,7 +356,7 @@ Useful keys:
            (delete-char 1)
            (insert "-")
            (put-text-property point (point) 'riece-addon addon))))))
-    
+
 (provide 'riece-addon)
 
 ;;; riece-addon.el ends here