Subject: bug#37418: closed (Re: bug#37418: [PATCH] Add new function to clear tags in tabulated list)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 26 Sep 2019 15:38:02 +0000

Your bug report

#37418: [PATCH] Add new function to clear tags in tabulated list

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
37418: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=37418
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#37418: [PATCH] Add new function to clear tags in tabulated list
From: Stefan Kangas <[email-masked]>
To: Lars Ingebrigtsen <[email-masked]>
Cc: [email-masked]
Date: Thu, 26 Sep 2019 17:36:42 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Lars Ingebrigtsen <[email-masked]> writes:

> I think it's a good command to add, but I'm not familiar enough with how
> tabulated list mode works, so my the only nit-pick I have to add here is
> that the %s should be a %d here.  :-)

Thanks for taking a look.  Since there have been no further comments
in a week, I have pushed this patch with your suggestion as commit
814cab3b4d.

(I forgot to reference the bug number in the commit message.  Sorry about that.)

Best regards,
Stefan Kangas

Subject: [PATCH] Add new function to clear tags in tabulated list
From: Stefan Kangas <[email-masked]>
To: [email-masked]
Date: Mon, 16 Sep 2019 03:54:57 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

I found myself wanting to clear all tags in *Packages* buffer, but it
made more sense to implement this as general functionality in
tabulated list mode.  How does it look?

Best regards,
Stefan Kangas
From 2cdd76d8d98835fa42ebd8b503bfc416563b1bd1 Mon Sep 17 00:00:00 2001
From: Stefan Kangas <[email-masked]>
Date: Mon, 16 Sep 2019 03:48:47 +0200
Subject: [PATCH] Add new function to clear tags in tabulated list

* lisp/emacs-lisp/tabulated-list.el (tabulated-list-clear-all-tags):
New function to clear all tags from padding area in current buffer.
* doc/lispref/modes.texi (Tabulated List Mode): Document it.
* etc/NEWS: Announce it.
---
 doc/lispref/modes.texi            |  5 +++++
 etc/NEWS                          |  5 +++++
 lisp/emacs-lisp/tabulated-list.el | 13 +++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 7185c243e2..2e0c9e4655 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -1201,6 +1201,11 @@ Tabulated List Mode
 function advances point by one line.
 @end defun
 
+@defun tabulated-list-clear-all-tags
+This function clears all tags from the padding area in the current
+buffer.
+@end defun
+
 @defun tabulated-list-set-col col desc &optional change-entry-data
 This function changes the tabulated list entry at point, setting
 @var{col} to @var{desc}.  @var{col} is the column number to change, or
diff --git a/etc/NEWS b/etc/NEWS
index 252c6bf9b9..2204d34b00 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1707,6 +1707,11 @@ near the current column in Tabulated Lists (see variables
 list mode: 'w' (which widens the current column) and 'c' which makes
 the current column contract.
 
++++
+*** New function 'tabulated-list-clear-all-tags'.
+This function clears all tags from the padding area in the current
+buffer.  Tags are typically added by calling 'tabulated-list-put-tag'.
+
 ** Text mode
 
 +++
diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
index 63ae1f8c07..4392fbd1e8 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -192,6 +192,19 @@ tabulated-list-put-tag
   (if advance
       (forward-line)))
 
+(defun tabulated-list-clear-all-tags ()
+  "Clear all tags from the padding area in the current buffer."
+  (unless (> tabulated-list-padding 0)
+    (error "There can be no tags in current buffer"))
+  (save-excursion
+    (goto-char (point-min))
+    (let ((inhibit-read-only t)
+          ;; Match non-space in the first n characters.
+          (re (format "^ \\{0,%s\\}[^ ]" (1- tabulated-list-padding)))
+          (empty (make-string tabulated-list-padding ? )))
+      (while (re-search-forward re nil 'noerror)
+        (tabulated-list-put-tag empty)))))
+
 (defvar tabulated-list-mode-map
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map (make-composed-keymap
-- 
2.20.1