branch: externals/org commit 98588ebfe1c5e80329aa8720116c6b548ddcacfe Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Nicolas Goaziou <m...@nicolasgoaziou.fr>
ox-texinfo: Allow enabling compact syntax for @itemx per file * doc/org-manual.org (Plain lists in Texinfo export): Document the :texinfo-compact-itemx export option and variable org-texinfo-compact-itemx. (Texinfo specific properties): Mention new export option and variable. * lisp/ox-texinfo.el: Add org-texinfo-compact-itemx to the :options-alist of the texinfo backend. * lisp/ox-texinfo.el (org-texinfo-compact-itemx): New option. * lisp/ox-texinfo.el (org-texinfo--massage-key-item): Add INFO argument and use the :texinfo-compact-itemx export option. * lisp/ox-texinfo.el (org-texinfo-item): Use the :texinfo-compact-itemx export option. --- doc/org-manual.org | 14 +++++++++----- lisp/ox-texinfo.el | 36 +++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index 71ad747104..b8c61fddd4 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -15307,11 +15307,14 @@ example is transcoded to the same output as above. This is the common text for variables foo and bar. #+end_example -Likewise, the Texinfo export back-end supports two approaches to -writing Texinfo definition commands (see [[info:texinfo::Definition -Commands]]). One of them uses description lists and is described below, -the other relies on special blocks (see [[*Special blocks in Texinfo -export]]). +Support for this compact syntax can also be enabled for all lists in +a file using the =compact-itemx= export option, or globally using the +variable ~org-texinfo-compact-itemx~. + +The Texinfo export back-end also supports two approaches to writing +Texinfo definition commands (see [[info:texinfo::Definition Commands]]). +One of them uses description lists and is described below, the other +relies on special blocks (see [[*Special blocks in Texinfo export]]). Items in a description list in a Org file that begin with =Function:= or certain other prefixes are converted using Texinfo definition @@ -16333,6 +16336,7 @@ Settings]]), however, override everything. | ~:texinfo-active-timestamp-format~ | ~org-texinfo-active-timestamp-format~ | | ~:texinfo-classes~ | ~org-texinfo-classes~ | | ~:texinfo-class~ | ~org-texinfo-default-class~ | +| ~:texinfo-compact-itemx | ~org-texinfo-compact-itemx~ | | ~:texinfo-table-default-markup~ | ~org-texinfo-table-default-markup~ | | ~:texinfo-diary-timestamp-format~ | ~org-texinfo-diary-timestamp-format~ | | ~:texinfo-filename~ | ~org-texinfo-filename~ | diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index 6730848593..a01bb268c7 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -119,8 +119,8 @@ (:texinfo-table-default-markup nil nil org-texinfo-table-default-markup) (:texinfo-text-markup-alist nil nil org-texinfo-text-markup-alist) (:texinfo-format-drawer-function nil nil org-texinfo-format-drawer-function) - (:texinfo-format-inlinetask-function nil nil org-texinfo-format-inlinetask-function))) - + (:texinfo-format-inlinetask-function nil nil org-texinfo-format-inlinetask-function) + (:texinfo-compact-itemx nil "compact-itemx" org-texinfo-compact-itemx))) ;;; User Configurable Variables @@ -355,6 +355,20 @@ The function should return the string to be exported." :group 'org-export-texinfo :type 'function) +;;;; Itemx + +(defcustom org-texinfo-compact-itemx nil + "Non-nil means certain items in description list become `@itemx'. + +If this is non-nil and an item in a description list has no +body but is followed by another item, then the second item is +transcoded to `@itemx'. See info node `(org)Plain lists in +Texinfo export' for how to enable this for individual lists." + :package-version '(Org . "9.6") + :group 'org-export-texinfo + :type 'boolean + :safe t) + ;;;; Compilation (defcustom org-texinfo-info-process '("makeinfo --no-split %f") @@ -614,7 +628,7 @@ Return new tree." (org-texinfo--split-definition plain-list item cmd args)) (t (when args - (org-texinfo--massage-key-item plain-list item args)) + (org-texinfo--massage-key-item plain-list item args info)) (push item items))))) (unless (org-element-contents plain-list) (org-element-extract-element plain-list))))) @@ -663,7 +677,7 @@ new plain list." (mapc #'org-element-extract-element items)) plain-list)) -(defun org-texinfo--massage-key-item (plain-list item args) +(defun org-texinfo--massage-key-item (plain-list item args info) "In PLAIN-LIST modify ITEM based on ARGS. Reformat ITEM's tag property and determine the arguments for the @@ -674,7 +688,9 @@ If PLAIN-LIST is a description list whose `:compact' attribute is non-nil and ITEM has no content but is followed by another item, then store the `@findex' and `@kindex' values in the next item. If the previous item stored its respecive values in this item, -then move them to the next item." +then move them to the next item. + +INFO is a plist used as a communication channel." (let ((key nil) (cmd nil)) (if (string-match (rx (+ " ") @@ -701,8 +717,9 @@ then move them to the next item." (setq kindex (nconc kindex (list key)))) (cond ((and next-item - (org-not-nil - (org-export-read-attribute :attr_texinfo plain-list :compact)) + (or (plist-get info :texinfo-compact-itemx) + (org-not-nil + (org-export-read-attribute :attr_texinfo plain-list :compact))) (not (org-element-contents item)) (eq 1 (org-element-property :post-blank item))) (org-element-put-property next-item :findex findex) @@ -1138,8 +1155,9 @@ contextual information." (let* ((tag (org-element-property :tag item)) (plain-list (org-element-property :parent item)) (compact (and (eq (org-element-property :type plain-list) 'descriptive) - (org-not-nil (org-export-read-attribute - :attr_texinfo plain-list :compact)))) + (or (plist-get info :texinfo-compact-itemx) + (org-not-nil (org-export-read-attribute + :attr_texinfo plain-list :compact))))) (previous-item nil)) (when (and compact (org-export-get-next-element item info)