 
 ;;; Utilities
 
-(defun fstar--indent-str (str amount)
-  "Indent all newlines of STR by AMOUNT."
-  (replace-regexp-in-string "\n" (concat "\n" (make-string amount ?\s)) str))
+(defun fstar--indent-str (str amount &optional skip-first-line)
+  "Indent all lines of STR by AMOUNT.
+If AMOUNT is a string, use that as indentation.
+With SKIP-FIRST-LINE, don't indent the first one."
+  (let ((indent (if (stringp amount) amount (make-string amount ?\s))))
+    (if skip-first-line
+        (replace-regexp-in-string "\n" (concat "\n" indent) str)
+      (replace-regexp-in-string "^" indent str))))
 
 (defun fstar--property-range (pos prop)
   "Find range around POS with consistent non-nil value of PROP."

           (head (cdr (assq kind '((info . ";;; ") (in . ">>> ")
                                   (warning . "!!! ") (out . ""))))))
      (fstar-assert head)
      (insert (replace-regexp-in-string "^" head raw)
              (if (eq kind 'out) "" "\n")))))

(defmacro fstar-log (kind format &rest args)

  "Process CONTENTS of real-time feedback message at LEVEL."
  (let ((header (format "[F* %s] " level)))
    (setq contents (string-trim contents))
    (message "%s" (fstar--indent-str contents header))))

(defun fstar-subp--process-protocol-info (_vernum proto-features)
  "Register information (VERNUM and PROTO-FEATURES) about the protocol."
