emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: [BABEL] Two minor issues


From: Sébastien Vauban
Subject: [Orgmode] Re: [BABEL] Two minor issues
Date: Mon, 22 Nov 2010 10:30:46 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (windows-nt)

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
#+LANGUAGE:  en_US

* Faces with background

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

** 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-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)
       (color-theme-sva)))
   #+end_src

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")
#+end_src

#+results:

* Example

The above code already is 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.

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

(revert-buffer)
(org-shifttab)
#+end_src

#+results:

** What do you see?

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

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

(revert-buffer)
(org-shifttab)
#+end_src

#+results:

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

    http://www.mygooglest.com/sva/No-Native-Fontification.png

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

    http://www.mygooglest.com/sva/Native-Fontification-Minibug.png

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

Best regards,
  Seb

-- 
Sébastien Vauban




reply via email to

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