emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [patch, ox] suppress title
@ 2015-02-11  0:38 Rasmus
  2015-02-11 23:09 ` Nicolas Goaziou
  0 siblings, 1 reply; 6+ messages in thread
From: Rasmus @ 2015-02-11  0:38 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 444 bytes --]

Hi,

Sometime when requiring custom formatting of the header for a document, it
would be nice to be able to use #+TITLE without triggering the insertion
of the tile (e.g. \maketitle in latex and <h1>title</h1> in ox-html).  For
instance, one might have special org-html-preamble code.  This patch adds
an "#+OPTIONS: title:{nil,t}" option.

Any objections?

Thanks,
Rasmus

-- 
If you can mix business and politics wonderful things can happen!

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-Optional-export-of-title.patch --]
[-- Type: text/x-diff, Size: 11885 bytes --]

From 94a3415fecb3976edc4fa3d4a5078a33774326ae Mon Sep 17 00:00:00 2001
From: Rasmus <rasmus@gmx.us>
Date: Wed, 11 Feb 2015 00:09:39 +0100
Subject: [PATCH] ox: Optional export of title

* ox.el (org-export-with-title): New variable.
* ox (org-export-options-alist),
  ox-ascii.el (org-ascii-template--document-title),
  ox-beamer.el (org-beamer-template), ox-html.el (org-html-template),
  ox-latex.el (org-latex-template), ox-man.el (org-man-template),
  ox-odt.el (org-odt-template), ox-org.el (org-org-template),
  ox-publish.el (org-publish-project-alist),
  ox-texinfo.el (org-texinfo-template),
  ox-groff.el (org-groff--mt-head): Use new variable.
* ox-koma-letter.el (org-koma-letter-use-title): Mark obsolete.
* test-ox.el (test-org-export/parse-option-keyword): Add :with-title.

This is useful in e.g. ox-html where title can be set via
`org-html-preamble-template' or when using the {{{title}}}-macro.
---
 contrib/lisp/ox-groff.el       |  4 +++-
 contrib/lisp/ox-koma-letter.el | 14 +++-----------
 lisp/ox-ascii.el               |  4 +++-
 lisp/ox-beamer.el              |  3 ++-
 lisp/ox-html.el                |  7 ++++---
 lisp/ox-latex.el               |  3 ++-
 lisp/ox-man.el                 |  3 ++-
 lisp/ox-odt.el                 |  3 ++-
 lisp/ox-org.el                 |  3 ++-
 lisp/ox-publish.el             |  3 ++-
 lisp/ox-texinfo.el             | 11 ++++++-----
 lisp/ox.el                     | 10 ++++++++++
 testing/lisp/test-ox.el        |  4 ++--
 13 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/contrib/lisp/ox-groff.el b/contrib/lisp/ox-groff.el
