From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: suggestion: display of #+TITLE Date: Thu, 25 Mar 2010 23:34:21 -0400 Message-ID: <874ok3wybm.fsf@stats.ox.ac.uk> 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> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Nv0Jc-0007Sb-EO for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 23:34:32 -0400 Received: from [140.186.70.92] (port=37922 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nv0Ja-0007Rr-G8 for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 23:34:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Nv0JX-00080K-NH for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 23:34:30 -0400 Received: from markov.stats.ox.ac.uk ([163.1.210.1]:39241) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Nv0JX-00080A-DJ for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 23:34:27 -0400 In-Reply-To: (Scot Becker's message of "Wed, 24 Mar 2010 20:22:14 +0000") 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: Scot Becker Cc: emacs org-mode mailing list , Carsten Dominik 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-DimmedKey= words.png > =C2=A0As 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 > wrote: > > Hi Dan, > > I think the patch is almost good. =C2=A0I 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) =20 +(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 "Bl= ue1")) @@ -468,6 +481,41 @@ changes." :group 'org-faces :version "22.1") =20 +(defface org-document-title + '((((class color) (background light)) (:foreground "midnight blue" :weig= ht bold :height 1.44)) + (((class color) (background dark)) (:foreground "steel blue" :weight b= old :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) =20 +(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=3D 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. =C2=A0In fact, my prefer= ence > 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 t= he # > +title line > in > org buffers? > > Currently it is easy for the title to get buried amon= g 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 provi= ding > an org-title > display property that would hide the #+title: compone= nt, > 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 emac= s. For > example, I > expect others are familiar with the experience of exp= orting > an org > file > without a title, finding that the first heading has b= een > 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 thoug= ht > perhaps a > special title display would help to make the title mo= re of > a first > class > citizen in org buffers? > > > Hi Dan, > > I agree. =C2=A0Maybe he same should be true for DATE and = AUTHOR, > maybe EMAIL? > > Would you like to make a patch for this, introducing a ne= w 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 que= stion > "What might attract new users to org-mode most?", rather than que= ry our > personal preferences (because we can all change it ourselves or f= ire > 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 t= here, > but invisible. > > [I've also put the screenshots at http://www.princeton.edu/~ddavi= son/ > 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-mo= de, > 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-blac= k: > > [CharcoalBlack-SteelBlue.png] > > > Here's the patch. If anyone wants to play around, it's pretty obv= ious > 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 b= etween > 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 titl= e. 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: =C2=A0 Sun Mar 21 20:26:02 2010 -0400 > > =C2=A0 Alter display of title, author, email and date lines. > > =C2=A0 For each of #+TITLE:, #+AUTHOR:, #+EMAIL:, #+DATE:, the > =C2=A0 initial #+KEYWORD: part is hidden and the following new > =C2=A0 faces are applied to the remaining visible part: > > =C2=A0 org-title-line > =C2=A0 org-author-line > =C2=A0 org-email-line > =C2=A0 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." > =C2=A0:group 'org-faces > =C2=A0:version "22.1") > > +(defface org-title-line > + =C2=A0'((((class color) (background light)) (:foreground "midni= ght blue" > :weight bold :height 1.44)) > + =C2=A0 =C2=A0(((class color) (background dark)) (:foreground "s= teel blue" > :weight bold :height 1.44)) > + =C2=A0 =C2=A0(t (:weight bold :height 1.44))) > + =C2=A0"Face for #+TITLE: line." > + =C2=A0:group 'org-faces) > + > +(defface org-author-line > + =C2=A0'((((class color) (background light)) (:foreground "midni= ght blue")) > + =C2=A0 =C2=A0(((class color) (background dark)) (:foreground "s= teel blue"))) > + =C2=A0"Face for #+AUTHOR: line." > + =C2=A0:group 'org-faces) > + > +(org-copy-face 'org-author-line 'org-email-line > + =C2=A0"Face for #+EMAIL: line.") > + > +(org-copy-face 'org-author-line 'org-date-line > + =C2=A0"Face for #+DATE: line.") > + > (defface org-block > =C2=A0(org-compatible-face 'shadow > =C2=A0 =C2=A0'((((class color grayscale) (min-colors 88) (backgro= und 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." > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string=3D bloc= k-type "verse") > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(add-text-= properties beg1 end1 '(face org-verse)))) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0t)) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((equal dc1 "title:") > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties beg (ma= tch-end 3) ' > (font-lock-fontified t invisible t)) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(match-beginning 6) (m= atch-end 6) '(font-lock-fontified t > face org-title-line))) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((equal dc1 "author:") > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties beg (ma= tch-end 3) ' > (font-lock-fontified t invisible t)) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(match-beginning 6) (m= atch-end 6) '(font-lock-fontified t > face org-author-line))) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((equal dc1 "email:") > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties beg (ma= tch-end 3) ' > (font-lock-fontified t invisible t)) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(match-beginning 6) (m= atch-end 6) '(font-lock-fontified t > face org-email-line))) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((equal dc1 "date:") > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties beg (ma= tch-end 3) ' > (font-lock-fontified t invisible t)) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(match-beginning 6) (m= atch-end 6) '(font-lock-fontified t > face org-date-line))) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((not (member (char-after beg)= '(?\ =C2=A0?\t))) > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; just any other in-buf= fer setting, but not indented > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(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