'((((class color) (background dark))
(:foreground "PaleTurquoise" :italic t))
(t
- (:italic t)))
+ ()))
"Face used for displaying the disabled addon."
:group 'riece-addon-list-faces)
(defvar riece-addon-list-disabled-face 'riece-addon-list-disabled-face)
:group 'riece-addon-list-faces)
(defvar riece-addon-list-unsupported-face 'riece-addon-list-unsupported-face)
-(defface riece-addon-list-unknown-face
+(defface riece-addon-list-uninstalled-face
'((t
- (:foreground "red")))
- "Face used for displaying the unknown addon."
+ (:italic t)))
+ "Face used for displaying the uninstalled addon."
:group 'riece-addon-list-faces)
-(defvar riece-addon-list-unknown-face 'riece-addon-list-unknown-face)
+(defvar riece-addon-list-uninstalled-face 'riece-addon-list-uninstalled-face)
(defface riece-addon-list-description-face
'((((class color)
'((?+ . riece-addon-list-enabled-face)
(?- . riece-addon-list-disabled-face)
(?! . riece-addon-list-unsupported-face)
- (?? . riece-addon-list-unknown-face))
+ (? . riece-addon-list-uninstalled-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)))
(let ((keymap (make-sparse-keymap)))
(define-key keymap "+" 'riece-command-enable-addon)
(define-key keymap "-" 'riece-command-disable-addon)
+ (define-key keymap "I" 'riece-command-insinuate-addon)
+ (define-key keymap "D" 'riece-command-uninstall-addon)
(define-key keymap "n" 'next-line)
(define-key keymap "p" 'previous-line)
(define-key keymap " " 'scroll-up)
(riece-load-and-build-addon-dependencies addons)))
(defun riece-insinuate-addon (addon &optional verbose)
+ (unless (assq addon riece-addon-dependencies)
+ (setq riece-addons (cons addon riece-addons)
+ riece-addon-dependencies (riece-resolve-addons
+ (copy-sequence riece-addons))))
(if (get addon 'riece-addon-insinuated)
(if verbose
(message "Add-on %S is already insinuated" addon))
(funcall (intern (concat (symbol-name addon) "-insinuate")))
(put addon 'riece-addon-insinuated t)
(if verbose
- (message "Add-on %S is insinuated" addon))))
+ (message "Add-on %S is insinuated" addon))
+ (unless (get addon 'riece-addon-default-disabled)
+ (riece-enable-addon addon t))))
(defun riece-uninstall-addon (addon &optional verbose)
(if (not (get addon 'riece-addon-insinuated))
(enabled (intern-soft (concat (symbol-name addon) "-enabled"))))
(if entry
(if (cdr entry)
- (if (= (length (cdr entry)) 1)
- (error "%S depends %S" (car (cdr entry)) addon)
- (error "%s depends %S" (mapconcat #'identity (cdr entry) ",")
- addon))
+ (error "Dependency problem: %S <- %S" addon (cdr entry))
(if (and enabled
(symbol-value enabled))
(riece-disable-addon addon verbose))
#'ignore))
(setq riece-addon-dependencies
(delq entry riece-addon-dependencies))
- (put addon 'riece-addon-insinuated nil)))
+ (remprop addon 'riece-addon-insinuated)
+ (setq riece-addons (delq addon riece-addons)
+ riece-addon-dependencies (riece-resolve-addons
+ (copy-sequence riece-addons)))))
(if verbose
(message "Add-on %S is uninstalled" addon)))))
(defun riece-enable-addon (addon &optional verbose)
+ (unless (get addon 'riece-addon-insinuated)
+ (error "Add-on %S is not insinuated" addon))
(let ((enabled (intern-soft (concat (symbol-name addon) "-enabled"))))
(if (null enabled)
(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 ((enabled (intern-soft (concat (symbol-name addon) "-enabled"))))
(if (null enabled)
(if verbose
"-enabled")))
(setq point (point))
(insert (format "%c %S: %s\n"
- (if (not (featurep (car (car pointer))))
- ??
+ (if (not (get (car (car pointer))
+ 'riece-addon-insinuated))
+ ?
(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 is not loaded.
+ The add-on is not insinuated.
")
(insert (substitute-command-keys "
Useful keys:
(if point
(goto-char point)))))
+(defun riece-command-insinuate-addon (addon)
+ (interactive
+ (list
+ (or (if (eq major-mode 'riece-addon-list-mode)
+ (get-text-property (point) 'riece-addon))
+ (intern-soft
+ (completing-read "Add-on: "
+ (mapcar (lambda (dependency)
+ (list (symbol-name (car dependency))))
+ riece-addon-modules)
+ (lambda (pointer)
+ (get (car pointer) 'riece-addon-insinuated))
+ t)))))
+ (riece-insinuate-addon addon t)
+ (when (eq major-mode 'riece-addon-list-mode)
+ (riece-command-list-addons)
+ (let ((point (point-min)))
+ (while (and (not (eq (get-text-property point 'riece-addon) addon))
+ (setq point (next-single-property-change point
+ 'riece-addon))))
+ (if point
+ (goto-char point)))))
+
+(defun riece-command-uninstall-addon (addon)
+ (interactive
+ (list
+ (or (if (eq major-mode 'riece-addon-list-mode)
+ (get-text-property (point) 'riece-addon))
+ (intern-soft
+ (completing-read "Add-on: "
+ (mapcar (lambda (dependency)
+ (list (symbol-name (car dependency))))
+ riece-addon-dependencies)
+ nil t)))))
+ (riece-uninstall-addon addon t)
+ (when (eq major-mode 'riece-addon-list-mode)
+ (riece-command-list-addons)
+ (let ((point (point-min)))
+ (while (and (not (eq (get-text-property point 'riece-addon) addon))
+ (setq point (next-single-property-change point
+ 'riece-addon))))
+ (if point
+ (goto-char point)))))
+
(provide 'riece-addon)
;;; riece-addon.el ends here