org-colview: Add :indent parameter

* lisp/org-colview.el (org-dblock-write:columnview): Handle :indent
  parameter.
* doc/org.texi (Capturing column view): Document new feature.
This commit is contained in:
Nicolas Goaziou 2016-02-04 18:43:08 +01:00
parent 00f0c70418
commit 99697abdb9
3 changed files with 35 additions and 8 deletions

View File

@ -5798,6 +5798,8 @@ When set to a number, don't capture entries below this level.
@item :skip-empty-rows
When set to @code{t}, skip rows where the only non-empty specifier of the
column view is @code{ITEM}.
@item :indent
When non-@code{nil}, indent each @code{ITEM} field according to its level.
@end table

View File

@ -203,7 +203,11 @@ Custom language environments for LaTeX export can now define the
string to be inserted during export, using attributes to indicate the
position of the elements. See variable ~org-latex-custom-lang-environments~
for more details.
*** Accept ~:indent~ parameter when capturing column view
When defining a "columnview" dynamic block, it is now possible to add
an :indent parameter, much like the one in the clock table.
On the other hand, stars no longer appear in an ITEM field.
** New functions
*** ~org-next-line-empty-p~
It replaces the deprecated ~next~ argument to ~org-previous-line-empty-p~.

View File

@ -1254,7 +1254,7 @@ PARAMS is a property list of parameters:
(skip-empty-rows (plist-get params :skip-empty-rows))
(columns-fmt (plist-get params :format))
(case-fold-search t)
tbl id idpos nfields tmp recalc line
tbl id idpos nfields recalc line
id-as-string view-file view-pos)
(when (setq id (plist-get params :id))
(setq id-as-string (cond ((numberp id) (number-to-string id))
@ -1290,19 +1290,40 @@ PARAMS is a property list of parameters:
(move-marker pos nil)
(when tbl
(when (plist-get params :hlines)
(setq tmp nil)
(while tbl
(if (eq (car tbl) 'hline)
(push (pop tbl) tmp)
(if (string-match "\\` *\\(\\*+\\)" (caar tbl))
(let (tmp)
(while tbl
(if (eq (car tbl) 'hline)
(push (pop tbl) tmp)
(when (string-match "\\` *\\(\\*+\\)" (caar tbl))
(if (and (not (eq (car tmp) 'hline))
(or (eq hlines t)
(and (numberp hlines)
(<= (- (match-end 1) (match-beginning 1))
hlines))))
(push 'hline tmp)))
(push (pop tbl) tmp)))
(setq tbl (nreverse tmp)))
(push (pop tbl) tmp)))
(setq tbl (nreverse tmp))))
;; Remove stars. Add indentation entities, if required.
(let ((index (cl-position
"ITEM"
(mapcar #'cadr org-columns-current-fmt-compiled)
:test #'equal)))
(when index
(dolist (row tbl)
(unless (eq row 'hline)
(let ((item (nth index row)))
(setf (nth index row)
(replace-regexp-in-string
"\\`\\(\\*+\\) +"
(if (plist-get params :indent)
(lambda (m)
(let ((l (org-reduced-level
(length (match-string 1 m)))))
(if (= l 1) ""
(concat "\\\\_"
(make-string (* 2 (1- l)) ?\s)))))
"")
item)))))))
(when vlines
(setq tbl (mapcar (lambda (x)
(if (eq 'hline x) x (cons "" x)))