GNU bug report logs - #68354
[PATCH 0/2] Add snippets based on skeleton system.

Previous Next

Package: guix-patches;

Reported by: Tomas Volf <~@wolfsden.cz>

Date: Tue, 9 Jan 2024 22:47:02 UTC

Severity: normal

Tags: patch

Done: Tomas Volf <~@wolfsden.cz>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 68354 in the body.
You can then email your comments to 68354 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#68354; Package guix-patches. (Tue, 09 Jan 2024 22:47:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tomas Volf <~@wolfsden.cz>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Tue, 09 Jan 2024 22:47:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tomas Volf <~@wolfsden.cz>
To: guix-patches <at> gnu.org
Cc: Tomas Volf <~@wolfsden.cz>
Subject: [PATCH 0/2] Add snippets based on skeleton system.
Date: Tue,  9 Jan 2024 23:46:03 +0100
Until now there was no support for commit message and package generation for
people not using either tempel or yasnippet.  This commit adds third set of
snippets based on skeleton system, which comes with Emacs out of the box.

Tomas Volf (2):
  etc: snippets: Add skeletons for commit messages.
  etc: snippets: Add skeletons for scheme-mode.

 doc/contributing.texi                   |  42 +++++++
 etc/snippets/skeleton/commit-message.el | 143 ++++++++++++++++++++++++
 etc/snippets/skeleton/scheme.el         | 117 +++++++++++++++++++
 3 files changed, 302 insertions(+)
 create mode 100644 etc/snippets/skeleton/commit-message.el
 create mode 100644 etc/snippets/skeleton/scheme.el


base-commit: b212e6934643e085f168a5364cb593f61aa616ba
--
2.41.0




Information forwarded to guix-patches <at> gnu.org:
bug#68354; Package guix-patches. (Tue, 09 Jan 2024 22:48:02 GMT) Full text and rfc822 format available.

Message #8 received at 68354 <at> debbugs.gnu.org (full text, mbox):

From: Tomas Volf <~@wolfsden.cz>
To: 68354 <at> debbugs.gnu.org
Cc: Tomas Volf <~@wolfsden.cz>
Subject: [PATCH 1/2] etc: snippets: Add skeletons for commit messages.
Date: Tue,  9 Jan 2024 23:47:33 +0100
Some people use just plain old skeleton system, which comes with Emacs.  This
commit adds skeletons for generating commit messages for the common
operations (updating packages, ...).

* etc/snippets/skeleton/commit-message.el: New file.
* doc/contributing.texi (The Perfect Setup): Document it.

Change-Id: Ic37b6455a337fc431ad2b049d5b7261da97e5a06
---
 doc/contributing.texi                   |  20 ++++
 etc/snippets/skeleton/commit-message.el | 143 ++++++++++++++++++++++++
 2 files changed, 163 insertions(+)
 create mode 100644 etc/snippets/skeleton/commit-message.el

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 5707ff5cde..1311098dfc 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -360,6 +360,26 @@ The Perfect Setup
 @code{origin} snippet in turn may insert other trigger strings ending on
 @code{...}, which also can be expanded further.
 
