From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id oOlkDMYs9WJ1HQEAbAwnHQ (envelope-from ) for ; Thu, 11 Aug 2022 18:22:30 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id AJ5uDMYs9WIUfAAA9RJhRA (envelope-from ) for ; Thu, 11 Aug 2022 18:22:30 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id D99D13B65 for ; Thu, 11 Aug 2022 18:22:29 +0200 (CEST) Received: from localhost ([::1]:52364 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oMAx3-0002pm-0m for larch@yhetil.org; Thu, 11 Aug 2022 12:22:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oMAwc-0002SN-RZ for guix-patches@gnu.org; Thu, 11 Aug 2022 12:22:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:36917) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oMAwc-00010x-IV for guix-patches@gnu.org; Thu, 11 Aug 2022 12:22:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oMAwc-0002s7-Ds for guix-patches@gnu.org; Thu, 11 Aug 2022 12:22:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#57069] [PATCH v2] etc: Add tempel snippets. Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 11 Aug 2022 16:22:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 57069 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: Nicolas Graves , 57069@debbugs.gnu.org Received: via spool by 57069-submit@debbugs.gnu.org id=B57069.166023488410978 (code B ref 57069); Thu, 11 Aug 2022 16:22:02 +0000 Received: (at 57069) by debbugs.gnu.org; 11 Aug 2022 16:21:24 +0000 Received: from localhost ([127.0.0.1]:54893 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMAvz-0002qz-Ho for submit@debbugs.gnu.org; Thu, 11 Aug 2022 12:21:24 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:34799) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMAvq-0002qe-FP for 57069@debbugs.gnu.org; Thu, 11 Aug 2022 12:21:22 -0400 Received: by mail-ed1-f68.google.com with SMTP id z2so23624178edc.1 for <57069@debbugs.gnu.org>; Thu, 11 Aug 2022 09:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:user-agent:references :in-reply-to:date:to:from:subject:message-id:from:to:cc; bh=AiOdFedl/0hYL4EEMh4Jgkwx9mAE0/X49DX2IWUQBrw=; b=AcFb/bLK1CTxwWej+KYtQDllOYuk9itQbnwHDiisGK8WCO1TzQZCQCdbOWmMbybOMn /bj1d8g+bg9pUzlOpORg8KYj6YGEww3mUv0tETRKYsPL+QkP6R+dLVSdkJ3Ab8ktGFmj 4vFOQSf5kl954YfPM/pH405Q68Zhx55j5uQPnZN1ZADcG+6issn42G5aOX4p7AFLnHca J3jOQ16JM6JmKWtmtakXUYZ3VhLzfxk1oBe79ZbE2DomI9H5Lsq+V7axqaCh7/ZbCKX3 /LpF1Wg6IHshc5d6zsr+9YSPbWxfbgW4sbTJfqRV/wjGlJzLEsfe6/ppu+ZusWD1tGLb tJDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:user-agent:references :in-reply-to:date:to:from:subject:message-id:x-gm-message-state:from :to:cc; bh=AiOdFedl/0hYL4EEMh4Jgkwx9mAE0/X49DX2IWUQBrw=; b=g7XFQ1gffUh18R3SQz0NSRznyqlHkr7dDDznl1R0gQ++yVmDP4S4IZp+0UlP3xrLXu 9reArBIobmHl1ygjko8ErCyoz2zoCq1L4S2v1nT8GAmVwImcujhZmZlYwwgZ4y3rnxbO K+f0CjArIyd2FUZxVlBLEPPg0kRJJKY1kmtWxB2iA2PG8Pi6UnxnvK9mGixAEok8xt/o I+zHeTcVznhMjZ0mRvflkJd0J6XAGF20+U0MW7hroC9R8wDez8zYjuLJfELJDUlJZdb4 mUf8RDxwiLyOg3G3+LurAw3BUcXWdf34RkFpb2t4pQ8O1CX+pp4AvTCktG4fIBHFI5S+ kp6Q== X-Gm-Message-State: ACgBeo3jZw14lXXdL8WIlr5JU1Qiyozlup6YHnBQ14QH37HjIg4kntIs +PsrNCN1uR8KieHa/F0yw4s= X-Google-Smtp-Source: AA6agR7/8icJwf1h+EaZy5faHxqm2uxm99lS7Dn8UAgi3h5bWTZu1owL8+WOtnJvgUuT9eLPETFk+A== X-Received: by 2002:a50:d0da:0:b0:43d:5f5f:32c3 with SMTP id g26-20020a50d0da000000b0043d5f5f32c3mr31615436edf.192.1660234868517; Thu, 11 Aug 2022 09:21:08 -0700 (PDT) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id ee41-20020a056402292900b0043cf1c6bb10sm9379048edb.25.2022.08.11.09.21.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Aug 2022 09:21:08 -0700 (PDT) Message-ID: From: Liliana Marie Prikler Date: Thu, 11 Aug 2022 18:21:07 +0200 In-Reply-To: <20220811060745.6892-1-ngraves@ngraves.fr> References: <20220811060745.6892-1-ngraves@ngraves.fr> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1660234950; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=AiOdFedl/0hYL4EEMh4Jgkwx9mAE0/X49DX2IWUQBrw=; b=n3NA0TwiMWHoOsFGljl5kmK1KWUVRR5zfuejHaKvaT6CSQrQe+eBR7bzeU1YCwACQwtzEc dIV7t37e4ewArk4hxJAovA9ycyw/DjLepG/OfQfYOSw3jwhEL+0UsHN0pBA9aXjIv8QS7O P1K0fmqd1SjhdzDSnze5WyGsh32Sebe5Ba6kNFK0UyKdAccxqnpdRJAGmtYMi9LVZhZVvH cq2WexKriyr1FxltjRemCv8tzjCJPxiXLZUAphCcvoXughB9TCnmw8oEIjr6YY7it/VW1o fR3C0zcL2tUlnYGiosurlBsv6GIGQcefRwz53tmntFYub9UCDCB5ulrS/7UQug== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1660234950; a=rsa-sha256; cv=none; b=ACBaXLwGV0yA2EwqOY5HcOMkRTiiNAHN3bnFYWutjH4OkkzRmZEVnXw94MJc5Nxm7Rd8hr nbIuXGUf4YplPhZt/EGWPMXVL421FGxR5qRmbIGy+Yz/1FWmentOZ0UoC2SYm5gxLIAXH0 bjCTeHlVuMfwJAnvufXmb50g0iS/ae3SDfMGMJOG+fliD72cj5xi2BIoVFPy+2wblXSm5c V1T5PKVWDvhugUrduLZNLeaZaEpD5LBhfnIv5DK9Q51G8Uokql4iigutq2GzPFHN+kCsMq cJh8//FM+0WQmEHvP9ONYFzsbYcrJv/n46i/xXhzL526egwrpTOFsLV4v6BHUw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b="AcFb/bLK"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: 5.62 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b="AcFb/bLK"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: D99D13B65 X-Spam-Score: 5.62 X-Migadu-Scanner: scn0.migadu.com X-TUID: QFt7DlB8979t Am Donnerstag, dem 11.08.2022 um 08:07 +0200 schrieb Nicolas Graves: > * doc/contributing.texi: >   - adding configuration description for tempel snippets. >   - adapting yasnippet configuration to directory move. Write full sentences, don't use pseudo-lists. > * etc/snippets/tempel/*.eld: adding alternative to current > yasnippets. * etc/snippets/tempel/scheme-mode.eld: New file. * etc/snippets/tempel/text-mode.eld: New file. I'm not too sure about the suffix here. I'd personally prefer a suffix-less file with a mode-line. > * etc/snippets*-mode: moved to /etc/snippets/yas/*-mode not to Again, spell out both directories, as in: * etc/snippets/scheme-mode: Moved from here... * etc/snippets/yas/scheme-mode: ... to here. > conflit with Should be conflict, but I don't think this needs to be stated when using the ChangeLog style as above. > tempel snippets. > --- >  doc/contributing.texi                         |  17 ++- >  etc/snippets/tempel/scheme-mode.eld           | 113 > ++++++++++++++++++ >  etc/snippets/tempel/text-mode.eld             | 101 ++++++++++++++++ >  .../{ => yas}/scheme-mode/guix-bzr-reference  |   0 >  .../{ => yas}/scheme-mode/guix-cvs-reference  |   0 >  .../{ => yas}/scheme-mode/guix-git-reference  |   0 >  .../{ => yas}/scheme-mode/guix-hg-reference   |   0 >  .../{ => yas}/scheme-mode/guix-origin         |   0 >  .../{ => yas}/scheme-mode/guix-package        |   0 >  .../{ => yas}/scheme-mode/guix-svn-reference  |   0 >  .../guix-commit-message-add-cl-package        |   0 >  .../text-mode/guix-commit-message-add-package |   0 >  .../guix-commit-message-remove-package        |   0 >  .../guix-commit-message-rename-package        |   0 >  .../guix-commit-message-update-package        |   0 >  .../guix-commit-message-use-https-home-page   |   0 >  16 files changed, 226 insertions(+), 5 deletions(-) >  create mode 100644 etc/snippets/tempel/scheme-mode.eld >  create mode 100644 etc/snippets/tempel/text-mode.eld >  rename etc/snippets/{ => yas}/scheme-mode/guix-bzr-reference (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-cvs-reference (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-git-reference (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-hg-reference (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-origin (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-package (100%) >  rename etc/snippets/{ => yas}/scheme-mode/guix-svn-reference (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-add-cl- > package (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-add- > package (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-remove- > package (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-rename- > package (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-update- > package (100%) >  rename etc/snippets/{ => yas}/text-mode/guix-commit-message-use- > https-home-page (100%) > > diff --git a/doc/contributing.texi b/doc/contributing.texi > index 02c7c5ae59..808d71e40a 100644 > --- a/doc/contributing.texi > +++ b/doc/contributing.texi > @@ -320,15 +320,22 @@ s-expression, etc. >  @cindex reducing boilerplate >  We also provide templates for common git commit messages and package >  definitions in the @file{etc/snippets} directory.  These templates > can > -be used with @url{https://joaotavora.github.io/yasnippet/, > YASnippet} to > -expand short trigger strings to interactive text snippets.  You may > want > -to add the snippets directory to the @var{yas-snippet-dirs} variable > in > -Emacs. > +be used to expand short trigger strings to interactive text > snippets, > +with either @url{https://joaotavora.github.io/yasnippet/, YASnippet} > or > +@url{https://github.com/minad/tempel/, Tempel}.  You may want to add > the > +@file{etc/snippets/yas} (respectively > @file{etc/snippets/tempel/*.eld} > +or selected files) snippets directory to the @var{yas-snippet-dirs} > +(@var{tempel-path} resp.) variable in Emacs. You probably want to reorganize this a little. "We also provide templates for common git commit messages and package definitions in the @file{etc/snippets} directory. If you use YASnippet, you may want to . If you use Tempel, you may want to ." >   >  @lisp >  ;; @r{Assuming the Guix checkout is in ~/src/guix.} > +;; @r{Yasnippet} >  (with-eval-after-load 'yasnippet > -  (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets")) > +  (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets/yas")) > +;;@r{Tempel} > +(with-eval-after-load 'tempel > +         (add-to-list 'tempel-path > +         "~/src/guix/etc/snippets/tempel/*.eld")) >  @end lisp >   >  The commit message snippets depend on @url{https://magit.vc/, Magit} > to > diff --git a/etc/snippets/tempel/scheme-mode.eld > b/etc/snippets/tempel/scheme-mode.eld > new file mode 100644 > index 0000000000..5fcd7030b8 > --- /dev/null > +++ b/etc/snippets/tempel/scheme-mode.eld > @@ -0,0 +1,113 @@ > +-*- mode: lisp-data -*- > + > +scheme-mode > + > +(package... > + "(define-public " (s name) n> > + "(package" n> Style-wise, I think n> "(package" is better than the other way round. You can also n > and n > on subsequent lines for clarity. > + "(name \"" (s name) "\")" n> > + "(version \"" p "\")" n> > + "(source origin..." p ")" n> I don't think you want that p here. > + "(build-system \"" > + (p (completing-read "build-system:" > +                     '("android-ndk" > +                       "ant" > +                       "asdf" > +                       "cargo" > +                       "chicken" > +                       "clojure" > +                       "cmake" > +                       "copy" > +                       "dub" > +                       "dune" > +                       "emacs" > +                       "font" > +                       "glib-or-gtk" > +                       "gnu" > +                       "go" > +                       "guile" > +                       "haskell" > +                       "julia" > +                       "linux-module" > +                       "maven" > +                       "meson" > +                       "minetest" > +                       "minify" > +                       "node" > +                       "ocaml" > +                       "perl" > +                       "python" > +                       "qt" > +                       "r" > +                       "rakudo" > +                       "rebar" > +                       "renpy" > +                       "ruby" > +                       "scons" > +                       "texlive" > +                       "trivial" > +                       "waf") > +                     nil t) "-build-system") I'd suggest skipping the completing-read and just (p "gnu"). Most build systems should be easy enough to type without autocompletion. > + "\")" n> > + "(home-page \"" p "\")" n> > + "(synopsis \"" p "\")" n> > + "(description \"" p "\")" n> > + "(license " p ")))" n) > + > +(origin... > + "(origin" n> > + "(method \"" > + (p (completing-read "method:" > +                     '("url-fetch" > +                       "url-fetch/tarbomb" > +                       "url-fetch/zipbomb" > +                       "cvs-fetch" > +                       "git-fetch" > +                       "hg-fetch" > +                       "svn-fetch" > +                       "bzr-fetch") > +                     nil t) method) "\")" n> Here, I think (p "url-fetch"), but (s "method") might also work. > + "(uri " (cl-case (intern method) > +           ('git-fetch "git-reference...") > +           ('svn-fetch "svn-reference...") > +           ('hg-fetch  "hg-reference...") > +           ('cvs-fetch "cvs-reference...") > +           ('bzr-fetch "bzr-reference...") > +           (t          "(string-append \"https://")) Will this cl-case be dynamically recomputed? I wonder if we can get the result of the previous p/s here... > + p > + (if (equal (substring method 0 9)  "url-fetch") "\")") > + ")" n> > + (cl-case (intern method) > +   ('git-fetch "(file-name (git-file-name name version))\n") > +   ('hg-fetch "(file-name (hg-file-name name version))\n") > +   ('svn-fetch "(file-name (string-append name \"-\" version \"- > checkout\"))\n") > +   ('cvs-fetch "(file-name (string-append name \"-\" version \"- > checkout\"))\n") > +   ('bzr-fetch "(file-name (string-append name \"-\" version \"- > checkout\"))\n") > +   (t          "")) > Rather than that I think adding a template (git-file-name...) which expands to (file-name (git-file-name (p "name") (p "version")) and variants for the others is a better idea. > + "(sha256" n> "(base32 \"" p "\")))") > + > +(git-reference... > + "(git-reference" n> > + "(url \"" p "\")" n> > + "(commit \"" p "\"))") > + > +(svn-reference... > + "(svn-reference" n> > + "(url \"" p "\")" n> > + "(revision \"" p "\"))") > + > +(cvs-reference... > + "(cvs-reference" n> > + "(root-directory \"" p "\")" n> > + "(module \"" p "\")" n> > + "(revision \"" p "\"))") > + > +(hg-reference... > + "(hg-reference" n> > + "(url \"" p "\")" n> > + "(changeset \"" p "\"))") > + > +(bzr-reference... > + "(bzr-reference" n> > + "(url \"" p "\")" n> > + "(revision \"" p "\"))") > diff --git a/etc/snippets/tempel/text-mode.eld > b/etc/snippets/tempel/text-mode.eld > new file mode 100644 > index 0000000000..a51a6719d7 > --- /dev/null > +++ b/etc/snippets/tempel/text-mode.eld > @@ -0,0 +1,101 @@ > +-*- mode: lisp-data -*- > + > +text-mode :when (git-commit-mode) > + > +(add > + "gnu: Add " > + (p > +  (with-temp-buffer > +    (magit-git-wash #'magit-diff-wash-diffs > +      "diff" "--staged") > +    (goto-char (point-min)) > +    (when (re-search-forward "\\+(define-public \\(\\S-+\\)" nil > 'noerror) > +      (match-string-no-properties 1))) > +  var ) "." n n > + "* " (car (magit-staged-files)) " (" (s var ) "): New variable.") Pro tip: add a space after add (i.e. add\ ) or use add... as the name. This way, you guard against premature expansion in corfu and other packages likely to be used in combination with tempel. > +(remove > + "gnu: Remove " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (goto-char (point-min)) > +      (when (re-search-forward "\\-(define-public \\(\\S-+\\)" nil > 'noerror) > +        (match-string-no-properties 1))) > +    var) "." n n > + "* " (car (magit-staged-files)) " (" (s var) "): Delete variable.") > + > +(rename > + "gnu: " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (beginning-of-buffer) > +      (when (search-forward "-(define-public " nil 'noerror) > +        (thing-at-point 'sexp 'no-properties))) > +    prev-var) > + ": Rename package to " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (beginning-of-buffer) > +      (when (search-forward "+(define-public " nil 'noerror) > +        (thing-at-point 'sexp 'no-properties))) > +    new-var) "." n n > + "* " (car (magit-staged-files)) " (" (s prev-var) "): Define in > terms of" n > + "'deprecated-package'." n > + "(" (s new-var) "): New variable, formerly known as \"" (s prev- > var) "\".") > + > +(update > + "gnu: " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (goto-char (point-min)) > +      (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil > 'noerror) > +        (match-string-no-properties 1))) > +    var) > + ": Update to " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (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)))))) > +    version) "." n n > + "* " (car (magit-staged-files)) " (" (s var) "): Update to " (s > version) "." > + (mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged- > files))) n) > + > +(addcl > + "gnu: Add cl-" > + (p (replace-regexp-in-string > +     "^cl-" "" (with-temp-buffer > +                 (magit-git-wash #'magit-diff-wash-diffs > +                   "diff" "--staged") > +                 (beginning-of-buffer) > +                 (when (search-forward "+(define-public " nil > 'noerror) > +                   (replace-regexp-in-string > +                    "^sbcl-" "" > +                    (thing-at-point 'sexp 'no-properties))))) > +    var) "." n n > + "* " (car (magit-staged-files)) > + " (cl-" (s var)  ", ecl-" (s var) ", sbcl-" (s var) "): New > variables.") > + > +(https > + "gnu: " > + (p (with-temp-buffer > +      (magit-git-wash #'magit-diff-wash-diffs > +        "diff" "--staged") > +      (goto-char (point-min)) > +      (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil > 'noerror) > +        (match-string-no-properties 1))) > +    var) > + ": Use HTTPS home page." n n > + "* " (car (magit-staged-files)) " (" (s var) ")[home-page]: Use > HTTPS." n > + (mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged- > files))) n) Cheers