X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-addon.el;h=95eac5fe1f65edc6f1992afdfea7003b5ccf347a;hb=5bca4037dc10af714384514b2246ece9c1fa7070;hp=163e1e8b3e6f08dee3b89e3a23a0243ceededa13;hpb=2c01d3c570555b08cc9734cfdcbcecb1044ba662;p=elisp%2Friece.git diff --git a/lisp/riece-addon.el b/lisp/riece-addon.el index 163e1e8..95eac5f 100644 --- a/lisp/riece-addon.el +++ b/lisp/riece-addon.el @@ -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: @@ -60,15 +60,6 @@ :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." @@ -107,7 +97,7 @@ :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))) @@ -115,6 +105,9 @@ :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) @@ -127,6 +120,7 @@ (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) @@ -235,13 +229,15 @@ (if (eq (car (car pointer)) addon) (setq pointer nil) (setq pointer (cdr pointer)))) - (if (if (eq verbose 'ask) - (y-or-n-p (format "%s will be insinuated. Continue?" - (mapconcat #'symbol-name addons ", "))) - verbose) - (while addons - (riece-insinuate-addon-1 (car addons) verbose) - (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)) @@ -274,35 +270,30 @@ (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)) @@ -334,7 +325,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")) @@ -355,26 +346,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))) @@ -384,7 +377,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. ") @@ -393,7 +385,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. "))