* doc/org-manual.org (Plain lists in Texinfo export): Document the :texinfo-compact-itemx export option and variable org-texinfo-compact-itemx. * 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 | 6 +++++- lisp/ox-texinfo.el | 35 ++++++++++++++++++++++++++--------- 2 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org index d7d81c1d4..7cd93ab0e 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -15307,7 +15307,11 @@ 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 +Support for this compact syntax can also be enabled for all lists in a +file using the =compat-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 describe below, the other is described in [[*Special blocks in Texinfo export]]. diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index 673084859..dba93e318 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -119,8 +119,8 @@ (org-export-define-backend 'texinfo (: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,19 @@ (defcustom org-texinfo-format-inlinetask-function :group 'org-export-texinfo :type 'function) +;;;; Itemx + +(defcustom org-texinfo-compact-itemx nil + "Non-nil means certain items in description list are transcoded using `@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) + ;;;; Compilation (defcustom org-texinfo-info-process '("makeinfo --no-split %f") @@ -614,7 +627,7 @@ (defun org-texinfo--separate-definitions (tree _backend info) (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 +676,7 @@ (defun org-texinfo--split-plain-list (plain-list items) (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 +687,9 @@ (defun org-texinfo--massage-key-item (plain-list item args) 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 +716,9 @@ (defun org-texinfo--massage-key-item (plain-list item args) (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 +1154,9 @@ (defun org-texinfo-item (item contents info) (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) -- 2.35.1