index b618395..31b4e0f 100644
--- a/contrib/lisp/ox-groff.el
+++ b/contrib/lisp/ox-groff.el
@@ -563,7 +563,9 @@ See `org-groff-text-markup-alist' for details."
       (t (format ".AF \"%s\" \n" (or org-groff-organization "")))))
 
    ;; 2. Title
-   (let ((subtitle1 (plist-get attr :subtitle1))
+   (let ((title (if (plist-get info :with-title)
+		    title ""))
+	 (subtitle1 (plist-get attr :subtitle1))
          (subtitle2 (plist-get attr :subtitle2)))
 
      (cond
diff --git a/contrib/lisp/ox-koma-letter.el b/contrib/lisp/ox-koma-letter.el
index de40fe6..ed556a8 100644
--- a/contrib/lisp/ox-koma-letter.el
+++ b/contrib/lisp/ox-koma-letter.el
@@ -338,16 +338,6 @@ This option can also be set with the OPTIONS keyword, e.g.:
   :group 'org-export-koma-letter
   :type 'boolean)
 
-(defcustom org-koma-letter-use-title t
-  "Non-nil means use a title in the letter if present.
-This option can also be set with the OPTIONS keyword,
-e.g. \"title:nil\".
-
-See also `org-koma-letter-prefer-subject' for the handling of
-title versus subject."
-  :group 'org-export-koma-letter
-  :type 'boolean)
-
 (defcustom org-koma-letter-default-class "default-koma-letter"
   "Default class for `org-koma-letter'.
 The value must be a member of `org-latex-classes'."
@@ -383,6 +373,9 @@ was not present."
 (defvar org-koma-letter-special-contents nil
   "Holds special content temporarily.")
 
+(make-obsolete-variable 'org-koma-letter-use-title
+			'Org-export-with-title
+			"25.1" 'set)
 
 \f
 ;;; Define Back-End
@@ -418,7 +411,6 @@ was not present."
     (:with-phone nil "phone" org-koma-letter-use-phone)
     (:with-place nil "place" org-koma-letter-use-place)
     (:with-subject nil "subject" org-koma-letter-subject-format)
-    (:with-title nil "title" org-koma-letter-use-title)
     (:with-title-as-subject nil "title-subject" org-koma-letter-prefer-subject)
     ;; Special properties non-nil when a setting happened in buffer.
     ;; They are used to prioritize in-buffer settings over "lco"
diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el
index f7bc319..c4b34cb 100644
--- a/lisp/ox-ascii.el
+++ b/lisp/ox-ascii.el
@@ -969,7 +969,9 @@ INFO is a plist used as a communication channel."
 	 ;; Links in the title will not be resolved later, so we make
 	 ;; sure their path is located right after them.
 	 (info (org-combine-plists info '(:ascii-links-to-notes nil)))
-	 (title (org-export-data (plist-get info :title) info))
+	 (title (if (plist-get info :with-title)
+		    (org-export-data (plist-get info :title) info)
+		  ""))
 	 (author (and (plist-get info :with-author)
 		      (let ((auth (plist-get info :author)))
 			(and auth (org-export-data auth info)))))
diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el
index f53b359..1d23746 100644
--- a/lisp/ox-beamer.el
+++ b/lisp/ox-beamer.el
@@ -877,7 +877,8 @@ holding export options."
      "\\begin{document}\n\n"
      ;; 10. Title command.
      (org-element-normalize-string
-      (cond ((string= "" title) nil)
+      (cond ((null (plist-get info :with-title)) nil)
+	    ((string= "" title) nil)
 	    ((not (stringp org-latex-title-command)) nil)
 	    ((string-match "\\(?:[^%]\\|^\\)%s"
 			   org-latex-title-command)
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 3733319..50df520 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -1848,9 +1848,10 @@ holding export options."
    (let ((div (assq 'content (plist-get info :html-divs))))
      (format "<%s id=\"%s\">\n" (nth 1 div) (nth 2 div)))
    ;; Document title.
-   (let ((title (plist-get info :title)))
-     (format "<h1 class=\"title\">%s</h1>\n"
-	     (org-export-data (or title "") info)))
+   (when (plist-get info :with-title)
+       (let ((title (plist-get info :title)))
+	 (format "<h1 class=\"title\">%s</h1>\n"
+		 (org-export-data (or title "") info))))
    contents
    (format "</%s>\n" (nth 1 (assq 'content (plist-get info :html-divs))))
    ;; Postamble.
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index d7514aa..566c870 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1260,7 +1260,8 @@ holding export options."
      ;; Title command.
      (let ((command (plist-get info :latex-title-command)))
        (org-element-normalize-string
-	(cond ((string= "" title) nil)
+	(cond ((null (plist-get info :with-title)) nil)
+	      ((string= "" title) nil)
 	      ((not (stringp command)) nil)
 	      ((string-match "\\(?:[^%]\\|^\\)%s" command)
 	       (format command title))
diff --git a/lisp/ox-man.el b/lisp/ox-man.el
index 4f3991b..59d107f 100644
--- a/lisp/ox-man.el
+++ b/lisp/ox-man.el
@@ -311,7 +311,8 @@ This function shouldn't be used for floats.  See
   "Return complete document string after Man conversion.
 CONTENTS is the transcoded contents string.  INFO is a plist
 holding export options."
-  (let* ((title (org-export-data (plist-get info :title) info))
+  (let* ((title (when (plist-get :with-title)
+		  (org-export-data (plist-get info :title) info)))
         (attr (read (format "(%s)"
                             (mapconcat
                              #'identity
diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el
index aff9edd..85bc191 100644
--- a/lisp/ox-odt.el
+++ b/lisp/ox-odt.el
@@ -1508,7 +1508,8 @@ original parsed data.  INFO is a plist holding export options."
 
       ;; Preamble - Title, Author, Date etc.
       (insert
-       (let* ((title (org-export-data (plist-get info :title) info))
+       (let* ((title (and (plist-get info :with-title)
+			  (org-export-data (plist-get info :title) info)))
 	      (author (and (plist-get info :with-author)
 			   (let ((auth (plist-get info :author)))
 			     (and auth (org-export-data auth info)))))
diff --git a/lisp/ox-org.el b/lisp/ox-org.el
index 5f2d126..eb5ce11 100644
--- a/lisp/ox-org.el
+++ b/lisp/ox-org.el
@@ -164,7 +164,8 @@ as a communication channel."
 			(concat "#+OPTIONS: "
 				(org-element-property :value k)))))
 	       "\n"))
-   (format "#+TITLE: %s\n" (org-export-data (plist-get info :title) info))
+   (and (plist-get info :with-title)
+	(format "#+TITLE: %s\n" (org-export-data (plist-get info :title) info)))
    (and (plist-get info :with-date)
 	(let ((date (org-export-data (org-export-get-date info) info)))
 	  (and (org-string-nw-p date)
diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el
index 49b46b1..3cca0c9 100644
--- a/lisp/ox-publish.el
+++ b/lisp/ox-publish.el
@@ -175,6 +175,7 @@ included.  See the back-end documentation for more information.
   :with-footnotes           `org-export-with-footnotes'
   :with-inlinetasks         `org-export-with-inlinetasks'
   :with-latex               `org-export-with-latex'
+  :with-planning            `org-export-with-planning'
   :with-priority            `org-export-with-priority'
   :with-properties          `org-export-with-properties'
   :with-smart-quotes        `org-export-with-smart-quotes'
@@ -186,7 +187,7 @@ included.  See the back-end documentation for more information.
   :with-tags                `org-export-with-tags'
   :with-tasks               `org-export-with-tasks'
   :with-timestamps          `org-export-with-timestamps'
-  :with-planning            `org-export-with-planning'
+  :with-title               `org-export-with-title'
   :with-todo-keywords       `org-export-with-todo-keywords'
 
 The following properties may be used to control publishing of
diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el
index 0e33008..68ebd19 100644
--- a/lisp/ox-texinfo.el
+++ b/lisp/ox-texinfo.el
@@ -568,11 +568,12 @@ holding export options."
      ;; Title
      "@finalout\n"
      "@titlepage\n"
-     (format "@title %s\n" (or (plist-get info :texinfo-printed-title) title))
-     (let ((subtitle (plist-get info :subtitle)))
-       (and subtitle
-	    (org-element-normalize-string
-	     (replace-regexp-in-string "^" "@subtitle " subtitle))))
+     (when (plist-get info :with-title)
+       (format "@title %s\n" (or (plist-get info :texinfo-printed-title) title))
+       (let ((subtitle (plist-get info :subtitle)))
+	 (and subtitle
+	      (org-element-normalize-string
+	       (replace-regexp-in-string "^" "@subtitle " subtitle)))))
      (when (plist-get info :with-author)
        (concat
 	;; Primary author.
diff --git a/lisp/ox.el b/lisp/ox.el
index cdfc8ed..ac4fde9 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -137,6 +137,7 @@
     (:with-tags nil "tags" org-export-with-tags)
     (:with-tasks nil "tasks" org-export-with-tasks)
     (:with-timestamps nil "<" org-export-with-timestamps)
+    (:with-title nil "title" org-export-with-title)
     (:with-todo-keywords nil "todo" org-export-with-todo-keywords))
   "Alist between export properties and ways to set them.
 
@@ -743,6 +744,15 @@ e.g. \"tasks:nil\"."
 	  (repeat :tag "Specific TODO keywords"
 		  (string :tag "Keyword"))))
 
