From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: suggestion: display of #+TITLE Date: Sun, 28 Mar 2010 09:36:36 +0200 Message-ID: <0FA9B571-D1F0-4168-9DFB-B4CDF7A3F9C5@gmail.com> References: <87wrxcnsig.fsf@stats.ox.ac.uk> <87r5nhr9qr.fsf@stats.ox.ac.uk> <877hp5i1wl.fsf@stats.ox.ac.uk> <161BB572-48B8-4E1C-9437-EAA3A0863465@gmail.com> <874ok3wybm.fsf@stats.ox.ac.uk> <87fx3lb1kf.fsf@stats.ox.ac.uk> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Nvn3Y-0004WI-JD for emacs-orgmode@gnu.org; Sun, 28 Mar 2010 03:37:12 -0400 Received: from [140.186.70.92] (port=52273 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nvn3G-0004QT-FX for emacs-orgmode@gnu.org; Sun, 28 Mar 2010 03:37:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Nvn32-0000H4-02 for emacs-orgmode@gnu.org; Sun, 28 Mar 2010 03:36:43 -0400 Received: from mail-ew0-f223.google.com ([209.85.219.223]:33405) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Nvn31-0000Gz-K6 for emacs-orgmode@gnu.org; Sun, 28 Mar 2010 03:36:39 -0400 Received: by ewy23 with SMTP id 23so1968675ewy.14 for ; Sun, 28 Mar 2010 00:36:38 -0700 (PDT) In-Reply-To: <87fx3lb1kf.fsf@stats.ox.ac.uk> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Dan Davison Cc: emacs org-mode mailing list Hi Dan, this is great, thanks. please do not yet apply it - I am in the middle of some more complex merging. - Carsten On Mar 28, 2010, at 4:52 AM, 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 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 >> wrote: >> >> Carsten, Scot -- >> >> Scot Becker 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 < >> carsten.dominik@gmail.com> >>> 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 writes: >>> >>> >>> Carsten Dominik 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] >>> >>> >>> 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] >>> >>> >>> As for the colours, here's an alternative: >>> >>> [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] >>> >>> >>> 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 >>> 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. >>> Emacs-orgmode@gnu.org >>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >>> >>> >>> >>> _______________________________________________ >>> Emacs-orgmode mailing list >>> Please use `Reply All' to send replies to the list. >>> Emacs-orgmode@gnu.org >>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >>> >>> >>> - Carsten >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Emacs-orgmode mailing list >>> Please use `Reply All' to send replies to the list. >>> Emacs-orgmode@gnu.org >>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >>> >>> >>> _______________________________________________ >>> Emacs-orgmode mailing list >>> Please use `Reply All' to send replies to the list. >>> Emacs-orgmode@gnu.org >>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode - Carsten