From 2cdd76d8d98835fa42ebd8b503bfc416563b1bd1 Mon Sep 17 00:00:00 2001 From: Stefan Kangas 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