diff --git a/bin/doom b/bin/doom index 3a1fc43f5..d40557c5e 100755 --- a/bin/doom +++ b/bin/doom @@ -48,7 +48,6 @@ ((or "-h" "--help") (error "Did you mean 'doom help'?")) ((or "-d" "--debug") - (setq doom-debug-mode t) (setenv "DEBUG" "1") (message "Debug mode on")) ((or "-i" "--insecure") @@ -64,7 +63,6 @@ (setq emacs-dir (expand-file-name (concat (pop args) "/"))) (message "Emacs directory changed to %s" emacs-dir)) ((or "-y" "--yes") - (setq doom-auto-accept t) (setenv "YES" "1") (message "Auto-yes mode on")))) @@ -84,24 +82,8 @@ (usage) (message "") (error "No command detected, aborting!")) - ((let ((default-directory emacs-dir)) + ((let ((default-directory emacs-dir) + (debug-on-error t)) (setq argv nil noninteractive 'doom) - (condition-case e (doom-dispatch args) - (user-error - (signal (car e) (cdr e))) - ((debug error) - (message "--------------------------------------------------\n") - (message "There was an unexpected error:") - (message " %s (%s)" (get (car e) 'error-message) (car e)) - (dolist (item (cdr e)) - (message " %s" item)) - (unless debug-on-error - (message - (concat "\nRun the command again with the -d (or --debug) option to enable debug\n" - "mode and, hopefully, generate a stack trace. If you decide to file a bug\n" - "report, please include it!\n\n" - "Emacs outputs to standard error, so you'll need to redirect stderr to\n" - "stdout to pipe this to a file or clipboard!\n\n" - " e.g. doom -d install 2>&1 | clipboard-program")) - (signal 'doom-error e)))))))) + (doom-dispatch (car args) (cdr args)))))) diff --git a/core/core-cli.el b/core/core-cli.el index d7eef59d8..2674397bd 100644 --- a/core/core-cli.el +++ b/core/core-cli.el @@ -50,19 +50,24 @@ omitted, show all available commands, their aliases and brief descriptions." command (if aliases (string-join aliases ",") "") (doom--dispatch-format desc t))))))) -(defun doom-dispatch (args) - "Invoke a dispatcher command and pass ARGS to it." - (let ((help (equal (car args) "help"))) - (if help (pop args)) - (cl-destructuring-bind (command &key desc body) - (let ((sym (intern (car args)))) - (or (assq sym doom--dispatch-command-alist) - (assq (cdr (assq sym doom--dispatch-alias-alist)) - doom--dispatch-command-alist) - (error "Invalid command: %s" (car args)))) - (if help - (apply #'doom--dispatch-help command desc (cdr args)) - (funcall body (cdr args)))))) +(defun doom-dispatch (cmd args &optional show-help) + "Parses ARGS and invokes a dispatcher. + +If SHOW-HELP is non-nil, show the documentation for said dispatcher." + (when (equal cmd "help") + (setq show-help t) + (when args + (setq cmd (car args) + args (cdr args)))) + (cl-destructuring-bind (command &key desc body) + (let ((sym (intern cmd))) + (or (assq sym doom--dispatch-command-alist) + (assq (cdr (assq sym doom--dispatch-alias-alist)) + doom--dispatch-command-alist) + (error "Invalid command: %s" sym))) + (if show-help + (apply #'doom--dispatch-help command desc args) + (funcall body args)))) (defmacro dispatcher! (command form &optional docstring) "Define a dispatcher command. COMMAND is a symbol or a list of symbols