X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-addon.el;h=53b6331e34eab736dfc9676b4d479a9642634bd3;hp=a02d74e7cc75b9d0f71b6ff0cb3a7a56b5e17f43;hb=5cc7838480fda93ddd3d7c681470d29ec7f794dc;hpb=fe7eeb17a3b1cc9b6a5316aebae340cba1ede06d diff --git a/lisp/riece-addon.el b/lisp/riece-addon.el index a02d74e..53b6331 100644 --- a/lisp/riece-addon.el +++ b/lisp/riece-addon.el @@ -144,7 +144,7 @@ (setq addons (cdr addons))) dependencies)) -(defun riece-resolve-addons (addons) +(defun riece-resolve-addon-dependencies (addons) (let ((pointer addons) dependencies queue) ;; Uniquify, first. @@ -179,11 +179,26 @@ (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"))) - (if verbose - (message "Add-on %S is insinuated" addon))) + (if (get addon 'riece-addon-insinuated) + (if verbose + (message "Add-on %S is alread insinuated" addon)) + (funcall (intern (concat (symbol-name addon) "-insinuate"))) + (put addon 'riece-addon-insinuated t) + (if verbose + (message "Add-on %S is insinuated" addon)))) (defun riece-enable-addon (addon &optional verbose) (let ((enabled (intern-soft (concat (symbol-name addon) "-enabled")))) @@ -192,7 +207,7 @@ (message "Add-on %S doesn't support enable/disable" addon)) (if (symbol-value enabled) (if verbose - (message "Can't enable add-on %S" addon)) + (message "Add-on %S is already enabled" addon)) (funcall (intern (concat (symbol-name addon) "-enable"))) (if verbose (message "Add-on %S enabled" addon)))))) @@ -208,7 +223,7 @@ (if verbose (message "Add-on %S disabled" addon))) (if verbose - (message "Can't disable add-on %S" addon)))))) + (message "Add-on %S is already enabled" addon)))))) (put 'riece-addon-list-mode 'font-lock-defaults '(riece-addon-list-font-lock-keywords t)) @@ -288,18 +303,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) @@ -319,18 +334,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)