;;; 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")))
(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
(use-local-map riece-addon-list-mode-map)
(make-local-variable 'font-lock-defaults)
(setq font-lock-defaults '(riece-addon-list-font-lock-keywords t))
+ ;; In XEmacs, auto-initialization of font-lock is not affective
+ ;; when buffer-file-name is not set.
+ (font-lock-set-defaults)
(run-hooks 'riece-addon-list-mode-hook))
(defun riece-command-list-addons ()
(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)
(if (not (featurep (car pointer)))
??
(if (null enabled)
- ?=
+ ?!
(if (symbol-value enabled)
?+
?-)))
+ 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 "
(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)
(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)
(delete-char 1)
(insert "-")
(put-text-property point (point) 'riece-addon addon))))))
-
+
(provide 'riece-addon)
;;; riece-addon.el ends here