+(defcustom org-export-with-title t
+  "Non-nil means print title into the exported file.
+This option can also be set with the OPTIONS keyword,
+e.g. \"title:nil\"."
+  :group 'org-export-general
+  :version "25.1"
+  :package-version '(Org . 8.3)
+  :type 'boolean)
+
 (defcustom org-export-time-stamp-file t
   "Non-nil means insert a time stamp into the exported file.
 The time stamp shows when the file was created.  This option can
diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el
index 79b5c69..4a74ab3 100644
--- a/testing/lisp/test-ox.el
+++ b/testing/lisp/test-ox.el
@@ -111,7 +111,7 @@ variable, and communication channel under `info'."
     (org-export--parse-option-keyword
      "H:1 num:t \\n:t timestamp:t arch:t author:t creator:t d:t email:t
  *:t e:t ::t f:t pri:t -:t ^:t toc:t |:t tags:t tasks:t <:t todo:t inline:nil
- stat:t")
+ stat:t title:t")
     '(:headline-levels
       1 :preserve-breaks t :section-numbers t :time-stamp-file t
       :with-archived-trees t :with-author t :with-creator t :with-drawers t
@@ -119,7 +119,7 @@ variable, and communication channel under `info'."
       :with-footnotes t :with-inlinetasks nil :with-priority t
       :with-special-strings t :with-statistics-cookies t :with-sub-superscript t
       :with-toc t :with-tables t :with-tags t :with-tasks t :with-timestamps t
-      :with-todo-keywords t)))
+      :with-title t :with-todo-keywords t)))
   ;; Test some special values.
   (should
    (equal
-- 
2.3.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [patch, ox] suppress title
  2015-02-11  0:38 [patch, ox] suppress title Rasmus
@ 2015-02-11 23:09 ` Nicolas Goaziou
  2015-02-12  0:10   ` Rasmus
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas Goaziou @ 2015-02-11 23:09 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

Hello,

Rasmus <rasmus@gmx.us> writes:


> Sometime when requiring custom formatting of the header for a document, it
> would be nice to be able to use #+TITLE without triggering the insertion
> of the tile (e.g. \maketitle in latex and <h1>title</h1> in ox-html).  For
> instance, one might have special org-html-preamble code.  This patch adds
> an "#+OPTIONS: title:{nil,t}" option.

Nice, thanks. The usual nitpicking follows.

> -   (let ((subtitle1 (plist-get attr :subtitle1))
> +   (let ((title (if (plist-get info :with-title)
> +		    title ""))

Nitpick: 

  (title (if (plist-get info :with-title) title ""))

or

  (title (if (plist-get info :with-title) title 
          ""))

or

  (title (if (plist-get info :with-title) 
             title 
          ""))


> +(make-obsolete-variable 'org-koma-letter-use-title
> +			'Org-export-with-title

Typo.

> +      (cond ((null (plist-get info :with-title)) nil)

Nitpick:

  (not (plist-get info :with-title))

This is considered as a boolean, not as a list.

> -	(cond ((string= "" title) nil)
> +	(cond ((null (plist-get info :with-title)) nil)

See above.

>  (defcustom org-export-time-stamp-file t
>    "Non-nil means insert a time stamp into the exported file.
>  The time stamp shows when the file was created.  This option can
> diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el
> index 79b5c69..4a74ab3 100644
> --- a/testing/lisp/test-ox.el
> +++ b/testing/lisp/test-ox.el
> @@ -111,7 +111,7 @@ variable, and communication channel under `info'."
>      (org-export--parse-option-keyword
>       "H:1 num:t \\n:t timestamp:t arch:t author:t creator:t d:t email:t
>   *:t e:t ::t f:t pri:t -:t ^:t toc:t |:t tags:t tasks:t <:t todo:t inline:nil
> - stat:t")
> + stat:t title:t")
>      '(:headline-levels
>        1 :preserve-breaks t :section-numbers t :time-stamp-file t
>        :with-archived-trees t :with-author t :with-creator t :with-drawers t
> @@ -119,7 +119,7 @@ variable, and communication channel under `info'."
>        :with-footnotes t :with-inlinetasks nil :with-priority t
>        :with-special-strings t :with-statistics-cookies t :with-sub-superscript t
>        :with-toc t :with-tables t :with-tags t :with-tasks t :with-timestamps t
> -      :with-todo-keywords t)))
> +      :with-title t :with-todo-keywords t)))
>    ;; Test some special values.
>    (should
>     (equal

Could you also add a test in `test-org-export/handle-options'?

This also requires a proper ORG-NEWS entry.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, ox] suppress title
  2015-02-11 23:09 ` Nicolas Goaziou
@ 2015-02-12  0:10   ` Rasmus
  2015-02-12  0:37     ` Nicolas Goaziou
  0 siblings, 1 reply; 6+ messages in thread
From: Rasmus @ 2015-02-12  0:10 UTC (permalink / raw)
  To: emacs-orgmode

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Could you also add a test in `test-org-export/handle-options'?

How would I make this test proper?  I can't use org-test-default-backend
since it only loads the transcoder functions, not the template which is
where I disable the title.  I can think of the following or writing a mini
template that just check :with-title, but that feels like cheating...

  ;; Test title.
  (should
   (equal ""
	  (org-test-with-temp-text "#+TITLE: foo"
	    (org-export-as
	     (org-export-create-backend
	      :transcoders
	      '((title    .  org-org-identity)
		(template . org-org-template)))
	     nil nil nil
	     '(:with-title nil :with-creator nil
			   :with-author nil :with-date nil
			   :time-stamp-file nil)))))
  (should
   (equal "#+TITLE: foo"
	  (org-trim
	   (org-test-with-temp-text
	       "#+TITLE: foo"
	     (org-export-as
	      (org-export-create-backend
	       :transcoders
	       '((title    .  org-org-identity)
		 (template . org-org-template)))
	      nil nil nil
	      '(:with-title t :with-creator nil
			    :with-author nil :with-date nil
			    :time-stamp-file nil))))))

-- 
With monopolies the cake is a lie!

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, ox] suppress title
  2015-02-12  0:10   ` Rasmus
@ 2015-02-12  0:37     ` Nicolas Goaziou
  2015-02-12  0:47       ` Rasmus
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas Goaziou @ 2015-02-12  0:37 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

Rasmus <rasmus@gmx.us> writes:

> Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
>
>> Could you also add a test in `test-org-export/handle-options'?
>
> How would I make this test proper?

You can't, my bad. It is obviously handled at the back-end level.

Regards,

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, ox] suppress title
  2015-02-12  0:37     ` Nicolas Goaziou
@ 2015-02-12  0:47       ` Rasmus
  2015-02-12  1:26         ` Vladimir Lomov
  0 siblings, 1 reply; 6+ messages in thread
From: Rasmus @ 2015-02-12  0:47 UTC (permalink / raw)
  To: emacs-orgmode

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Rasmus <rasmus@gmx.us> writes:
>
>> Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
>>
>>> Could you also add a test in `test-org-export/handle-options'?
>>
>> How would I make this test proper?
>
> You can't, my bad. It is obviously handled at the back-end level.

OK pushed without that then.  e6fcc853.

—Rasmus

-- 
Slowly unravels in a ball of yarn and the devil collects it

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, ox] suppress title
  2015-02-12  0:47       ` Rasmus
@ 2015-02-12  1:26         ` Vladimir Lomov
  0 siblings, 0 replies; 6+ messages in thread
From: Vladimir Lomov @ 2015-02-12  1:26 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 655 bytes --]

Hello,
** Rasmus [2015-02-12 01:47:06 +0100]:

> Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
> 
>> Rasmus <rasmus@gmx.us> writes:
>>
>>> Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
>>>
>>>> Could you also add a test in `test-org-export/handle-options'?
>>>
>>> How would I make this test proper?
>>
>> You can't, my bad. It is obviously handled at the back-end level.
> 
> OK pushed without that then.  e6fcc853.

Please consider the attached small patch for org.texi

P.S. It would be nice to test not only changes in *.el files but also
test building process.

---
WBR, Vladimir Lomov

-- 
The only thing worse than X Windows: (X Windows) - X

[-- Attachment #2: org-mode-doc.patch --]
[-- Type: text/x-diff, Size: 349 bytes --]

diff --git a/doc/org.texi b/doc/org.texi
index 406579b..f02fca8 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -10818,7 +10818,6 @@ Toggle inclusion of TODO keywords into exported text
 @item |:
 @vindex org-export-with-tables
 Toggle inclusion of tables (@code{org-export-with-tables}).
-@end table
 
 @item title:
 @vindex org-export-with-titles

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-02-12  1:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-11  0:38 [patch, ox] suppress title Rasmus
2015-02-11 23:09 ` Nicolas Goaziou
2015-02-12  0:10   ` Rasmus
2015-02-12  0:37     ` Nicolas Goaziou
2015-02-12  0:47       ` Rasmus
2015-02-12  1:26         ` Vladimir Lomov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).