From 5e63e51afee0f674ff2ac961e3103011f53035cd Mon Sep 17 00:00:00 2001
From: Liliana Marie Prikler <liliana.prikler@gmail.com>
Date: Thu, 6 Oct 2022 21:09:43 +0200
Subject: snippets: Fix move.

The current move is never correct.  It flip-flops between car and cadr for
the destination.  Since the position of the destination is not actually a
fixed point in the list of changes, use a more robust method of inferring it.

* etc/snippets/tempel/text-mode (move\ ): Infer source and destination from
washed diffs.  Process new module before destination.
---
 etc/snippets/tempel/text-mode | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

(limited to 'etc/snippets/tempel')

diff --git a/etc/snippets/tempel/text-mode b/etc/snippets/tempel/text-mode
index da72b29d3c..364c21266d 100644
--- a/etc/snippets/tempel/text-mode
+++ b/etc/snippets/tempel/text-mode
@@ -122,12 +122,34 @@ text-mode :when (and (fboundp 'git-commit-mode) (git-commit-mode))
                                      nil 'noerror)
               (match-string-no-properties 1)))
           var)
-       ": Move to "
-       (concat "("
-               (string-replace "\.scm" ""
-                               (string-replace "/" " "
-                                               (car (magit-staged-files))))
-               ").")
+       ": Move to ("
+       (p (with-temp-buffer
+            (magit-git-wash #'magit-diff-wash-diffs
+              "diff" "--staged")
+            (goto-char (point-min))
+            (when (and
+                   (re-search-forward "\\+(define-public \\(\\S-+\\)"
+                                      nil 'noerror)
+                   (re-search-backward "modified[ ]*\\(\\S-+\\)"
+                                       nil 'noerror))
+              (string-replace
+               "\.scm" ""
+               (string-replace "/" " "
+                               (match-string-no-properties 1)))))
+          new-module)
+       ")." n
        n
-       n "* " (car (magit-staged-files)) " (" (s var) "): Move from here…"
-       n "* " (cadr (magit-staged-files)) " (" (s var) "): …to here.")
+       "* " (p (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--staged")
+                  (goto-char (point-min))
+                  (when (and
+                         (re-search-forward "\\-(define-public \\(\\S-+\\)"
+                                            nil 'noerror)
+                         (re-search-backward "modified[ ]*\\(\\S-+\\)"
+                                             nil 'noerror))
+                    (match-string-no-properties 1)))
+                source)
+       " (" (s var) "): Move from here…" n
+       "* " (concat (string-replace " " "/" new-module) ".scm")
+       " (" (s var) "): …to here.")
-- 
cgit v1.2.3