(require 'cl) ;; will be available at emacs 24.4 (unless (fboundp 'with-eval-after-load) "Do magic from the future" (defmacro with-eval-after-load (file &rest body) `(eval-after-load ,file `(funcall (function ,(lambda () ,@body)))))) (defmacro with-package (packages &rest body) "After pkg macro" (declare (indent defun)) (when (symbolp packages) ;; make a list if necessary (setf packages (list packages))) `(progn (dolist (p ',packages) (when (not (package-installed-p p)) (package-install p)) (with-eval-after-load p ,@body)))) (defmacro with-package* (packages &rest body) "After pkg macro*" (declare (indent defun)) (when (symbolp packages) ;; make a list if necessary (setf packages (list packages))) `(prog1 (with-package ,packages ,@body) (dolist (p ',packages) (require p)))) (provide 'with-package)