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: Dan Davison
Subject: Re: [Orgmode] suggestion: display of #+TITLE
Date: Sat, 27 Mar 2010 22:52:00 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

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




reply via email to

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