;; 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:
(require 'riece-compat)
(require 'riece-misc)
(require 'riece-addon-modules)
+(require 'riece-mcat)
(defgroup riece-addon-list nil
"Add-on listing."
: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)))
(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."
- :type 'list
+ :type '(repeat (cons character symbol))
: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)))
: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)
(defun riece-insinuate-addon-1 (addon verbose)
(if (get addon 'riece-addon-insinuated)
(if verbose
- (message "Add-on %S is already insinuated" addon))
+ (message (riece-mcat "Add-on %S is already insinuated") addon))
(require addon)
(funcall (intern (concat (symbol-name addon) "-insinuate")))
(put addon 'riece-addon-insinuated t)
(if verbose
- (message "Add-on %S is insinuated" addon))
+ (message (riece-mcat "Add-on %S is insinuated") addon))
(unless (get addon 'riece-addon-default-disabled)
(riece-enable-addon addon t))))
riece-addon-dependencies
(riece-resolve-addons
(cons addon (mapcar #'car riece-addon-dependencies)))))
- (let ((pointer riece-addon-dependencies))
+ (let ((pointer riece-addon-dependencies)
+ addons)
(while pointer
(unless (get (car (car pointer)) 'riece-addon-insinuated)
- (riece-insinuate-addon-1 (car (car pointer)) verbose))
+ (setq addons (cons (car (car pointer)) addons)))
(if (eq (car (car pointer)) addon)
(setq pointer nil)
- (setq pointer (cdr pointer))))))
+ (setq pointer (cdr pointer))))
+ (setq addons (nreverse addons))
+ (if (and (> (length addons) 1)
+ (eq verbose 'ask)
+ (not (y-or-n-p (format (riece-mcat
+ "%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))
(if verbose
- (message "Add-on %S is not insinuated" addon))
+ (message (riece-mcat "Add-on %S is not insinuated") addon))
(let ((entry (assq addon riece-addon-dependencies))
- (enabled (intern-soft (concat (symbol-name addon) "-enabled")))
(uninstall (intern-soft (concat (symbol-name addon) "-uninstall"))))
(if entry
(if (cdr entry)
(error "%s depend on %S"
(mapconcat #'symbol-name (cdr entry) ", ")
addon))
- (if (and enabled
- (boundp enabled)
- (symbol-value enabled))
- (riece-disable-addon addon verbose))
+ (riece-disable-addon addon verbose)
(if (and uninstall
(fboundp uninstall))
(funcall uninstall))
(setq riece-addon-dependencies
(delq entry riece-addon-dependencies))
- (remprop addon 'riece-addon-insinuated)
+ (put addon 'riece-addon-insinuated nil)
(setq riece-addons (delq addon riece-addons)
riece-save-variables-are-dirty t
riece-addon-dependencies
(riece-resolve-addons
(delq addon (mapcar #'car riece-addon-dependencies))))))
(if verbose
- (message "Add-on %S is uninstalled" addon)))))
+ (message (riece-mcat "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 (or (null enabled)
- (not (boundp enabled)))
- (if verbose
- (message "Add-on %S doesn't support enable/disable" addon))
- (if (symbol-value enabled)
- (if verbose
- (message "Add-on %S is already enabled" addon))
- (funcall (intern (concat (symbol-name addon) "-enable")))
- (if verbose
- (message "Add-on %S enabled" addon))))))
+ (if (get addon 'riece-addon-enabled)
+ (if verbose
+ (message (riece-mcat "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 (riece-mcat "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 (or (null enabled)
- (not (boundp enabled)))
- (if verbose
- (message "Add-on %S doesn't support enable/disable" addon))
- (if (symbol-value enabled)
- (progn
- (funcall (intern (concat (symbol-name addon) "-disable")))
- (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 (riece-mcat "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 (riece-mcat "Add-on %S disabled") addon)))))
(put 'riece-addon-list-mode 'font-lock-defaults
'(riece-addon-list-font-lock-keywords t))
buffer-read-only
(pointer riece-addon-dependencies)
module-description-alist
- description enabled point)
+ description point longest)
(while pointer
(setq description (intern-soft (concat (symbol-name (car (car pointer)))
"-description"))
(if (and description
(boundp description))
(symbol-value description)
- "(no description)"))
+ (riece-mcat "(no description)")))
module-description-alist)
pointer (cdr pointer)))
(setq pointer riece-addon-modules)
(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 enabled (intern-soft (concat (symbol-name (car (car pointer)))
- "-enabled")))
(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 (null enabled)
- ?!
- (if (symbol-value 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)))
(setq pointer (cdr pointer)))
- (insert "
+ (insert (riece-mcat "
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.
-")
- (insert (substitute-command-keys "
+ + The add-on is enabled.
+ - The add-on is disabled.
+ ? The add-on is not insinuated.
+ The add-on is not loaded.
+"))
+ (insert (substitute-command-keys (riece-mcat "
Useful keys:
- `\\[riece-command-enable-addon]' to enable the current add-on.
- `\\[riece-command-disable-addon]' to disable the current add-on.
-"))
+ `\\[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 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))
(delete-other-windows)))
(or (if (eq major-mode 'riece-addon-list-mode)
(get-text-property (point) 'riece-addon))
(intern-soft
- (completing-read "Add-on: "
+ (completing-read (riece-mcat "Add-on: ")
(mapcar (lambda (dependency)
(list (symbol-name (car dependency))))
riece-addon-dependencies)
(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)
(or (if (eq major-mode 'riece-addon-list-mode)
(get-text-property (point) 'riece-addon))
(intern-soft
- (completing-read "Add-on: "
+ (completing-read (riece-mcat "Add-on: ")
(mapcar (lambda (dependency)
(list (symbol-name (car dependency))))
riece-addon-dependencies)
(or (if (eq major-mode 'riece-addon-list-mode)
(get-text-property (point) 'riece-addon))
(intern-soft
- (completing-read "Add-on: "
+ (completing-read (riece-mcat "Add-on: ")
(mapcar (lambda (dependency)
(list (symbol-name (car dependency))))
riece-addon-modules)
(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)))
(or (if (eq major-mode 'riece-addon-list-mode)
(get-text-property (point) 'riece-addon))
(intern-soft
- (completing-read "Add-on: "
+ (completing-read (riece-mcat "Add-on: ")
(mapcar (lambda (dependency)
(list (symbol-name (car dependency))))
riece-addon-dependencies)
(or (if (eq major-mode 'riece-addon-list-mode)
(get-text-property (point) 'riece-addon))
(intern-soft
- (completing-read "Add-on: "
+ (completing-read (riece-mcat "Add-on: ")
(mapcar (lambda (dependency)
(list (symbol-name (car dependency))))
riece-addon-dependencies)
t)))))
(riece-uninstall-addon addon t)
(if (get addon 'riece-addon-not-unloadable)
- (message "Add-on %S is not allowed to unload" addon)
+ (message (riece-mcat "Add-on %S is not allowed to unload") addon)
(unload-feature addon)
- (message "Add-on %S is unloaded" addon))
+ (message (riece-mcat "Add-on %S is unloaded") addon))
(when (eq major-mode 'riece-addon-list-mode)
(riece-command-list-addons)
(riece-addon-list-set-point addon)))