 If you set this to something other than nil, you may be eaten by
 a grue.")
 
+(defun straight--call (command &rest args)
+  "Call COMMAND with ARGS, returning success and output.
+Specifically, return a cons cell whose car is a boolean
+indicating whether the command was successful, and whose cdr
+is the stdout and stderr of the command."
+  (with-temp-buffer
+    (let ((default-directory (or straight--default-directory
+                                 default-directory)))
+      (let ((success (= 0 (apply #'call-process command
+                                 nil '(t t) nil args))))
+        (cons success (buffer-string))))))
+
 (defun straight--check-call (command &rest args)
   "Call COMMAND with ARGS, returning non-nil if it succeeds.
 If the COMMAND exits with a non-zero return code, return nil. If

    (while (equal (car parts) "")
      (setq parts (cdr parts)))
    (setq parts (nreverse parts))
    ;; Add indentation.
    (if indent
        (let ((indent (make-string (or indent 0) ? )))

    file))

;;;;; Interactive popup windows

(defmacro straight-catching-quit (&rest body)
  "Exec BODY. If `quit' signaled, catch and return nil."
  (declare (indent defun))
  (let ((err (make-symbol "err")))
    `(condition-case ,err
         (progn ,@body)
       (quit))))

(defun straight-popup-raw (prompt actions)
  "Display PROMPT and allow user to choose between one of several ACTIONS.
