emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] suggestion: display of #+TITLE


From: Thomas S. Dye
Subject: Re: [Orgmode] suggestion: display of #+TITLE
Date: Mon, 29 Mar 2010 16:04:15 -1000

Hi Dan,

What a pleasant surprise to see the tastefully displayed #+Title:, # +Author:, #+Email: and #+Date: after I pulled from git earlier today.

What's next, org-mode stylesheets?

All the best,
Tom

On Mar 27, 2010, at 4:52 PM, Dan Davison wrote:

Thanks Scot, here's the final version of my proposed patch (no change in
outward appearance from previous version).

By default, title, author, date and email lines appear in dark blue with the initial keywords greyed out. The title is in a larger font than the
others. To change that appearance, customise the faces

org-document-title
org-document-info
org-document-info-keyword

In addition, the variable org-hidden-keywords can be used to make any of those keywords disappear. You can use the customize interface for this,
or e.g.

(setq org-hidden-keywords '(title date))

Dan

--8<---------------cut here---------------start------------->8---
diff --git a/lisp/org-faces.el b/lisp/org-faces.el
index e336b3c..8ec7ce1 100644
--- a/lisp/org-faces.el
+++ b/lisp/org-faces.el
@@ -468,6 +468,34 @@ changes."
  :group 'org-faces
  :version "22.1")

