;;; piem-edit-patch.el --- TODO -*- lexical-binding: t; -*- ;; Copyright (C) 2021 all contributors ;; TODO ;;; Code: (require 'piem) (require 'piem-b4) ; not used yet (define-derived-mode piem-edit-patch-mode nil "piem-edit-patch" "TODO" :group 'piem) (defvar piem-edit-patch-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "C-c C-c") #'piem-edit-patch-am) map) "TODO") (defvar-local piem-edit-patch--coderepo nil) (defvar-local piem-edit-patch--format nil) (defvar-local piem-edit-patch--mid nil) (defun piem-edit-patch-open (&optional entire-thread) (interactive "P") (if-let ((mid (or (piem-mid) (user-error "No message ID found for the current buffer"))) (fn (if entire-thread ;; NEEDSWORK: B4 isn't wired up, so caller would ;; need to prune non-patch messages. (run-hook-with-args-until-success 'piem-mid-to-thread-functions mid) (run-hook-with-args-until-success 'piem-am-ready-mbox-functions)))) (let ((coderepo (piem-inbox-coderepo)) (format "mboxrd")) (when (member (cdr-safe fn) '("mbox" "mboxrd")) (setq format (cdr fn)) (setq fn (car fn))) (with-current-buffer (get-buffer-create (format "*piem-edit-patch-%s*" mid)) (erase-buffer) (funcall fn) (unless (/= (point-max) 1) (error "Failed to generated mbox")) (goto-char (point-min)) (piem-edit-patch-mode) (setq piem-edit-patch--coderepo coderepo) (setq piem-edit-patch--format format) (setq piem-edit-patch--mid mid) (pop-to-buffer (current-buffer)))) (user-error "Do not know how to generate patch for current buffer"))) (defun piem-edit-patch-am (&optional toggle-worktree) (interactive "P") (piem-am (current-buffer) piem-edit-patch--format (piem-extract-mbox-info (current-buffer)) piem-edit-patch--coderepo toggle-worktree)) ;;; piem-edit-patch.el ends here (provide 'piem-edit-patch)