+@cindex skeleton
+If you use built-in skeleton system (@xref{Top,,,autotype}), you can
+load the snippets from the @file{etc/snippets/skeleton} directory.
+
+Skeletons for editing commit messages are provided in
+@file{etc/snippets/skeleton/commit-message.el}.
+
+@cindex @code{M-x guix-package-add}
+@cindex @code{M-x guix-package-remove}
+@cindex @code{M-x guix-package-update}
+@cindex @code{M-x guix-package-rename}
+@cindex @code{M-x guix-package-move}
+Once you load the file, the following functions are provided:
+@code{guix-package-add}, @code{guix-package-remove},
+@code{guix-package-update}, @code{guix-package-rename} and
+@code{guix-package-move}.  When editing a commit message, invoke the
+appropriate one using @code{M-x} to insert a message for the change.
+
+The commit message skeletons depend on @url{https://magit.vc/, Magit}.
+
 @cindex insert or update copyright
 @cindex @code{M-x guix-copyright}
 @cindex @code{M-x copyright-update}
diff --git a/etc/snippets/skeleton/commit-message.el b/etc/snippets/skeleton/commit-message.el
new file mode 100644
index 0000000000..698079a004
--- /dev/null
+++ b/etc/snippets/skeleton/commit-message.el
@@ -0,0 +1,143 @@
+;;; commit-message.el --- skeletons for Guix's commit messages  -*- lexical-binding: t; -*-
+;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
+
+;; Author: Tomas Volf <~@wolfsden.cz>
+;; Keywords: vc, convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(defun guix--package-name-from-magit-diff (regex)
+  (with-temp-buffer
+    (magit-git-wash #'magit-diff-wash-diffs "diff" "--cached")
+    (goto-char (point-min))
+    (when (re-search-forward regex
+                             nil 'noerror)
+      (match-string-no-properties 1))))
+
+(defun guix--first-file-from-magit-diff ()
+    (car (magit-staged-files)))
+
+(define-skeleton guix-package-add
+  "Insert a commit message for adding a package."
+  nil
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "+(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Package: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; v1 - package, v2 - file
+  "gnu: Add " v1 "." \n
+  _ \n
+  "* " v2 " (" v1  "): New variable." \n)
+
+(define-skeleton guix-package-remove
+  "Insert a commit message for removing a package."
+  nil
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Package: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; v1 - package, v2 - file
+  "gnu: Remove " v1 "." \n
+  _ \n
+  "* " v2 " (" v1  "): Delete variable." \n)
+
+(define-skeleton guix-package-update
+  "Insert a commit message for updating a package."
+  (or (guix--package-name-from-magit-diff
+       (rx line-start (* (syntax whitespace))
+           "(define-public " (group (+ (not (syntax whitespace))))))
+      (skeleton-read "Package: "))
+  '(setq v1 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached")
+                  (goto-char (point-min))
+                  (search-forward "name" nil 'noerror)
+                  (search-forward "+" nil 'noerror) ; first change
+                  (when (and (search-forward "version " nil 'noerror)
+                             (looking-at-p "\""))
+                    (let ((end (save-excursion (search-forward "\")"
+                                                               nil 'noerror))))
+                      (when end
+                        (forward-char)
+                        (buffer-substring-no-properties (point) (- end 2))))))
+                (skeleton-read "New version: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; str - package, v1 - new version, v2 - file
+  "gnu: " str ": Update to " v1 "." \n
+  _ \n
+  "* " v2 " (" str  "): Update to " v1 "." \n)
+
+(define-skeleton guix-package-rename
+  "Insert a commit message for renaming a package."
+  (or (guix--first-file-from-magit-diff)
+      (skeleton-read "File: "))
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Old package: ")))
+  '(setq v2 (or (guix--package-name-from-magit-diff
+                 (rx "+(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "New package: ")))
+  ;; str - file, v1 - old package, v2 - new package
+  "gnu: " v1 ": Rename package to " v2 "." \n
+  _ \n
+  @
+  "* " str " (" v1 "): Define in terms of `deprecated-package'." \n
+  "(" v2 "): New variable, formerly known as `crawl'." \n
+  @
+  '(fill-region (cadr skeleton-positions) (car skeleton-positions)))
+
+(define-skeleton guix-package-move
+  "Insert a commit message for moving a package."
+  (or (guix--package-name-from-magit-diff
+       (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+      (skeleton-read "Package: "))
+  '(setq v1 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached" "--no-prefix")
+                  (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)))
+                (skeleton-read "Old file: ")))
+  '(setq v2 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached" "--no-prefix")
+                  (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)))
+                (skeleton-read "New file: ")))
+  ;; str - package, v1 - old file, v2 - new file
+  "gnu: " str ": Move to ("
+  (string-replace ".scm" "" (string-replace "/" " " v2))
+  ")." \n
+  _ \n
+  @
+  "* " v1 " (" str "): Move from here..." \n
+  "* " v2 " (" str "): ...to here." \n
+  @
+  '(fill-region (cadr skeleton-positions) (car skeleton-positions)))
+
+;;; commit-message.el ends here
-- 
2.41.0





Information forwarded to guix-patches <at> gnu.org:
bug#68354; Package guix-patches. (Tue, 09 Jan 2024 22:48:03 GMT) Full text and rfc822 format available.

Message #11 received at 68354 <at> debbugs.gnu.org (full text, mbox):

From: Tomas Volf <~@wolfsden.cz>
To: 68354 <at> debbugs.gnu.org
Cc: Tomas Volf <~@wolfsden.cz>
Subject: [PATCH 2/2] etc: snippets: Add skeletons for scheme-mode.
Date: Tue,  9 Jan 2024 23:47:34 +0100
Some people use just plain old skeleton system, which comes with Emacs.  This
commit adds skeletons for generating package definition and some other common
parts.

* etc/snippets/skeleton/scheme.el: New file.
* doc/contributing.texi (The Perfect Setup): Document it.

Change-Id: Ided31c06266b0d3c70ae1e050ae8694fd5e47751
---
 doc/contributing.texi           |  22 ++++++
 etc/snippets/skeleton/scheme.el | 117 ++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+)
 create mode 100644 etc/snippets/skeleton/scheme.el

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 1311098dfc..b5ee046c0a 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -380,6 +380,28 @@ The Perfect Setup
 
 The commit message skeletons depend on @url{https://magit.vc/, Magit}.
 
+Additional skeletons for editing the package definitions are provided in
+@file{etc/snippets/skeleton/scheme.el}.
+
+@cindex @code{M-x guix-insert-package}
+@cindex @code{M-x guix-insert-origin}
+@cindex @code{M-x guix-insert-git-reference}
+@cindex @code{M-x guix-insert-hg-reference}
+@cindex @code{M-x guix-insert-svn-reference}
+@cindex @code{M-x guix-insert-bzr-reference}
+@cindex @code{M-x guix-insert-cvs-reference}
+@cindex @code{M-x guix-insert-:phases}
+Once you load the file, the following functions are provided:
+@code{guix-insert-package}, @code{guix-insert-origin},
+@code{guix-insert-git-reference}, @code{guix-insert-hg-reference},
+@code{guix-insert-svn-reference}, @code{guix-insert-bzr-reference},
+@code{guix-insert-cvs-reference} and @code{guix-insert-:phases}.  They
+do what you would expect based on the name, inserting the implied
+snippet while asking for data to fill in. @code{guix-insert-:phases}
+inserts commonly used snippet to edit phases for the package.
+
+The scheme skeletons might depend on paredit for correct indentation.
+
 @cindex insert or update copyright
 @cindex @code{M-x guix-copyright}
 @cindex @code{M-x copyright-update}
diff --git a/etc/snippets/skeleton/scheme.el b/etc/snippets/skeleton/scheme.el
new file mode 100644
index 0000000000..6114b2ffbf
--- /dev/null
+++ b/etc/snippets/skeleton/scheme.el
@@ -0,0 +1,117 @@
+;;; scheme.el --- skeletons for scheme-mode          -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2024  Tomas Volf
+
+;; Author: Tomas Volf <~@wolfsden.cz>
+;; Keywords: convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(define-skeleton guix-insert-package
+  "Insert a Guix package definition."
+  "Name: "
+  "(define-public " str
+  \n"(package"
+  \n  "(name \"" str "\")"
+  \n  "(version \"" (skeleton-read "Version: ") "\")"
+  \n  "(source " _ ")"
+  \n  "(build-system " (skeleton-read "Build system: " "gnu") "-build-system)"
+  \n  "(home-page \"" (skeleton-read "Homepage: ") "\")"
+  \n  "(synopsis " (format "%S" (skeleton-read "Synopsis: ")) ")"
+  \n  "(description " (format "%S" (skeleton-read "Description: ")) ")"
+  \n  "(license license:" (skeleton-read "License: " "unknown") ")))"
+  \n)
+
+(define-skeleton guix-insert-origin
+  "Insert a Guix origin definition."
+  nil
+  '(setq v1 (skeleton-read "Method: " "url"))
+  '(setq v1 (if (string-search "-fetch" v1)
+                v1
+              (concat v1 "-fetch")))
+  "(origin"
+  \n"(method " v1 ")"
+  \n"(uri " (let ((skeleton-end-newline nil))
+              (pcase v1
+                ((or "git-fetch" "git-fetch/lfs")
+                 (guix-insert-git-reference))
+                ("hg-fetch"
+                 (guix-insert-hg-reference))
+                ("svn-fetch"
+                 (guix-insert-svn-reference))
+                ("bzr-fetch"
+                 (guix-insert-bzr-reference))
+                ("cvs-fetch"
+                 (guix-insert-cvs-reference))
+                ("url-fetch"
+                 (insert (format "%S" (skeleton-read "URI: ")))))
+              nil)
+  ")"
+  \n (pcase v1
+       ((or "git-fetch" "git-fetch/lfs")
+        "(file-name (git-file-name name version))")
+       ("hg-fetch"
+        "(file-name (hg-file-name name version))")
+       ((or "svn-fetch" "bzr-fetch" "cvs-fetch")
+        "(file-name (string-append name \"-\" version \"-checkout\"))"))
+  & \n"(sha256"
+  \n  "(base32 "
+  ;; Hash of an empty directory
+  \n  (format "%S" "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5") ")))")
+
+(define-skeleton guix-insert-git-reference
+  "Insert a Guix git-reference definition."
+  nil
+  "(git-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(commit \"" (skeleton-read "Commit / Tag: ") "\"))")
+
+(define-skeleton guix-insert-hg-reference
+  "Insert a Guix hg-reference definition."
+  nil
+  "(hg-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(changeset \"" (skeleton-read "Changeset: ") "\"))")
+
+(define-skeleton guix-insert-svn-reference
+  "Insert a Guix svn-reference definition."
+  nil
+  "(svn-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-bzr-reference
+  "Insert a Guix bzr-reference definition."
+  nil
+  "(bzr-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-cvs-reference
+  "Insert a Guix cvs-reference definition."
+  nil
+  "(cvs-reference"
+  \n"(root-directory \"" (skeleton-read "Root directory: ") "\")"
+  \n"(module \"" (skeleton-read "Module: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-:phases
+  "Insert a Guix #:phases snippet."
+  nil
+  "#:phases " \n
+  "(modify-phases %standard-phases" \n
+  _ ")")
+;;; scheme.el ends here
-- 
2.41.0





Information forwarded to guix-patches <at> gnu.org:
bug#68354; Package guix-patches. (Tue, 16 Jan 2024 17:12:02 GMT) Full text and rfc822 format available.

Message #14 received at 68354 <at> debbugs.gnu.org (full text, mbox):

From: Tomas Volf <~@wolfsden.cz>
To: 68354 <at> debbugs.gnu.org
Cc: Tomas Volf <~@wolfsden.cz>
Subject: [PATCH v2 1/2] etc: snippets: Add skeletons for commit messages.
Date: Tue, 16 Jan 2024 18:10:12 +0100
Some people use just plain old skeleton system, which comes with Emacs.  This
commit adds skeletons for generating commit messages for the common
operations (updating packages, ...).

* etc/snippets/skeleton/commit-message.el: New file.
* doc/contributing.texi (The Perfect Setup): Document it.

Change-Id: Ic37b6455a337fc431ad2b049d5b7261da97e5a06
---
 doc/contributing.texi                   |  20 ++++
 etc/snippets/skeleton/commit-message.el | 143 ++++++++++++++++++++++++
 2 files changed, 163 insertions(+)
 create mode 100644 etc/snippets/skeleton/commit-message.el

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 5707ff5cde..1311098dfc 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -360,6 +360,26 @@ The Perfect Setup
 @code{origin} snippet in turn may insert other trigger strings ending on
 @code{...}, which also can be expanded further.
 
+@cindex skeleton
+If you use built-in skeleton system (@xref{Top,,,autotype}), you can
+load the snippets from the @file{etc/snippets/skeleton} directory.
+
+Skeletons for editing commit messages are provided in
+@file{etc/snippets/skeleton/commit-message.el}.
+
+@cindex @code{M-x guix-package-add}
+@cindex @code{M-x guix-package-remove}
+@cindex @code{M-x guix-package-update}
+@cindex @code{M-x guix-package-rename}
+@cindex @code{M-x guix-package-move}
+Once you load the file, the following functions are provided:
+@code{guix-package-add}, @code{guix-package-remove},
+@code{guix-package-update}, @code{guix-package-rename} and
+@code{guix-package-move}.  When editing a commit message, invoke the
+appropriate one using @code{M-x} to insert a message for the change.
+
+The commit message skeletons depend on @url{https://magit.vc/, Magit}.
+
 @cindex insert or update copyright
 @cindex @code{M-x guix-copyright}
 @cindex @code{M-x copyright-update}
diff --git a/etc/snippets/skeleton/commit-message.el b/etc/snippets/skeleton/commit-message.el
new file mode 100644
index 0000000000..698079a004
--- /dev/null
+++ b/etc/snippets/skeleton/commit-message.el
@@ -0,0 +1,143 @@
+;;; commit-message.el --- skeletons for Guix's commit messages  -*- lexical-binding: t; -*-
+;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
+
+;; Author: Tomas Volf <~@wolfsden.cz>
+;; Keywords: vc, convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(defun guix--package-name-from-magit-diff (regex)
+  (with-temp-buffer
+    (magit-git-wash #'magit-diff-wash-diffs "diff" "--cached")
+    (goto-char (point-min))
+    (when (re-search-forward regex
+                             nil 'noerror)
+      (match-string-no-properties 1))))
+
+(defun guix--first-file-from-magit-diff ()
+    (car (magit-staged-files)))
+
+(define-skeleton guix-package-add
+  "Insert a commit message for adding a package."
+  nil
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "+(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Package: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; v1 - package, v2 - file
+  "gnu: Add " v1 "." \n
+  _ \n
+  "* " v2 " (" v1  "): New variable." \n)
+
+(define-skeleton guix-package-remove
+  "Insert a commit message for removing a package."
+  nil
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Package: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; v1 - package, v2 - file
+  "gnu: Remove " v1 "." \n
+  _ \n
+  "* " v2 " (" v1  "): Delete variable." \n)
+
+(define-skeleton guix-package-update
+  "Insert a commit message for updating a package."
+  (or (guix--package-name-from-magit-diff
+       (rx line-start (* (syntax whitespace))
+           "(define-public " (group (+ (not (syntax whitespace))))))
+      (skeleton-read "Package: "))
+  '(setq v1 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached")
+                  (goto-char (point-min))
+                  (search-forward "name" nil 'noerror)
+                  (search-forward "+" nil 'noerror) ; first change
+                  (when (and (search-forward "version " nil 'noerror)
+                             (looking-at-p "\""))
+                    (let ((end (save-excursion (search-forward "\")"
+                                                               nil 'noerror))))
+                      (when end
+                        (forward-char)
+                        (buffer-substring-no-properties (point) (- end 2))))))
+                (skeleton-read "New version: ")))
+  '(setq v2 (or (guix--first-file-from-magit-diff)
+                (skeleton-read "File: ")))
+  ;; str - package, v1 - new version, v2 - file
+  "gnu: " str ": Update to " v1 "." \n
+  _ \n
+  "* " v2 " (" str  "): Update to " v1 "." \n)
+
+(define-skeleton guix-package-rename
+  "Insert a commit message for renaming a package."
+  (or (guix--first-file-from-magit-diff)
+      (skeleton-read "File: "))
+  '(setq v1 (or (guix--package-name-from-magit-diff
+                 (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "Old package: ")))
+  '(setq v2 (or (guix--package-name-from-magit-diff
+                 (rx "+(define-public " (group (+ (not (syntax whitespace))))))
+                (skeleton-read "New package: ")))
+  ;; str - file, v1 - old package, v2 - new package
+  "gnu: " v1 ": Rename package to " v2 "." \n
+  _ \n
+  @
+  "* " str " (" v1 "): Define in terms of `deprecated-package'." \n
+  "(" v2 "): New variable, formerly known as `crawl'." \n
+  @
+  '(fill-region (cadr skeleton-positions) (car skeleton-positions)))
+
+(define-skeleton guix-package-move
+  "Insert a commit message for moving a package."
+  (or (guix--package-name-from-magit-diff
+       (rx "-(define-public " (group (+ (not (syntax whitespace))))))
+      (skeleton-read "Package: "))
+  '(setq v1 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached" "--no-prefix")
+                  (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)))
+                (skeleton-read "Old file: ")))
+  '(setq v2 (or (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--cached" "--no-prefix")
+                  (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)))
+                (skeleton-read "New file: ")))
+  ;; str - package, v1 - old file, v2 - new file
+  "gnu: " str ": Move to ("
+  (string-replace ".scm" "" (string-replace "/" " " v2))
+  ")." \n
+  _ \n
+  @
+  "* " v1 " (" str "): Move from here..." \n
+  "* " v2 " (" str "): ...to here." \n
+  @
+  '(fill-region (cadr skeleton-positions) (car skeleton-positions)))
+
+;;; commit-message.el ends here

