mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-11-21 06:55:35 +00:00
org-columns-compile-format: Fix regexp
* lisp/org-colview.el (org-columns-compile-format): Refactor string-based regexp to `rx' form. Fix regexp: When an empty parentheses () is in the column format string then the regexp can't capture the operator which is in curly brackets {}. (org-columns-new): prevent adding empty parantheses '()' to 'column format string' when 'column title' is empty. * testing/lisp.test-org-colview.el (test-org-colview/compile-format): New test case: check if operator will be captured when there is empty parantheses '()' in 'column format string'. Reported-by: Sławomir Grochowski <slawomir.grochowski@gmail.com> Link: https://list.orgmode.org/orgmode/877ccczt83.fsf@gmail.com/
This commit is contained in:
parent
7a3fc3d78b
commit
07dd3bcae6
@ -935,8 +935,10 @@ details."
|
||||
(mapcar #'list (org-buffer-property-keys t nil t))
|
||||
nil nil (nth 0 spec))))
|
||||
(list prop
|
||||
(read-string (format "Column title [%s]: " prop)
|
||||
(nth 1 spec))
|
||||
;; Discard useless whitespace-only titles.
|
||||
(org-string-nw-p
|
||||
(read-string (format "Column title [%s]: " prop)
|
||||
(nth 1 spec)))
|
||||
;; Use `read-string' instead of `read-number'
|
||||
;; to allow empty width.
|
||||
(let ((w (read-string
|
||||
@ -1183,14 +1185,18 @@ This function updates `org-columns-current-fmt-compiled'."
|
||||
(setq org-columns-current-fmt-compiled nil)
|
||||
(let ((start 0))
|
||||
(while (string-match
|
||||
"%\\([0-9]+\\)?\\([[:alnum:]_-]+\\)\\(?:(\\([^)]+\\))\\)?\
|
||||
\\(?:{\\([^}]+\\)}\\)?\\s-*"
|
||||
fmt start)
|
||||
(rx "%"
|
||||
(optional (group (+ digit)))
|
||||
(group (one-or-more (in alnum "_-")))
|
||||
(optional "(" (group (zero-or-more (not (any ")")))) ")")
|
||||
(optional "{" (group (zero-or-more (not (any "}")))) "}")
|
||||
(zero-or-more space))
|
||||
fmt start)
|
||||
(setq start (match-end 0))
|
||||
(let* ((width (and (match-end 1) (string-to-number (match-string 1 fmt))))
|
||||
(prop (match-string-no-properties 2 fmt))
|
||||
(title (or (match-string-no-properties 3 fmt) prop))
|
||||
(operator (match-string-no-properties 4 fmt)))
|
||||
(title (or (org-string-nw-p (match-string-no-properties 3 fmt)) prop))
|
||||
(operator (org-string-nw-p (match-string-no-properties 4 fmt))))
|
||||
(push (if (not operator) (list (upcase prop) title width nil nil)
|
||||
(let (printf)
|
||||
(when (string-match ";" operator)
|
||||
|
@ -90,7 +90,12 @@
|
||||
(should
|
||||
(equal `(("ITEM" "ITEM" nil "+" "%.1f"))
|
||||
(org-columns-compile-format
|
||||
"%ITEM{+;%.1f}"))))
|
||||
"%ITEM{+;%.1f}")))
|
||||
(should
|
||||
;; Bug https://list.orgmode.org/orgmode/877ccczt83.fsf@gmail.com/
|
||||
(equal '(("ITEM" "ITEM" nil "X" nil))
|
||||
(org-columns-compile-format
|
||||
"%ITEM(){X}"))))
|
||||
|
||||
(ert-deftest test-org-colview/substring-below-width ()
|
||||
"Test `org-columns--truncate-below-width'."
|
||||
|
Loading…
Reference in New Issue
Block a user