emacs-orgmode
[Top][All Lists]
Advanced

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

[Orgmode] Re: org-style folding for a .emacs


From: Sébastien Vauban
Subject: [Orgmode] Re: org-style folding for a .emacs
Date: Wed, 15 Jul 2009 17:52:25 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.94 (gnu/linux)

Hello Michael,

>>>> Does anyone have a recipe for easy org-style folding of an elisp file?
>>>> I'd like to divide my .emacs into segments to make it easier to oversee
>>>> and navigate.
>>
>> I asked myself this question a couple of days ago. Telepathy. For real.
>> Good it has been asked, and answered.
>>
>>> In summary, add the following to your ~/.emacs.el:
>>>
>>> (defun th-outline-regexp ()
>>>  "Calculate the outline regexp for the current mode."
>>>  (let ((comment-starter (replace-regexp-in-string
>>>                          "[[:space:]]+" "" comment-start)))
>>>    (when (string= comment-start ";")
>>>      (setq comment-starter ";;"))
>>>    (concat "^" comment-starter "\\*+")))
>>>
>>> [...]
>>>
>>> (add-hook 'outline-minor-mode-hook
>>>           'th-outline-minor-mode-init)
>>>
>>> and add the following as the top line of your ~/.emacs.el:
>>>
>>> ; -*- mode: emacs-lisp; mode: outline-minor; -*-
>>>
>>> Now you can add ;;* and ;;**, etc as headings in your .emacs.el.
>>
>> Done. Though, is there a way to get the font used for org-levels in the
>> Emacs config file? That would really greatly improve the readability, then!
>
> Try changing th-outline-minor-mode-init to:
>
> (defun th-outline-minor-mode-init ()
>  (interactive)
>  (setq outline-regexp (th-outline-regexp))
>  ;; highlight the headings
>  ;; see 
> http://www.gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html
>  ;; use M-x customize-apropos face to customize faces
>  ;; to find the corresponding face for each outline level see org-faces.el
>  (let ((heading-1-regexp (concat (substring outline-regexp 0 -1) "\\{1\\} 
> \\(.*\\)"))
>        (heading-2-regexp (concat (substring outline-regexp 0 -1) "\\{2\\} 
> \\(.*\\)"))
>        (heading-3-regexp (concat (substring outline-regexp 0 -1) "\\{3,\\} 
> \\(.*\\)")))
>    (font-lock-add-keywords
>     nil
>     `((,heading-1-regexp 1 font-lock-function-name-face t)
>       (,heading-2-regexp 1 font-lock-variable-name-face t)
>       (,heading-3-regexp 1 font-lock-keyword-face       t)))))
>
> That should atleast highlight the first three headings properly and make
> it more readable. I'm not quite sure how to make it cycle through the 8
> colors like org-mode does.

You know what?  You really are wonderful ;-)  This is making my month...

Though, I slightly adapted your code (that was in what's possible for me) so
that I get exactly the same faces as within a real Org file:

--8<---------------cut here---------------start------------->8---
(defun th-outline-minor-mode-init ()
  (interactive)
  (setq outline-regexp (th-outline-regexp))

  ;; highlight the headings
  ;; see http://www.gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html
  ;; use M-x customize-apropos face to customize faces
  ;; to find the corresponding face for each outline level see org-faces.el
  (let ((heading-1-regexp (concat (substring outline-regexp 0 -1) "\\{1\\} 
\\(.*\\)"))
        (heading-2-regexp (concat (substring outline-regexp 0 -1) "\\{2\\} 
\\(.*\\)"))
        (heading-3-regexp (concat (substring outline-regexp 0 -1) "\\{3\\} 
\\(.*\\)"))
        (heading-4-regexp (concat (substring outline-regexp 0 -1) "\\{4,\\} 
\\(.*\\)"))
        )
    (font-lock-add-keywords
     nil
     `((,heading-1-regexp 1 'org-level-1 t)
       (,heading-2-regexp 1 'org-level-2 t)
       (,heading-3-regexp 1 'org-level-3 t)
       (,heading-4-regexp 1 'org-level-4 t)))))
--8<---------------cut here---------------end--------------->8---

That way, having those faces defined (inspired by the resistors color code):

--8<---------------cut here---------------start------------->8---
(org-level-1 ((t (:foreground "cornflower blue" :weight bold :height 1.8 
:family "Arial"))))
(org-level-2 ((t (:foreground "LimeGreen" :weight bold :height 1.6 :family 
"Arial"))))
(org-level-3 ((t (:foreground "orange" :weight bold :height 1.3 :family 
"Arial"))))
--8<---------------cut here---------------end--------------->8---

I get a much, much, much more readable emacs file -- nice, moreover as mine is
really huge!


> Hope that helps,

Oohhh yeeeessss!

Best regards,
  Seb

-- 
Sébastien Vauban





reply via email to

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