emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <dandavison7@gmail.com>
To: "Sébastien Vauban"
	<public-wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@lo.gmane.org>
Cc: emacs org-mode mailing list <emacs-orgmode@gnu.org>
Subject: Re: Fontification of blocks
Date: Wed, 02 Feb 2011 14:34:54 +0000	[thread overview]
Message-ID: <m1aaietshd.fsf@gmail.com> (raw)
In-Reply-To: <80sjw7qxem.fsf@missioncriticalit.com> ("Sébastien Vauban"'s message of "Tue, 01 Feb 2011 22:04:33 +0100")

Hi Seb,

Just quickly, one thing I noticed is that the begin/end lines were
visible even inside folded trees. I.e., in a folded org file, containing
many src blocks, I could see the coloured backgrounds "poking out" of
the folded sections, extending to the right of the screen. Do you see
that?

Also,

> "Eric Schulte" wrote:
>> I think that adding a new block delimiter face which inherits from the
>> org-meta face as you've suggested is the way to go.
>>
>> I would recommend however that rather than removing/changing the
>> org-meta-line, quote and verse delimiting faces to cover the entire line you
>> simply add the org-block-begin/end-line face overtop of these existing
>> faces.  That way the default behavior is not changed by the patch, and users
>> have more control over the final display.
>>
>> In fact rather than having the org-block-begin/end-line faces inherit
>> from org-meta-line why not have them begin as empty faces.  Do you think
>> this sounds like a good way to go?  If so would you mind submitting a
>> patch which
>> - doesn't remove existing faces but rather adds these new faces overtop
>>   of them
>> - includes of definition of the org-block-begin/end-line faces to empty
>>   faces (otherwise the elisp compiler will warn of references to
>>   undefined variables)

Could you clarify whether the above suggestions have been adopted or
rejected?

At the moment the code below alters the background color of the
begin/end lines by default; but presumably the final version will not
alter any appearances by default? How will that work?

Would you be able to supply a patch, or better, put your work in a
publicly accessible git branch? It's hard to see exactly what changes
you have made with the full code as below. (Please contact me for write
access if you'd like to use the fork at
https://github.com/dandavison/org-devel.)

Dan

>>
>> Also, could you share an example code snippet which initializes the
>> org-block-begin/end-line faces initialized (either here and/or on worg)?
>
> Here a proposition that goes in that direction -- not yet a real patch, but
> something for you to have a look at. Should be easy to test, at least, that's
> what I tried to achieve.
>
> #+TITLE:     Patch for block fontification
> #+DATE:      2011-02-01
> #+LANGUAGE:  en_US
>
> * Abstract
>
> This is the new code that I will supply as a patch. To test it, just
> evaluate the next source block, and please report any problem.
>
> What it does:
>
> - add 2 faces for the lines delimiting the beginning and the end of
>   the source block
>
> - fixes a tiny bug (affecting the begin delimiter line of source
>   blocks) when in "native" fontification (from Dan Davison)
>
> FOR PEOPLE BEING MORE EXPERTS THAN I AM, it shows what I tried for
> adding a yellow (very visible, for test purpose) background to the
> natively fontified source blocks. This does not work, but is commented
> -- so it does not impact anything unless you uncomment it... See line
> "NOK".
>
> * Code
>
> #+begin_src emacs-lisp :results silent
> (defface org-block-begin-line
>   '((t (:inherit org-meta-line
>         :underline "light grey" :foreground "#008ED1" :background "#EAEAFF")))
>   "Face used for the line delimiting the begin of source blocks.") 
>
> (defface org-block-end-line
>   '((t (:inherit org-meta-line
>         :overline "light grey" :foreground "#008ED1" :background "#EAEAFF")))
>   "Face used for the line delimiting the end of source blocks.") 
>
> (defface org-block-background
>   '((t (:background "#FFFF00")))
>   "Face used for the source block background.") 
>
> (defun org-fontify-meta-lines-and-blocks (limit)
>   "Fontify #+ lines and blocks, in the correct ways."
>   (let ((case-fold-search t))
>     (if (re-search-forward
> 	 "^\\([ \t]*#\\+\\(\\([a-zA-Z]+:?\\| \\|$\\)\\(_\\([a-zA-Z]+\\)\\)?\\)[ \t]*\\(\\([^ \t\n]*\\)[ \t]*\\(.*\\)\\)\\)"
> 	 limit t)
> 	(let ((beg (match-beginning 0))
> 	      (block-start (match-end 0))
> 	      (block-end nil)
> 	      (lang (match-string 7))
> 	      (beg1 (line-beginning-position 2))
> 	      (dc1 (downcase (match-string 2)))
> 	      (dc3 (downcase (match-string 3)))
> 	      end end1 quoting block-type)
> 	  (cond
> 	   ((member dc1 '("html:" "ascii:" "latex:" "docbook:"))
> 	    ;; a single line of backend-specific content
> 	    (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
> 	    (remove-text-properties (match-beginning 0) (match-end 0)
> 				    '(display t invisible t intangible t))
> 	    (add-text-properties (match-beginning 1) (match-end 3)
> 				 '(font-lock-fontified t face org-meta-line))
> 	    (add-text-properties (match-beginning 6) (+ (match-end 6) 1)
> 				 '(font-lock-fontified t face org-block))
> 					; for backend-specific code
> 	    t)
> 	   ((and (match-end 4) (equal dc3 "begin"))
> 	    ;; Truly a block
> 	    (setq block-type (downcase (match-string 5))
> 		  quoting (member block-type org-protecting-blocks))
> 	    (when (re-search-forward
> 		   (concat "^[ \t]*#\\+end" (match-string 4) "\\>.*")
> 		   nil t)  ;; on purpose, we look further than LIMIT
> 	      (setq end (match-end 0) end1 (1- (match-beginning 0)))
> 	      (setq block-end (match-beginning 0))
> 	      (when quoting
> 		(remove-text-properties beg end
> 					'(display t invisible t intangible t)))
> 	      (add-text-properties
> 	       beg end
> 	       '(font-lock-fontified t font-lock-multiline t))
> 	      (cond
> 	       ((and lang org-src-fontify-natively)
> 		(org-src-font-lock-fontify-block lang block-start block-end)
> 		;; (add-text-properties beg1 (+ end1 1) '(face org-block-background)) ; NOK from svauban: it currently overrides foreground as well!
> 		)
> 	       (quoting
> 		(add-text-properties beg1 (+ end1 1) '(face org-block)))
> 					; end of source block
> 	       ((not org-fontify-quote-and-verse-blocks))
> 	       ((string= block-type "quote")
> 		(add-text-properties beg1 (1+ end1) '(face org-quote)))
> 	       ((string= block-type "verse")
> 		(add-text-properties beg1 (1+ end1) '(face org-verse))))
> 	      (add-text-properties beg beg1 '(face org-meta-line))
> 	      (add-text-properties beg beg1 '(face org-block-begin-line)) ; OK from svauban
> 	      (add-text-properties (1+ end) (1+ end1) '(face org-meta-line))
> 	      (add-text-properties (1+ end) (1+ end1) '(face org-block-end-line)) ; OK from svauban
> 	      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
> 	     beg (1+ (match-end 0))
> 	     '(font-lock-fontified t face org-meta-line))
> 	    t)
> 	   ((or (member dc1 '("begin:" "end:" "caption:" "label:"
> 			      "orgtbl:" "tblfm:" "tblname:" "result:"
> 			      "results:" "source:" "srcname:" "call:"))
> 		(and (match-end 4) (equal dc3 "attr")))
> 	    (add-text-properties
> 	     beg (match-end 0)
> 	     '(font-lock-fontified t face org-meta-line))
> 	    t)
> 	   ((member dc3 '(" " ""))
> 	    (add-text-properties
> 	     beg (match-end 0)
> 	     '(font-lock-fontified t face font-lock-comment-face)))
> 	   (t nil))))))
> #+end_src
>
> * Examples
>
> The above Lisp code is already an example of the way faces are
> applied. Here is another.
>
> ** Don't fontify natively
>
> Execute the following, answering =yes= to the revert buffer question,
> if you want to see how it looks like in "standard" fontification.
>
> #+begin_src emacs-lisp :results silent
> ;; don't fontify code in code blocks
> (setq org-src-fontify-natively nil)
>
> (revert-buffer)
> (org-shifttab)
> #+end_src
>
> ** Fontify natively
>
> Execute the following, answering =yes= to the revert buffer question,
> for the same in "native" fontification.
>
> #+begin_src emacs-lisp :results silent
> ;; do fontify code in code blocks
> (setq org-src-fontify-natively t)
>
> (revert-buffer)
> (org-shifttab)
> #+end_src
>
> ** Verse
>
> #+begin_verse
> Testing the fonctionality.
> #+end_verse
>
> ** Quote
>
> #+begin_quote
> Testing the fonctionality.
> #+end_quote
>
> Best regards,
>   Seb

  parent reply	other threads:[~2011-02-02 14:35 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-10  9:02 Fontification of blocks Sébastien Vauban
2010-12-10 11:12 ` David O'Toole
2010-12-13 21:25   ` Sébastien Vauban
2010-12-22 13:36     ` Dan Davison
2010-12-22 14:46       ` Sébastien Vauban
2010-12-13 19:50 ` Eric Schulte
2010-12-13 20:46   ` Sébastien Vauban
2010-12-15 17:22     ` Eric Schulte
2011-02-01 21:04       ` Sébastien Vauban
2011-02-02  7:25         ` Eric S Fraga
2011-02-02 14:34         ` Dan Davison [this message]
2011-02-02 20:19           ` Sébastien Vauban
2011-02-07 12:54             ` Dan Davison
2011-02-07 19:55               ` Sébastien Vauban
2011-02-08 19:00                 ` Dan Davison
2011-02-08 20:14                   ` Sébastien Vauban
2011-02-09  8:40                     ` Dan Davison
2011-02-02 22:24         ` Sébastien Vauban
2011-02-02 22:46           ` Eric S Fraga
2011-02-03 15:02           ` Eric Schulte
2011-02-03 19:57             ` Sébastien Vauban
2011-02-03 20:05             ` Eric S Fraga
2011-02-03 20:44               ` Sébastien Vauban
2011-02-04  9:21                 ` Sébastien Vauban
2011-02-04 16:18                   ` Eric S Fraga
2011-02-04 20:50                   ` Eric Schulte
2011-02-06  8:52                     ` Sébastien Vauban
  -- strict thread matches above, loose matches on Subject: below --
2010-12-10  9:01 Sébastien Vauban

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1aaietshd.fsf@gmail.com \
    --to=dandavison7@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=public-wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@lo.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).