diff --git a/doc/org.texi b/doc/org.texi index 842b30853..fafa93b36 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -12977,7 +12977,7 @@ an Info file. Export as a Texinfo file. For an Org file, @file{myfile.org}, the resulting file will be @file{myfile.texi}. The file will be overwritten without warning. -@orgcmd{C-c C-e m M,org-texinfo-export-to-info} +@orgcmd{C-c C-e i i,org-texinfo-export-to-info} Export to Texinfo and then process to an Info file@footnote{By setting @code{org-texinfo-info-process}, it is possible to generate other formats, including DocBook.}. @@ -13102,7 +13102,15 @@ an appendix, independently on its level and the class used. Each regular sectioning structure creates a menu entry, named after the heading. You can provide a different, e.g., shorter, title in @code{:ALT_TITLE:} property (@pxref{Table of contents}). Optionally, you can -specify a description for the item in @code{:DESCRIPTION:} property. +specify a description for the item in @code{:DESCRIPTION:} property. E.g., + +@example +* Controlling Screen Display + :PROPERTIES: + :ALT_TITLE: Display + :DESCRIPTION: Controlling Screen Display + :END: +@end example @node Indices @subsection Indices @@ -13168,9 +13176,8 @@ written just above the list or table. In Texinfo output, description lists appear as two-column tables, using the default command @code{@@table}. You can use @code{@@ftable} or -@code{@@vtable}@footnote{For more information, please refer to -@inforef{Two-column Tables,,texinfo}.} instead with @code{:table-type} -attribute. +@code{@@vtable}@footnote{For more information, @inforef{Two-column +Tables,,texinfo}.} instead with @code{:table-type} attribute. @vindex org-texinfo-def-table-markup In any case, these constructs require a highlighting command for entries in diff --git a/lisp/org.el b/lisp/org.el index 2b3d00a7e..649808c03 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -6257,12 +6257,20 @@ Use `org-reduced-level' to remove the effect of `org-odd-levels'." (defsubst org-re-property (property &optional literal allow-null) "Return a regexp matching a PROPERTY line. - Match group 3 will be set to the value if it exists." - (concat "^\\(?4:[ \t]*\\)\\(?1::\\(?2:" - (if literal property (regexp-quote property)) - "\\):\\)\\(?:[ \t]+\\(?3:[^ \t\r\n].*?\\)\\)" - (and allow-null "?") - "\\(?5:[ \t]*\\)$")) + +When optional argument LITERAL is non-nil, do not quote PROPERTY. +This is useful when PROPERTY is a regexp. When ALLOW-NULL is +non-nil, match properties even without a value. + +Match group 3 is set to the value when it exists. If there is no +value and ALLOW-NULL is non-nil, it is set to the empty string." + (concat + "^\\(?4:[ \t]*\\)" + (format "\\(?1::\\(?2:%s\\):\\)" + (if literal property (regexp-quote property))) + (if allow-null + "\\(?:\\(?3:$\\)\\|[ \t]+\\(?3:.*?\\)\\)\\(?5:[ \t]*\\)$" + "[ \t]+\\(?3:[^ \r\t\n]+.*?\\)\\(?5:[ \t]*\\)$"))) (defconst org-property-re (org-re-property ".*?" 'literal t) @@ -22468,9 +22476,8 @@ Alignment is done according to `org-property-format', which see." (looking-at org-property-re)) (replace-match (concat (match-string 4) - (if (match-string 3) - (format org-property-format (match-string 1) (match-string 3)) - (match-string 1))) + (org-trim + (format org-property-format (match-string 1) (match-string 3)))) t t))) (defun org-indent-line () diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 6fb8db835..9b1ca7711 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1587,7 +1587,7 @@ e^{i\\pi}+1=0 (org-element-type (org-element-at-point))))) ;; Accept empty properties. (should - (equal '(("foo" "value") ("bar" nil)) + (equal '(("foo" "value") ("bar" "")) (org-test-with-temp-text ":PROPERTIES:\n:foo: value\n:bar:\n:END:" (org-element-map (org-element-parse-buffer) 'node-property (lambda (p)