emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Sébastien Vauban" <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org>
To: emacs-orgmode-mXXj517/zsQ@public.gmane.org
Subject: Re: [BABEL] Two minor issues
Date: Mon, 22 Nov 2010 10:30:46 +0100	[thread overview]
Message-ID: <80k4k5yabd.fsf@missioncriticalit.com> (raw)
In-Reply-To: <87k4k8m9fx.fsf@gmail.com>

Hi Dan,

(resending this, as it seems to never have reached the ML)

Dan Davison wrote:
> Sébastien Vauban writes:
>> Dan Davison wrote:
>>>> #+begin_src emacs-lisp
>>>>   ;; (message "Hello World")
>>>> #+end_src
>>> err, and I haven't had the energy to investigate this one yet!
>> Another minibug, when natively fontifying, is that the line #+begin_src is
>> no more fontified up to the end of the screen (well to the end of the
>> line): choose a font with a background color, and you will notice the
>> difference immediately.
> I do remember you reported this before, but I don't use faces with
> background colors and didn't get round to working out how to set the fonts.
> Could you provide a reproducible example with code to set up the necessary
> faces?

#+TITLE:     Native fontification minibug
#+DATE:      2010-11-20

* Faces with background

To set up Org faces with a background color, choose 1 of the 2 following

** Install my color-theme

1. Download http://orgmode.org/worg/color-themes/color-theme-sva.el, putting
   it in a directory that's part of your =load-path=.

2. Insert the following somewhere in your =.emacs= file:

   #+begin_src emacs-lisp
   ;; the real color theme functions
   (when (require 'color-theme)

     ;; initialize the color theme package
     (if (fboundp 'color-theme-initialize)

     ;; color themes will be installed for all frames
     (setq color-theme-is-global t)

     ;; set my default color theme
     (when (try-require 'color-theme-sva)

Doing so, you'll benefit of all customizations I've done (and re-done... and
re-re-done...) around faces in general, and Org faces in particular. You may
like it, or hate it, but you shouldn't stay indifferent to it...

** Customize some Org faces

Alternatively, you can just update the two most important faces (regarding
this question), directly from here, by executing this code:

#+begin_src emacs-lisp
(set-face-attribute 'org-meta-line nil
                    :foreground "#008ED1"
                    :background "#EAEAFF")

(set-face-attribute 'org-block nil
                    :foreground "blue1"
                    :background "#FFFFEA")


* Example

The above code already is an example of the way faces are applied. Here is

** Don't fontify natively

Execute the following, answering =yes= to the revert buffer question.

#+begin_src emacs-lisp
;; don't fontify code in code blocks
(setq org-src-fontify-natively nil)



** What do you see?

#+begin_src emacs-lisp
;; (message "Hello World")
(message "Hello World")

** Fontify natively

Execute the following, answering =yes= to the revert buffer question.

#+begin_src emacs-lisp
;; do fontify code in code blocks
(setq org-src-fontify-natively t)



What do you see?

Notice that, when in native fontification, the open parenthesis of the =setq=
line (second line of the last code block) is wrongly fontified.

> The three changes you made in commit ff1b5de478e8575b2d8 to support
> fontification to end of line are marked below.
> I'm not totally clear which line is responsible for fontifying begin_src up
> the right-hand edge of the page. Is it this one?
> 	      (add-text-properties beg beg1 '(face org-meta-line))
> The thing is that your patch didn't change that line, which confuses me.

The "native fontification" has been introduced a couple of weeks *after* my
patch. Maybe someone reverted the change in that line, which could explain,
well, a lot...

> But anyway, in the let binding at the top we have
> 	      (beg1 (line-beginning-position 2))
> which worries me slightly -- does that mean that your functionality relies
> on fontifying the first character of the *body* of the code block as
> org-meta-line? If so then isn't that incompatible with also fontifying the
> block contents as code?
> Your 3rd change is inside the cond, and org-src-fontify-natively comes
> earlier in the cond, so seb change 3 is not being evaluated when
> org-src-fontify-natively is turned on. But I guess that is not the problem
> as that code is dealing with the inside of the block, right?
> Dan
> #+begin_src emacs-lisp
> ;;; begin seb change 1
> 	    (add-text-properties (match-beginning 6) (+ (match-end 6) 1)
> 				 '(font-lock-fontified t face org-block))
> 					; for backend-specific code
> ;;; end seb change 1
> 	    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))
> 	      (add-text-properties beg beg1 '(face org-meta-line))
> ;;; begin seb change 2
> 	      (add-text-properties end1 (+ end 1) '(face org-meta-line))
> 					; for end_src
> ;;; end seb change 2
> 	      (cond
> 	       ((and lang org-src-fontify-natively)
> 		(org-src-font-lock-fontify-block lang block-start block-end))
> 	       (quoting
> ;;; begin seb change 3
> 		(add-text-properties beg1 (+ end1 1) '(face
> 						       org-block)))
> 					; end of source block
> ;;; end seb change 3
> 	       ((not org-fontify-quote-and-verse-blocks))
> 	       ((string= block-type "quote")
> 		(add-text-properties beg1 end1 '(face org-quote)))
> 	       ((string= block-type "verse")
> 		(add-text-properties beg1 end1 '(face org-verse))))
> 	      t))
> #+end_src

Honestly, the way I update that code has been mainly done by sequences of
trials and errors. The above code is, for me, still quite complex to
understand with vars such as beg, beg1, end, end1 for which I hadn't
completely understood the meaning. Otherwise, I would even have proposed a
renaming of some of them. But, I think that whatever we do, such a code will
stay complex to understand and change.

Find here a picture of what we see (since my patch) without native


Also, a picture with the "new" setting of native fontification.


Hope this helps. If you need help, I'm willing to take a look back a it (still
trying and testing the effect of changes), but it won't be before a couple of

Best regards,

Sébastien Vauban

Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.

  reply	other threads:[~2010-11-22  9:30 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-30 10:58 Jambunathan K
2010-11-20  0:07 ` Dan Davison
2010-11-20  7:19   ` Sébastien Vauban
2010-11-20 13:05     ` Dan Davison
2010-11-22  9:30       ` Sébastien Vauban [this message]
2010-11-22 14:20         ` Dan Davison
2010-11-22 20:14           ` Sébastien Vauban
2010-11-22 21:36             ` 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:

  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=80k4k5yabd.fsf@missioncriticalit.com \
    --to=wxhgmqzgwmuf-genee64ty+gs+fvcfc7uqw@public.gmane.org \
    --cc=emacs-orgmode-mXXj517/zsQ@public.gmane.org \
    --subject='Re: [BABEL] Two minor issues' \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:


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).