From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Federico Tedin Newsgroups: gmane.emacs.bugs Subject: bug#39555: [PATCH] Allow tempo-define-template to reassign tags to new templates Date: Mon, 17 Feb 2020 22:27:51 +0100 Message-ID: References: <877e0u9in7.fsf@gmail.com> <835zg9pjf0.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="130211"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (darwin) Cc: 39555@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Feb 17 22:29:12 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j3nx1-000Xm5-Qh for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 17 Feb 2020 22:29:11 +0100 Original-Received: from localhost ([::1]:53262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j3nx0-00013G-Sp for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 17 Feb 2020 16:29:10 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43838) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j3nwu-00012t-5A for bug-gnu-emacs@gnu.org; Mon, 17 Feb 2020 16:29:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j3nws-0007Bi-Lu for bug-gnu-emacs@gnu.org; Mon, 17 Feb 2020 16:29:04 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:33345) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j3nws-0007Bc-Ho for bug-gnu-emacs@gnu.org; Mon, 17 Feb 2020 16:29:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1j3nws-0005U2-CH for bug-gnu-emacs@gnu.org; Mon, 17 Feb 2020 16:29:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Federico Tedin Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 17 Feb 2020 21:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39555 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 39555-submit@debbugs.gnu.org id=B39555.158197488220950 (code B ref 39555); Mon, 17 Feb 2020 21:29:02 +0000 Original-Received: (at 39555) by debbugs.gnu.org; 17 Feb 2020 21:28:02 +0000 Original-Received: from localhost ([127.0.0.1]:39318 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j3nvt-0005Rf-UC for submit@debbugs.gnu.org; Mon, 17 Feb 2020 16:28:02 -0500 Original-Received: from mail-wr1-f48.google.com ([209.85.221.48]:37840) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j3nvr-0005RL-Hs for 39555@debbugs.gnu.org; Mon, 17 Feb 2020 16:28:00 -0500 Original-Received: by mail-wr1-f48.google.com with SMTP id w15so21467821wru.4 for <39555@debbugs.gnu.org>; Mon, 17 Feb 2020 13:27:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=lFxp3N82UqMV2CR67gm5dAt6FjiOEiEhGflHM+L3TmQ=; b=AbIA0cJUTVZ/sdKbgDp4OFMNbb/U70+y+1XVdOHLuxqqcl81OvezT1virgPFJVE+pZ w7YausqDmcX8bKKFepc6aOCESSDMVE9zSVNvLh33lxRNknu7kzuD1bC3KoelW6FyKpfm Xl9gbgUw9IewpIe/Mp5kPv3O5Z0BDEbhpo5iEVby4xw34K5VPgy7vruuO7cuzgTluLla ovWrZMk+x4/Xof6TyjTm0SI9IcS8xgVECenaaLypWJAiAzZ7NTa2N+N0QNm+TvX+46g4 kctQ9VUNW8STfboe2U+hHX1taZEQZX83/ILKJRR7zST31p8w0cqWlTgVxKdGZeWGl6hB Hr8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=lFxp3N82UqMV2CR67gm5dAt6FjiOEiEhGflHM+L3TmQ=; b=qbs2EJY1ZeQgInk6tWx39LUSdAissVNppL7ebGY3RBngr8w1OuOBmvn5dalvSmqcAS anqFh4kImjZ2XEKs1CzYjwm4WWKwF88VEE+LIufIGSFbLiXtKAK9t726cUYzdCHa6NU3 29WC3SHVpT/9zapx4gBKvOmMHs5L9S6GahJkconlH4ctGk9V3znt0sZlwJrU1eTH/r2S iaAeXytktwsapUHeapzDMdmFoS0VfBraElDEJbPvLsCsxVVAOgu8vtd6BHkIo+0TuYly cE+h6qyPux9L5BoN4+4+aqzMicJRTkWYr90gIUGBHpWgzYwg1vt9/ZUj6RIkYi+pDCYZ oStg== X-Gm-Message-State: APjAAAVqkBRvO5ttXOIOTOhYVhgwdu6NmtildEEKTt82OXrN8QSkYo6S rK9cgePVPjLzf3RBQx2u2oKzyxLdcVc= X-Google-Smtp-Source: APXvYqzg2T4qgAPKwkvKebTDZJqRPqkELubP1EehrO02tOkVaO6jcBHTjXu629MB0D1Vw4MciKSbmg== X-Received: by 2002:adf:f58c:: with SMTP id f12mr23176236wro.22.1581974873316; Mon, 17 Feb 2020 13:27:53 -0800 (PST) Original-Received: from BERMB00016 ([2a02:8109:8ac0:2ff0:e051:7ad2:2a71:fe3c]) by smtp.gmail.com with ESMTPSA id c4sm898606wml.7.2020.02.17.13.27.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Feb 2020 13:27:52 -0800 (PST) In-Reply-To: <835zg9pjf0.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 14 Feb 2020 12:12:03 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:176164 Archived-At: --=-=-= Content-Type: text/plain > I think this should go to master in any case. > > Given that tempo.el is not actively maintained lately, I think you can > install your changes, after taking care of the minor issues below. > >> -(defun tempo-invalidate-collection () >> +(defun tempo-invalidate-collection (&optional global) >> "Marks the tag collection as obsolete. >> -Whenever it is needed again it will be rebuilt." >> - (setq tempo-dirty-collection t)) >> +Whenever it is needed again it will be rebuilt. When GLOBAL is > ^^^^ > Please use "if", not "when". That's our usual style of describing > optional arguments. > > I think the API changes should be in NEWS. > > Thanks. No problem, I'm attaching a new patch with those corrections applied. - Fede --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Allow-tempo-define-template-to-reassign-tags-to-new-.patch >From 5dc2c0a4674177b04302e0cc3d90a1177817feab Mon Sep 17 00:00:00 2001 From: Federico Tedin Date: Mon, 17 Feb 2020 22:24:40 +0100 Subject: [PATCH] Allow tempo-define-template to reassign tags to new templates * lisp/tempo.el (tempo-define-template): Update documentation string to mention that existing tags can be reassigned new templates. (tempo-add-tag): Allow reassigning tags to new templates. Additionally, invalidate tag collections in all buffers if the global tags list is being modified. (tempo-invalidate-collection): Allow invalidating tag collections in all buffers at the same time. * test/lisp/tempo-tests.el (tempo-define-tag-globally-test): Add a test to check that new templates plus tags can be defined from any buffer and then immediately used in other buffers. (tempo-overwrite-tag-test): Add a test to check that tags can be reassigned templates. * etc/NEWS: Announce changes. --- etc/NEWS | 8 ++++++++ lisp/tempo.el | 31 +++++++++++++++++++++++-------- test/lisp/tempo-tests.el | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 1f8e6049a8..17992d541a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -126,6 +126,14 @@ supplied error message. *** New connection method "media", which allows accessing media devices like cell phones, tablets or cameras. +** Tempo + +--- +*** 'tempo-define-template' can now re-assign templates to tags. +Previously, assigning a new template to an already defined tag had no +effect. + + ** map.el *** Pcase 'map' pattern added keyword symbols abbreviation. diff --git a/lisp/tempo.el b/lisp/tempo.el index 9de5ac66c7..2da90f08c8 100644 --- a/lisp/tempo.el +++ b/lisp/tempo.el @@ -220,7 +220,9 @@ tempo-define-template DOCUMENTATION is the documentation string for the insertion command created, and TAGLIST (a symbol) is the tag list that TAG (if provided) should be added to. If TAGLIST is nil and TAG is non-nil, TAG is -added to `tempo-tags'. +added to `tempo-tags'. If TAG already corresponds to a template in +the tag list, modify the list so that TAG now corresponds to the newly +defined template. The elements in ELEMENTS can be of several types: @@ -579,14 +581,20 @@ tempo-backward-mark (defun tempo-add-tag (tag template &optional tag-list) "Add a template tag. Add the TAG, that should complete to TEMPLATE to the list in TAG-LIST, -or to `tempo-tags' if TAG-LIST is nil." +or to `tempo-tags' if TAG-LIST is nil. If TAG was already in the list, +replace its template with TEMPLATE." (interactive "sTag: \nCTemplate: ") (if (null tag-list) (setq tag-list 'tempo-tags)) - (if (not (assoc tag (symbol-value tag-list))) - (set tag-list (cons (cons tag template) (symbol-value tag-list)))) - (tempo-invalidate-collection)) + (let ((entry (assoc tag (symbol-value tag-list)))) + (if entry + ;; Tag is already in the list, assign a new template to it + (setcdr entry template) + ;; Tag is not present in the list, add it with its template + (set tag-list (cons (cons tag template) (symbol-value tag-list))))) + ;; Invalidate globally if we're modifying `tempo-tags' + (tempo-invalidate-collection (eq tag-list 'tempo-tags))) ;;; ;;; tempo-use-tag-list @@ -609,10 +617,17 @@ tempo-use-tag-list ;;; ;;; tempo-invalidate-collection -(defun tempo-invalidate-collection () +(defun tempo-invalidate-collection (&optional global) "Marks the tag collection as obsolete. -Whenever it is needed again it will be rebuilt." - (setq tempo-dirty-collection t)) +Whenever it is needed again it will be rebuilt. If GLOBAL is non-nil, +mark the tag collection of all buffers as obsolete, not just the +current one." + (if global + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (assq 'tempo-dirty-collection (buffer-local-variables)) + (setq tempo-dirty-collection t)))) + (setq tempo-dirty-collection t))) ;;; ;;; tempo-build-collection diff --git a/test/lisp/tempo-tests.el b/test/lisp/tempo-tests.el index 0dd310b853..bfe475910d 100644 --- a/test/lisp/tempo-tests.el +++ b/test/lisp/tempo-tests.el @@ -216,6 +216,45 @@ tempo-expand-tag-test (tempo-complete-tag) (should (equal (buffer-string) "Hello, World!")))) +(ert-deftest tempo-define-tag-globally-test () + "Testing usage of a template tag defined from another buffer." + (tempo-define-template "test" '("Hello, World!") "hello") + + (with-temp-buffer + ;; Use a tag in buffer 1 + (insert "hello") + (tempo-complete-tag) + (should (equal (buffer-string) "Hello, World!")) + (erase-buffer) + + ;; Collection should not be dirty + (should-not tempo-dirty-collection) + + ;; Define a tag on buffer 2 + (with-temp-buffer + (tempo-define-template "test2" '("Now expanded.") "mytag")) + + ;; I should be able to use this template back in buffer 1 + (insert "mytag") + (tempo-complete-tag) + (should (equal (buffer-string) "Now expanded.")))) + +(ert-deftest tempo-overwrite-tag-test () + "Testing ability to reassign templates to tags." + (with-temp-buffer + ;; Define a tag and use it + (tempo-define-template "test-tag-1" '("abc") "footag") + (insert "footag") + (tempo-complete-tag) + (should (equal (buffer-string) "abc")) + (erase-buffer) + + ;; Define a new template with the same tag + (tempo-define-template "test-tag-2" '("xyz") "footag") + (insert "footag") + (tempo-complete-tag) + (should (equal (buffer-string) "xyz")))) + (ert-deftest tempo-expand-partial-tag-test () "Testing expansion of a template with a tag, with a partial match." (with-temp-buffer -- 2.21.1 (Apple Git-122.3) --=-=-=--