+(defface org-document-title
+ '((((class color) (background light)) (:foreground "midnight blue" :weight bold :height 1.44)) + (((class color) (background dark)) (:foreground "pale turquoise" :weight bold :height 1.44))
+    (t (:weight bold :height 1.44)))
+ "Face for document title, i.e. that which follows the #+TITLE: keyword."
+  :group 'org-faces)
+
+(defface org-document-info
+ '((((class color) (background light)) (:foreground "midnight blue")) + (((class color) (background dark)) (:foreground "pale turquoise"))
+    (t nil))
+  "Face for document date, author and email; i.e. that which
+follows a #+DATE:, #+AUTHOR: or #+EMAIL: keyword."
+  :group 'org-faces)
+
+(defface org-document-info-keyword
+  (org-compatible-face 'shadow
+    '((((class color grayscale) (min-colors 88) (background light))
+       (:foreground "grey50"))
+      (((class color grayscale) (min-colors 88) (background dark))
+       (:foreground "grey70"))
+      (((class color) (min-colors 8) (background light))
+       (:foreground "green"))
+      (((class color) (min-colors 8) (background dark))
+       (:foreground "yellow"))))
+  "Face for #+TITLE:, #+AUTHOR:, #+EMAIL: and #+DATE: keywords."
+  :group 'org-faces)
+
(defface org-block
  (org-compatible-face 'shadow
    '((((class color grayscale) (min-colors 88) (background light))
diff --git a/lisp/org.el b/lisp/org.el
index dad8649..e30c49a 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -2975,6 +2975,17 @@ lines to the buffer:
  :group 'org-font-lock
  :type 'boolean)

+(defcustom org-hidden-keywords nil
+ "List of keywords that should be hidden when typed in the org buffer.
+For example, add #+TITLE to this list in order to make the
+document title appear in the buffer without the initial #+TITLE:
+keyword."
+  :group 'org-font-lock
+  :type '(set (const :tag "#+AUTHOR" author)
+             (const :tag "#+DATE" date)
+             (const :tag "#+EMAIL" email)
+             (const :tag "#+TITLE"  title)))
+
(defcustom org-fontify-done-headline nil
  "Non-nil means change the face of a headline if it is marked DONE.
Normally, only the TODO/DONE keyword indicates the state of a headline.
@@ -4681,6 +4692,17 @@ will be prompted for."
               ((string= block-type "verse")
                (add-text-properties beg1 end1 '(face org-verse))))
              t))
+          ((member dc1 '("title:" "author:" "email:" "date:"))
+           (add-text-properties
+            beg (match-end 3)
+            (if (member (intern (substring dc1 0 -1)) org-hidden-keywords)
+                '(font-lock-fontified t invisible t)
+              '(font-lock-fontified t face org-document-info-keyword)))
+           (add-text-properties
+            (match-beginning 6) (match-end 6)
+            (if (string-equal dc1 "title:")
+                '(font-lock-fontified t face org-document-title)
+              '(font-lock-fontified t face org-document-info))))
           ((not (member (char-after beg) '(?\  ?\t)))
            ;; just any other in-buffer setting, but not indented
            (add-text-properties
--8<---------------cut here---------------end--------------->8---


Scot Becker <address@hidden> writes:

I like it.  This is a great little piece of work.   Thanks a lot.

Scot


On Fri, Mar 26, 2010 at 3:34 AM, Dan Davison <address@hidden> wrote:

   Carsten, Scot --

   Scot Becker <address@hidden> writes:

Or what about---in the spirit of the 'hidden' outline stars---the option
   to set
"#+TITLE:" and friends in a 'barely visible' color, and in the 'standard'
   font
of the document, if that's possible.

OK, I understand that suddenly-disappearing text might be confusing. My intention was to help in the current efforts to avoid making org seem
   too "technical" to people coming from more mainstream software, by
   providing a clean document title. But OK, so magical hiding off by
   default. Scot's suggestion seems like a good intermediate
position. Below is a new version of the patch which follows that. I resisted the temptation to go crazy with the "barely visible"- ness, just the same as other dimmed text in org (archived, code, etc). An image is
   at

   http://www.princeton.edu/~ddavison/org-faces/
   Default-MidnightBlue-DimmedKeywords.png

 As sexy as it is, really hiding the
markup is a fair break from most (all?) of 'standard' org mode,

Right, apart from links I guess. Org users are used to sudden hiding
   behaviour on their part.

   [...]

On Wed, Mar 24, 2010 at 2:52 PM, Carsten Dominik <
   address@hidden>
wrote:

    Hi Dan,

    I think the patch is almost good.  I do like the larger face
    for the title, and I know that some themes also use larger faces
    for headlines.

    But I think we at least need a variable
    governing if the keyword will be made invisible or not.

   In addition to the new faces, I've introduced a new variable
org-hidden-keywords which is a list of special keywords to hide, with a
   customise interface. At the moment that allows for hiding
of #+TITLE, #+AUTHOR, #+DATE and #+EMAIL. By default all hiding is off.

   Dan

   --8<---------------cut here---------------start------------->8---
   diff --git a/lisp/org-faces.el b/lisp/org-faces.el
   index e336b3c..fc80e82 100644
   --- a/lisp/org-faces.el
   +++ b/lisp/org-faces.el
@@ -59,6 +59,19 @@ The foreground color of this face should be equal to the
   background
    color of the frame."
     :group 'org-faces)

   +(defface org-dim    ; similar to shadow
   +  (org-compatible-face 'shadow
+ '((((class color grayscale) (min-colors 88) (background light))
   +       (:foreground "grey50"))
+ (((class color grayscale) (min-colors 88) (background dark))
   +       (:foreground "grey70"))
   +      (((class color) (min-colors 8) (background light))
   +       (:foreground "green"))
   +      (((class color) (min-colors 8) (background dark))
   +       (:foreground "yellow"))))
   +  "Face used to de-emphasise text by dimming."
   +  :group 'org-faces)
   +
    (defface org-level-1 ;; originally copied from
   font-lock-function-name-face
     (org-compatible-face 'outline-1
'((((class color) (min-colors 88) (background light)) (:foreground
   "Blue1"))
   @@ -468,6 +481,41 @@ changes."
     :group 'org-faces
     :version "22.1")

   +(defface org-document-title
+ '((((class color) (background light)) (:foreground "midnight blue"
   :weight bold :height 1.44))
+ (((class color) (background dark)) (:foreground "steel blue" :weight
   bold :height 1.44))
   +    (t (:weight bold :height 1.44)))
+ "Face for document title, i.e. that which follows the # +TITLE: keyword."
   +  :group 'org-faces)
   +
   +(defface org-document-author
+ '((((class color) (background light)) (:foreground "midnight blue")) + (((class color) (background dark)) (:foreground "steel blue"))) + "Face for document author, i.e. that which follows the # +AUTHOR:
   keyword."
   +  :group 'org-faces)
   +
   +(defface org-document-email
   +  (org-compatible-face 'org-document-author '((t nil)))
+ "Face for document email, i.e. that which follows the # +EMAIL: keyword."
   +  :group 'org-faces)
   +
   +(defface org-document-date
   +  (org-compatible-face 'org-document-author '((t nil)))
+ "Face for document date, i.e. that which follows the #+DATE: keyword."
   +  :group 'org-faces)
   +
   +(org-copy-face 'org-dim 'org-document-title-keyword
   +  "Face for #+TITLE: keyword.")
   +
   +(org-copy-face 'org-dim 'org-document-author-keyword
   +  "Face for #+AUTHOR: keyword.")
   +
   +(org-copy-face 'org-dim 'org-document-email-keyword
   +  "Face for #+EMAIL: keyword.")
   +
   +(org-copy-face 'org-dim 'org-document-date-keyword
   +  "Face for #+DATE: keyword.")
   +
    (defface org-block
     (org-compatible-face 'shadow
'((((class color grayscale) (min-colors 88) (background light))
   diff --git a/lisp/org.el b/lisp/org.el
   index dad8649..4410f46 100644
   --- a/lisp/org.el
   +++ b/lisp/org.el
   @@ -2975,6 +2975,17 @@ lines to the buffer:
     :group 'org-font-lock
     :type 'boolean)

   +(defcustom org-hidden-keywords nil
+ "List of keywords that should be hidden when typed in the org buffer.
   +For example, add #+TITLE to this list in order to make the
   +document title appear in the buffer without the initial #+TITLE
   +keyword."
   +  :group 'org-font-lock
   +  :type '(set (const :tag "#+AUTHOR" author)
   +             (const :tag "#+DATE" date)
   +             (const :tag "#+EMAIL" email)
   +             (const :tag "#+TITLE"  title)))
   +
    (defcustom org-fontify-done-headline nil
"Non-nil means change the face of a headline if it is marked DONE. Normally, only the TODO/DONE keyword indicates the state of a headline.
   @@ -4681,6 +4692,42 @@ will be prompted for."
                 ((string= block-type "verse")
                  (add-text-properties beg1 end1 '(face org-verse))))
                t))
   +          ((equal dc1 "title:")
   +           (add-text-properties
   +            beg (match-end 3)
   +            (if (member 'title org-hidden-keywords)
   +                '(font-lock-fontified t invisible t)
+ '(font-lock-fontified t face org-document-title- keyword)))
   +           (add-text-properties
   +            (match-beginning 6) (match-end 6)
   +            '(font-lock-fontified t face org-document-title)))
   +          ((equal dc1 "author:")
   +           (add-text-properties
   +            beg (match-end 3)
   +            (if (member 'author org-hidden-keywords)
   +                '(font-lock-fontified t invisible t)
+ '(font-lock-fontified t face org-document-author- keyword)))
   +           (add-text-properties
   +            (match-beginning 6) (match-end 6)
   +            '(font-lock-fontified t face org-document-author)))
   +          ((equal dc1 "email:")
   +           (add-text-properties
   +            beg (match-end 3)
   +            (if (member 'email org-hidden-keywords)
   +                '(font-lock-fontified t invisible t)
+ '(font-lock-fontified t face org-document-email- keyword)))
   +           (add-text-properties
   +            (match-beginning 6) (match-end 6)
   +            '(font-lock-fontified t face org-document-email)))
   +          ((equal dc1 "date:")
   +           (add-text-properties
   +            beg (match-end 3)
   +            (if (member 'date org-hidden-keywords)
   +                '(font-lock-fontified t invisible t)
+ '(font-lock-fontified t face org-document-date- keyword)))
   +           (add-text-properties
   +            (match-beginning 6) (match-end 6)
   +            '(font-lock-fontified t face org-document-date)))
             ((not (member (char-after beg) '(?\  ?\t)))
              ;; just any other in-buffer setting, but not indented
              (add-text-properties
   --8<---------------cut here---------------end--------------->8---



    If you type "#+email:", for example, that string does disappear
without a trace, and that is very confusing. In fact, my preference
    would be to not make the keyword invisible.

    Thanks

    - Carsten


    On Mar 22, 2010, at 2:24 AM, Dan Davison wrote:


        Dan Davison <address@hidden> writes:


            Carsten Dominik <address@hidden> writes:


                On Mar 16, 2010, at 5:25 PM, Dan Davison wrote:


Might it be worth considering a special display for
   the #
                    +title line
                    in
                    org buffers?

                    Currently it is easy for the title to get buried
   among more
                    technical
                    configuration lines like #+options, #+startup, #
   +seq_toto
                    etc. One can
take the approach of leaving #+title at the top of
   the
                    document, and
moving the other config lines elesewhere, but even so
   I am
                    wondering
                    whether anyone else is attracted by the idea of
   providing
                    an org-title
                    display property that would hide the #+title:
   component,
                    and use an
                    appropriate face for the title text.

In some ways, the current state gives the impression
   that
                    the title is
something which becomes important during export, but
   is not
                    really a
                    key
                    component of document when it is being viewed in
   emacs. For
                    example, I
expect others are familiar with the experience of
   exporting
                    an org
                    file
without a title, finding that the first heading has
   been
                    used as a
title, and then going back to add in the title as an
                    afterthought. But a
                    title is an important part of a document, and I
   thought
                    perhaps a
special title display would help to make the title
   more of
                    a first
                    class
                    citizen in org buffers?


                Hi Dan,

                I agree.  Maybe he same should be true for DATE and
   AUTHOR,
                maybe EMAIL?

Would you like to make a patch for this, introducing a
   new face
                and applying it to these constructs?


I've made a proposed patch (below). This involved making a few
        decisions
about appearance -- it would be great to get other peoples' views
   and
        alternative proposals.

At the risk of stating the obvious, I think we should ask the
   question
"What might attract new users to org-mode most?", rather than
   query our
personal preferences (because we can all change it ourselves or
   fire
        off
        an email to this list asking how).

Here's my main proposal (corresponding to the patch below). Note
   that
        in
the first 4 lines the #+TITLE: and #+AUTHOR: etc bits are still
   there,
        but invisible.

        [I've also put the screenshots at http://www.princeton.edu/
   ~ddavison/
        org-faces/]

        [Default-MidnightBlue.png]

        <Default-MidnightBlue.png>
The main issue then is that I'm suggesting making the title face
   larger
        than the other faces. This would be the only large face in
   org-mode,
        but
I thought that it was appropriate for the title. Here's a version
        without the large title face:

        [Default-MidnightBlue-NoBigTitle.png]

        <Default-MidnightBlue-NoBigTitle.png>
        As for the colours, here's an alternative:

        [Default-DarkSlateGrey.png]

        <Default-DarkSlateGrey.png>
        The important thing is the default emacs colour theme shown
   above, but
        I
did pick a colour for dark backgrounds. For what it's worth, here
   is
        what it looks like with (the excellent)
   color-theme-charcoal-black:

        [CharcoalBlack-SteelBlue.png]

        <CharcoalBlack-SteelBlue.png>
Here's the patch. If anyone wants to play around, it's pretty
   obvious
        in
the patch below where to change the colours (and boldness and
        height). Don't forget the functions list-colors-display and
        list-faces-display.

There's at least one issue with the patch: if you leave a space
   between
e.g. '#+TITLE:' and the start of the title text, then that space
   will
        not be made invisible and so will appear at the start of the
   title. I
couldn't see how to avoid that without altering one of the key
        font-lock
        regexps.

        Dan

--8<---------------cut here--------------- start------------->8---
        commit 72aa791ea0bf613d50b9bf88affd6a53e91c1ebe
        Author: Dan Davison <address@hidden>
        Date:   Sun Mar 21 20:26:02 2010 -0400

          Alter display of title, author, email and date lines.

          For each of #+TITLE:, #+AUTHOR:, #+EMAIL:, #+DATE:, the
          initial #+KEYWORD: part is hidden and the following new
          faces are applied to the remaining visible part:

          org-title-line
          org-author-line
          org-email-line
          org-date-line

        diff --git a/lisp/org-faces.el b/lisp/org-faces.el
        index e336b3c..ebc9596 100644
        --- a/lisp/org-faces.el
        +++ b/lisp/org-faces.el
        @@ -468,6 +468,25 @@ changes."
         :group 'org-faces
         :version "22.1")

        +(defface org-title-line
+ '((((class color) (background light)) (:foreground "midnight
   blue"
        :weight bold :height 1.44))
+ (((class color) (background dark)) (:foreground "steel blue"
        :weight bold :height 1.44))
        +    (t (:weight bold :height 1.44)))
        +  "Face for #+TITLE: line."
        +  :group 'org-faces)
        +
        +(defface org-author-line
+ '((((class color) (background light)) (:foreground "midnight
   blue"))
        +    (((class color) (background dark)) (:foreground "steel
   blue")))
        +  "Face for #+AUTHOR: line."
        +  :group 'org-faces)
        +
        +(org-copy-face 'org-author-line 'org-email-line
        +  "Face for #+EMAIL: line.")
        +
        +(org-copy-face 'org-author-line 'org-date-line
        +  "Face for #+DATE: line.")
        +
        (defface org-block
         (org-compatible-face 'shadow
           '((((class color grayscale) (min-colors 88) (background
   light))
        diff --git a/lisp/org.el b/lisp/org.el
        index b723528..17e3877 100644
        --- a/lisp/org.el
        +++ b/lisp/org.el
        @@ -4642,6 +4642,22 @@ will be prompted for."
                      ((string= block-type "verse")
                       (add-text-properties beg1 end1 '(face
   org-verse))))
                     t))
        +          ((equal dc1 "title:")
        +           (add-text-properties beg (match-end 3) '
        (font-lock-fontified t invisible t))
        +           (add-text-properties
        +            (match-beginning 6) (match-end 6) '
   (font-lock-fontified t
        face org-title-line)))
        +          ((equal dc1 "author:")
        +           (add-text-properties beg (match-end 3) '
        (font-lock-fontified t invisible t))
        +           (add-text-properties
        +            (match-beginning 6) (match-end 6) '
   (font-lock-fontified t
        face org-author-line)))
        +          ((equal dc1 "email:")
        +           (add-text-properties beg (match-end 3) '
        (font-lock-fontified t invisible t))
        +           (add-text-properties
        +            (match-beginning 6) (match-end 6) '
   (font-lock-fontified t
        face org-email-line)))
        +          ((equal dc1 "date:")
        +           (add-text-properties beg (match-end 3) '
        (font-lock-fontified t invisible t))
        +           (add-text-properties
        +            (match-beginning 6) (match-end 6) '
   (font-lock-fontified t
        face org-date-line)))
                  ((not (member (char-after beg) '(?\  ?\t)))
;; just any other in-buffer setting, but not indented
                   (add-text-properties
--8<---------------cut here--------------- end--------------->8---





            OK, it's on my list.

            Dan



                - Carsten



                _______________________________________________
                Emacs-orgmode mailing list
                Please use `Reply All' to send replies to the list.
                address@hidden
                http://lists.gnu.org/mailman/listinfo/emacs-orgmode



            _______________________________________________
            Emacs-orgmode mailing list
            Please use `Reply All' to send replies to the list.
            address@hidden
            http://lists.gnu.org/mailman/listinfo/emacs-orgmode


    - Carsten





    _______________________________________________
    Emacs-orgmode mailing list
    Please use `Reply All' to send replies to the list.
    address@hidden
    http://lists.gnu.org/mailman/listinfo/emacs-orgmode


_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode





reply via email to

[Prev in Thread] Current Thread [Next in Thread]