unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Miguel Bernabeu <miguel.bernabeu@lobber.eu>
To: notmuch@notmuchmail.org, David Bremner <david@tethera.net>
Subject: Re: [RFC PATCH v2 09/12] emacs: add notmuch-tag-undo
Date: Thu, 03 Feb 2022 20:09:14 +0100	[thread overview]
Message-ID: <2622A6E4-DA2B-459F-B8D5-30070CDF1697@lobber.eu> (raw)
In-Reply-To: <20220203143254.3344753-10-david@tethera.net>

Just a typo that jumped to my eye. Sorry, I'm not proficient in elisp to validate the rest.

On February 3, 2022 3:32:51 PM GMT+01:00, David Bremner <david@tethera.net> wrote:
>Keybindings are deferred to a future commit.
>---
> doc/notmuch-emacs.rst      | 15 +++++++++++
> emacs/notmuch-tag.el       | 14 ++++++++++
> test/T315-emacs-tagging.sh | 52 ++++++++++++++++++++++++++++++++++++++
> 3 files changed, 81 insertions(+)
>
>diff --git a/doc/notmuch-emacs.rst b/doc/notmuch-emacs.rst
>index f2667de1..670d2925 100644
>--- a/doc/notmuch-emacs.rst
>+++ b/doc/notmuch-emacs.rst
>@@ -383,6 +383,21 @@ operations specified in ``notmuch-tagging-keys``; i.e. each
> 
>   |docstring::notmuch-tagging-keys|
> 
>+.. _notmuch-tag-undo:
>+
>+notmuch-tag-undo
>+----------------
>+
>+Each each notmuch buffer supporting tagging operations (i.e buffers in
Duplicated `each`.

>+:any:`notmuch-show`, :any:`notmuch-search`, :any:`notmuch-tree`, and
>+:any:`notmuch-unthreaded` mode) keeps a local stack of tagging
>+operations. These can be undone via ``notmuch-tag-undo``. By default
>+this is bound to the usual emacs keys for undo.
>+
>+:index:`notmuch-tag-undo`
>+
>+   |docstring::notmuch-tag-undo|
>+
> Buffer navigation
> =================
> 
>diff --git a/emacs/notmuch-tag.el b/emacs/notmuch-tag.el
>index 4c974679..95977881 100644
>--- a/emacs/notmuch-tag.el
>+++ b/emacs/notmuch-tag.el
>@@ -278,6 +278,7 @@ This can be used with `notmuch-tag-format-image-data'."
> ;;; track history of tag operations
> (defvar-local notmuch-tag-history nil
>   "Buffer local history of `notmuch-tag' function.")
>+(put 'notmuch-tag-history 'permanent-local t)
> 
> ;;; Format Handling
> 
>@@ -502,6 +503,19 @@ notmuch-after-tag-hook will be run."
> 		 (query query))
>     (run-hooks 'notmuch-after-tag-hook)))
> 
>+(defun notmuch-tag-undo ()
>+  "Undo the previous tagging operation in the current buffer. Uses
>+buffer local variable `notmuch-tag-history' to determine what
>+that operation was."
>+  (interactive)
>+  (when (null notmuch-tag-history)
>+    (error "no further notmuch undo information"))
>+  (let* ((action (pop notmuch-tag-history))
>+	 (query (plist-get action :query))
>+	 (changes (notmuch-tag-change-list (plist-get action :tag-changes) t)))
>+    (notmuch-tag query changes t))
>+  (notmuch-refresh-this-buffer))
>+
> (defun notmuch-tag-change-list (tags &optional reverse)
>   "Convert TAGS into a list of tag changes.
> 
>diff --git a/test/T315-emacs-tagging.sh b/test/T315-emacs-tagging.sh
>index 02fd3d27..d76b5ab8 100755
>--- a/test/T315-emacs-tagging.sh
>+++ b/test/T315-emacs-tagging.sh
>@@ -103,5 +103,57 @@ test_emacs '(notmuch-search "subject:\"search race test\" -subject:two")
> output=$(notmuch search --output=messages 'tag:search-global-race-tag')
> test_expect_equal "$output" "id:$gen_msg_id_1"
> 
>+test_begin_subtest "undo with empty history is an error"
>+test_emacs "(let ((notmuch-tag-history nil))
>+  (test-log-error
>+   (notmuch-tag-undo)))
>+  "
>+cat <<EOF > EXPECTED
>+(error no further notmuch undo information)
>+EOF
>+test_expect_equal_file EXPECTED MESSAGES
>+
>+for mode in search show tree unthreaded; do
>+    test_begin_subtest "undo tagging in $mode mode"
>+    test_emacs "(let ((notmuch-tag-history nil))
>+      (notmuch-$mode \"$os_x_darwin_thread\")
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+tag-to-be-undone-$mode\")
>+      (notmuch-tag-undo))"
>+    count=$(notmuch count "tag:tag-to-be-undone-$mode")
>+    test_expect_equal "$count" "0"
>+
>+    test_begin_subtest "undo tagging in $mode mode (multiple operations)"
>+    test_emacs "(let ((notmuch-tag-history nil))
>+      (notmuch-$mode \"$os_x_darwin_thread\")
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+one-$mode\")
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+two-$mode\")
>+      (notmuch-test-wait)
>+      (notmuch-tag-undo)
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+three-$mode\"))"
>+    output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize)
>+    notmuch tag "-one-$mode" "-three-$mode" $os_x_darwin_thread
>+    test_expect_equal "$output" "thread:XXX   2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox one-$mode three-$mode unread)"
>+
>+    test_begin_subtest "undo tagging in $mode mode (multiple undo)"
>+    test_emacs "(let ((notmuch-tag-history nil))
>+      (notmuch-$mode \"$os_x_darwin_thread\")
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+one-$mode\")
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+two-$mode\")
>+      (notmuch-tag-undo)
>+      (notmuch-test-wait)
>+      (notmuch-tag-undo)
>+      (notmuch-test-wait)
>+      (execute-kbd-macro \"+three-$mode\"))"
>+    output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize)
>+    notmuch tag "-one-$mode" "-three-$mode" $os_x_darwin_thread
>+    test_expect_equal "$output" "thread:XXX   2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox three-$mode unread)"
>+done
>+
> 
> test_done

  reply	other threads:[~2022-02-03 19:33 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-03 14:32 v3 support undo in emacs frontend David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 01/12] doc/emacs: add minimal documentation for notmuch-unthreaded mode David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 02/12] test: split variable settings to their own file David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 03/12] test/emacs: split out emacs related tests David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 04/12] test/emacs: write *Notmuch errors* buffer from test macro David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 05/12] perf-test: allow running test_emacs from performance test suite David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 06/12] perf-test: emacs tagging David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 07/12] emacs: remove non-batch code path from function notmuch-tag David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 08/12] emacs/tag: keep tag history David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 09/12] emacs: add notmuch-tag-undo David Bremner
2022-02-03 19:09   ` Miguel Bernabeu [this message]
2022-02-03 21:57     ` David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 10/12] emacs: redirect undo to notmuch-tag-undo David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 11/12] emacs: Document undo binding David Bremner
2022-02-03 14:32 ` [RFC PATCH v2 12/12] emacs: whitespace cleanup for keybindings David Bremner
2022-02-04 12:35   ` David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2622A6E4-DA2B-459F-B8D5-30070CDF1697@lobber.eu \
    --to=miguel.bernabeu@lobber.eu \
    --cc=david@tethera.net \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).