org-colview: Add property :exclude-tags to column view table

* lisp/org-colview.el (org-columns--capture-view): Add parameter.
(org-dblock-write:columnview): Add new property.
* doc/org-manual.org (Capturing column view): Document feature.
* testing/lisp/test-org-colview.el (test-org-colview/dblock): Add
  test.

This addition allows to specify a list of tags to exclude from column
view tables.

TINYCHANGE
This commit is contained in:
Benjamin Motz 2018-07-04 14:27:24 +02:00 committed by Nicolas Goaziou
parent bfd481be42
commit 3cb4ffe957
3 changed files with 40 additions and 7 deletions

View file

@ -5653,6 +5653,11 @@ This dynamic block has the following parameters:
When non-~nil~, skip rows where the only non-empty specifier of
the column view is =ITEM=.
- =:exclude-tags= ::
List of tags to exclude from column view table: entries with
these tags will be excluded from the column view.
- =:indent= ::
When non-~nil~, indent each =ITEM= field according to its level.

View file

@ -1317,14 +1317,15 @@ and variances (respectively) of the individual estimates."
;;; Dynamic block for Column view
(defun org-columns--capture-view (maxlevel match skip-empty format local)
(defun org-columns--capture-view (maxlevel match skip-empty exclude-tags format local)
"Get the column view of the current buffer.
MAXLEVEL sets the level limit. SKIP-EMPTY tells whether to skip
empty rows, an empty row being one where all the column view
specifiers but ITEM are empty. FORMAT is a format string for
columns, or nil. When LOCAL is non-nil, only capture headings in
current subtree.
specifiers but ITEM are empty. EXCLUDE-TAGS is a list of tags
that will be excluded from the resulting view. FORMAT is a
format string for columns, or nil. When LOCAL is non-nil, only
capture headings in current subtree.
This function returns a list containing the title row and all
other rows. Each row is a list of fields, as strings, or
@ -1347,9 +1348,13 @@ other rows. Each row is a list of fields, as strings, or
'org-columns-value
'org-columns-value-modified)))
row)))
(unless (and skip-empty
(let ((r (delete-dups (remove "" row))))
(or (null r) (and has-item (= (length r) 1)))))
(unless (or
(and skip-empty
(let ((r (delete-dups (remove "" row))))
(or (null r) (and has-item (= (length r) 1)))))
(and exclude-tags
(cl-some (lambda (tag) (member tag exclude-tags))
(org-get-tags))))
(push (cons (org-reduced-level (org-current-level)) (nreverse row))
table)))))
(or (and maxlevel (format "LEVEL<=%d" maxlevel))
@ -1394,6 +1399,8 @@ PARAMS is a property list of parameters:
:match When set to a string, use this as a tags/property match filter.
:skip-empty-rows
When t, skip rows where all specifiers other than ITEM are empty.
:exclude-tags
List of tags to exclude from column view table.
:format When non-nil, specify the column view format to use."
(let ((table
(let ((id (plist-get params :id))
@ -1419,6 +1426,7 @@ PARAMS is a property list of parameters:
(org-columns--capture-view (plist-get params :maxlevel)
(plist-get params :match)
(plist-get params :skip-empty-rows)
(plist-get params :exclude-tags)
(plist-get params :format)
view-pos))))))
(when table

View file

@ -1470,6 +1470,26 @@
** H1.1
:PROPERTIES:
:A: 1
:END:"
(let ((org-columns-default-format "%ITEM %A")) (org-update-dblock))
(buffer-substring-no-properties (point) (outline-next-heading)))))
;; Test `:exclude-tags' parameter.
(should
(equal
"#+BEGIN: columnview :exclude-tags (\"excludeme\")
| ITEM | A |
|------+---|
| H1 | |
#+END:
"
(org-test-with-temp-text
"
* H1
<point>#+BEGIN: columnview :exclude-tags (\"excludeme\")
#+END:
** H1.1 :excludeme:
:PROPERTIES:
:A: 1
:END:"
(let ((org-columns-default-format "%ITEM %A")) (org-update-dblock))
(buffer-substring-no-properties (point) (outline-next-heading)))))