From: "Sébastien Vauban" <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org>
To: emacs-orgmode-mXXj517/zsQ@public.gmane.org
Subject: Re: Fontification of blocks
Date: Tue, 01 Feb 2011 22:04:33 +0100 [thread overview]
Message-ID: <80sjw7qxem.fsf@missioncriticalit.com> (raw)
In-Reply-To: 87ei9jkl0l.fsf@gmail.com
Hi Eric, Dan & all,
"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)
>
> 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
--
Sébastien Vauban
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode-mXXj517/zsQ@public.gmane.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
next prev parent reply other threads:[~2011-02-01 21:04 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 [this message]
2011-02-02 7:25 ` Eric S Fraga
2011-02-02 14:34 ` Dan Davison
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=80sjw7qxem.fsf@missioncriticalit.com \
--to=wxhgmqzgwmuf-genee64ty+gs+fvcfc7uqw@public.gmane.org \
--cc=emacs-orgmode-mXXj517/zsQ@public.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).