base-commit: b212e6934643e085f168a5364cb593f61aa616ba
-- 
2.41.0





Information forwarded to guix-patches <at> gnu.org:
bug#68354; Package guix-patches. (Tue, 16 Jan 2024 17:12:02 GMT) Full text and rfc822 format available.

Message #17 received at 68354 <at> debbugs.gnu.org (full text, mbox):

From: Tomas Volf <~@wolfsden.cz>
To: 68354 <at> debbugs.gnu.org
Cc: Tomas Volf <~@wolfsden.cz>
Subject: [PATCH v2 2/2] etc: snippets: Add skeletons for scheme-mode.
Date: Tue, 16 Jan 2024 18:10:13 +0100
Some people use just plain old skeleton system, which comes with Emacs.  This
commit adds skeletons for generating package definition and some other common
parts.

* etc/snippets/skeleton/scheme.el: New file.
* doc/contributing.texi (The Perfect Setup): Document it.

Change-Id: Ided31c06266b0d3c70ae1e050ae8694fd5e47751
---
v2:
* Fix whitespace in the guix-insert-origin.

 doc/contributing.texi           |  22 ++++++
 etc/snippets/skeleton/scheme.el | 117 ++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+)
 create mode 100644 etc/snippets/skeleton/scheme.el

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 1311098dfc..b5ee046c0a 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -380,6 +380,28 @@ The Perfect Setup
 
 The commit message skeletons depend on @url{https://magit.vc/, Magit}.
 
+Additional skeletons for editing the package definitions are provided in
+@file{etc/snippets/skeleton/scheme.el}.
+
+@cindex @code{M-x guix-insert-package}
+@cindex @code{M-x guix-insert-origin}
+@cindex @code{M-x guix-insert-git-reference}
+@cindex @code{M-x guix-insert-hg-reference}
+@cindex @code{M-x guix-insert-svn-reference}
+@cindex @code{M-x guix-insert-bzr-reference}
+@cindex @code{M-x guix-insert-cvs-reference}
+@cindex @code{M-x guix-insert-:phases}
+Once you load the file, the following functions are provided:
+@code{guix-insert-package}, @code{guix-insert-origin},
+@code{guix-insert-git-reference}, @code{guix-insert-hg-reference},
+@code{guix-insert-svn-reference}, @code{guix-insert-bzr-reference},
+@code{guix-insert-cvs-reference} and @code{guix-insert-:phases}.  They
+do what you would expect based on the name, inserting the implied
+snippet while asking for data to fill in. @code{guix-insert-:phases}
+inserts commonly used snippet to edit phases for the package.
+
+The scheme skeletons might depend on paredit for correct indentation.
+
 @cindex insert or update copyright
 @cindex @code{M-x guix-copyright}
 @cindex @code{M-x copyright-update}
diff --git a/etc/snippets/skeleton/scheme.el b/etc/snippets/skeleton/scheme.el
new file mode 100644
index 0000000000..4e6ddad0dc
--- /dev/null
+++ b/etc/snippets/skeleton/scheme.el
@@ -0,0 +1,117 @@
+;;; scheme.el --- skeletons for scheme-mode          -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2024  Tomas Volf
+
+;; Author: Tomas Volf <~@wolfsden.cz>
+;; Keywords: convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(define-skeleton guix-insert-package
+  "Insert a Guix package definition."
+  "Name: "
+  "(define-public " str
+  \n"(package"
+  \n  "(name \"" str "\")"
+  \n  "(version \"" (skeleton-read "Version: ") "\")"
+  \n  "(source " _ ")"
+  \n  "(build-system " (skeleton-read "Build system: " "gnu") "-build-system)"
+  \n  "(home-page \"" (skeleton-read "Homepage: ") "\")"
+  \n  "(synopsis " (format "%S" (skeleton-read "Synopsis: ")) ")"
+  \n  "(description " (format "%S" (skeleton-read "Description: ")) ")"
+  \n  "(license license:" (skeleton-read "License: " "unknown") ")))"
+  \n)
+
+(define-skeleton guix-insert-origin
+  "Insert a Guix origin definition."
+  nil
+  '(setq v1 (skeleton-read "Method: " "url"))
+  '(setq v1 (if (string-search "-fetch" v1)
+                v1
+              (concat v1 "-fetch")))
+  "(origin"
+  \n"(method " v1 ")"
+  \n"(uri " (let ((skeleton-end-newline nil))
+              (pcase v1
+                ((or "git-fetch" "git-fetch/lfs")
+                 (guix-insert-git-reference))
+                ("hg-fetch"
+                 (guix-insert-hg-reference))
+                ("svn-fetch"
+                 (guix-insert-svn-reference))
+                ("bzr-fetch"
+                 (guix-insert-bzr-reference))
+                ("cvs-fetch"
+                 (guix-insert-cvs-reference))
+                ("url-fetch"
+                 (insert (format "%S" (skeleton-read "URI: ")))))
+              nil)
+  ")"
+  \n (pcase v1
+       ((or "git-fetch" "git-fetch/lfs")
+        "(file-name (git-file-name name version))")
+       ("hg-fetch"
+        "(file-name (hg-file-name name version))")
+       ((or "svn-fetch" "bzr-fetch" "cvs-fetch")
+        "(file-name (string-append name \"-\" version \"-checkout\"))"))
+  & \n"(sha256"
+  \n  "(base32"
+  ;; Hash of an empty directory
+  \n  (format "%S" "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5") ")))")
+
+(define-skeleton guix-insert-git-reference
+  "Insert a Guix git-reference definition."
+  nil
+  "(git-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(commit \"" (skeleton-read "Commit / Tag: ") "\"))")
+
+(define-skeleton guix-insert-hg-reference
+  "Insert a Guix hg-reference definition."
+  nil
+  "(hg-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(changeset \"" (skeleton-read "Changeset: ") "\"))")
+
+(define-skeleton guix-insert-svn-reference
+  "Insert a Guix svn-reference definition."
+  nil
+  "(svn-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-bzr-reference
+  "Insert a Guix bzr-reference definition."
+  nil
+  "(bzr-reference"
+  \n"(url \"" (skeleton-read "URL: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-cvs-reference
+  "Insert a Guix cvs-reference definition."
+  nil
+  "(cvs-reference"
+  \n"(root-directory \"" (skeleton-read "Root directory: ") "\")"
+  \n"(module \"" (skeleton-read "Module: ") "\")"
+  \n"(revision \"" (skeleton-read "Revision: ") "\"))")
+
+(define-skeleton guix-insert-:phases
+  "Insert a Guix #:phases snippet."
+  nil
+  "#:phases " \n
+  "(modify-phases %standard-phases" \n
+  _ ")")
+;;; scheme.el ends here
-- 
2.41.0





bug closed, send any further explanations to 68354 <at> debbugs.gnu.org and Tomas Volf <~@wolfsden.cz> Request was from Tomas Volf <~@wolfsden.cz> to control <at> debbugs.gnu.org. (Sun, 06 Oct 2024 16:18:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 04 Nov 2024 12:24:15 GMT) Full text and rfc822 format available.

This bug report was last modified 129 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.