Function: forge--setup-post-buffer

forge--setup-post-buffer is a byte-compiled function defined in forge-post.el.

Signature

(forge--setup-post-buffer OBJ-OR-ACTION SUBMIT FILE HEADER &optional BINDINGS FN)

Source Code

;; Defined in ~/.emacs.d/elpa/forge-20260408.1922/forge-post.el
(defun forge--setup-post-buffer ( obj-or-action submit file header
                                  &optional bindings fn)
  (declare (indent defun))
  (let* ((prevbuf (current-buffer))
         (winconf (current-window-configuration))
         (action  (cond ((symbolp obj-or-action)             obj-or-action)
                        ((forge--childp obj-or-action 'forge-topic) 'reply)
                        ((forge--childp obj-or-action 'forge-post)   'edit)))
         (obj     (if (symbolp obj-or-action)
                      (forge-get-repository :tracked)
                    obj-or-action))
         (repo    (forge-get-repository obj))
         (header  (forge--format obj header))
         (file    (forge--post-expand-file-name (forge--format obj file) repo))
         (_       (make-directory (file-name-directory file) t))
         (buffer  (find-file-noselect file))
         (resume  (forge--post-resume-p file buffer)))
    (with-current-buffer buffer
      (forge-post-mode)
      (magit-set-header-line-format header)
      (setq forge--pre-post-buffer prevbuf)
      (setq forge--pre-post-winconf winconf)
      (forge-set-buffer-repository)
      (setq forge-edit-post-action action)
      (setq forge--buffer-post-object obj)
      (setq forge--submit-post-function submit)
      (pcase-dolist (`(,var ,val) bindings)
        (set (make-local-variable var) val)
        (when (eq var 'forge--buffer-template)
          (let-alist forge--buffer-template
            (setq forge--buffer-assignees .assignees)
            (setq forge--buffer-labels .labels)
            (setq forge--buffer-draft-p .draft))))
      (cond-let
        (resume)
        ((not (memq action '(new-discussion new-issue new-pullreq))))
        ([template (alist-get 'text forge--buffer-template)]
         (unless (string-prefix-p "# " template)
           (insert "# \n\n"))
         (insert template)
         (goto-char 3))
        ((insert "# ")))
      (when fn
        (funcall fn)))
    (run-hook-wrapped 'forge-edit-post-hook
                      (lambda (fn) (with-current-buffer buffer (funcall fn)) nil))
    (message (substitute-command-keys
              "Use \\[forge-post-menu] to set fields and submit or abort"))
    (forge--display-post-buffer buffer)))