emacs-orgmode
[Top][All Lists]
Advanced

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

[Orgmode] Re: Highlight special string


From: Sébastien Vauban
Subject: [Orgmode] Re: Highlight special string
Date: Sat, 27 Nov 2010 09:41:30 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (windows-nt)

Hi Karl,

Karl Maihofer wrote:
> Darlan Cavalcante Moreira <address@hidden> schrieb:
>> Karl Maihofer <address@hidden> wrote:
>>> I'd like to highlight the strings "(ok)" and "(fail)" in my Org-document.
>>> Ok should get a green background, fail a red one. I think highlighting in
>>> emacs should last, but it would be great to have these strings highlighted
>>> in HTML-export, too, if this is no problem.
>>
>> Not exactly what you want, but for temporary highlights (useful for
>> instance to see if you are repeating the same word too much in a text) you
>> can use hi-lock-mode.
>>
>> Turn hi-lock-mode on with M-x hi-lock-mode. Then you can highlight a word
>> with "C-x w h" (highlight-regexp) or a the line containing a word with "C-x
>> w l" (highlight-lines-matching-regexp). Remove highlights with "C-x w r".

Please find the *lasting* solution that I'm using, hence IMHO better than
hi-lock.

The only thing you would still miss is the ability to get those highlighted
words exported to HTML or PDF.

#+begin_src emacs-lisp
      ;; special words
      (setq my/keywords-error-pattern
            
"\\(BUG\\|FIXME\\|XXX\\|TODO\\|[Ee]rror\\|ERROR\\|[Ww]arning\\|[Mm]issing\\|[Ii]nvalid\\|[Ff]ailed\\|[Cc]orrupted\\|[Ff]atal\\|FATAL\\|[Uu]ndefined\\|[Dd]enied\\)")

      (make-face 'my/keywords-error-face)
      (GNUEmacs (set-face-attribute 'my/keywords-error-face nil
                                    ;; :family "Serif"
                                    ;; :height 0.9
                                    :weight 'normal :slant 'normal
                                    :box '(:line-width 1 :color "#CC0000")
                                    :foreground "#CC0000"
                                    :background "#FFFF88"
                                    ))

      (setq my/keywords-org-error-pattern
            "\\(BUG\\|FIXME\\|XXX\\|[^*] 
TODO\\|[Ee]rror\\|[Ww]arning\\|[Mm]issing\\|[Ii]nvalid\\|[Ff]ailed\\|[Cc]orrupted\\|[Ff]atal\\|[Uu]ndefined\\)")
                                        ; smaller subset of keywords for
                                        ; ensuring no conflict with Org mode
                                        ; TODO keywords
      ;; FIXME Highlighting all special keywords but "TODO" in Org mode is
      ;; already a good step. Though, a nicer integration would be that "TODO"
      ;; strings in the headings are not touched by this code, and that only
      ;; "TODO" strings in the text body would be. Don't know (yet) how to do
      ;; that...

      ;; FIXME TODO should be highlighted in Org, even when at beginning of
      ;; line -- of course, without * in front of it.

      ;; set up highlighting of special words for proper selected major modes
      ;; only
      (dolist (mode '(fundamental-mode
                      svn-log-view-mode
                      text-mode))
                                        ; no interference with Org mode (which
                                        ; derives from text-mode)
        (font-lock-add-keywords
         mode
         `((,my/keywords-error-pattern 1 'my/keywords-error-face prepend))))

      ;; set up highlighting of special words for Org mode only
      (dolist (mode '(org-mode))
        (font-lock-add-keywords
         mode
         `((,my/keywords-org-error-pattern 1 'my/keywords-error-face prepend))))

      ;; add fontification patterns (even in comments) to a selected major
      ;; mode *and* all major modes derived from it
      (defun fontify-keywords ()
        (interactive)
        ;;   (font-lock-mode -1)
        ;;   (font-lock-mode 1)
        (font-lock-add-keywords
         nil
         `((,my/keywords-error-pattern 1 'my/keywords-error-face prepend))))
      ;; FIXME                         0                          t

      ;; set up highlighting of special words for selected major modes *and*
      ;; all major modes derived from them
      (dolist (hook '(c++-mode-hook
                      c-mode-hook
                      change-log-mode-hook
                      cperl-mode-hook
                      css-mode-hook
                      emacs-lisp-mode-hook
                      html-mode-hook
                      java-mode-hook
                      latex-mode-hook
                      lisp-mode-hook
                      makefile-mode-hook
                      message-mode-hook
                      php-mode-hook
                      python-mode-hook
                      sh-mode-hook
                      shell-mode-hook ;; works in *shell* buffers!
                      ssh-config-mode-hook))
        (add-hook hook 'fontify-keywords))
#+end_src

As signaled in my comments, the only problem I have is that when such a word
appears in a Org heading, the Org heading fontification is disabled -- only
for that single line!

Would someone be able to fix that last tiny feature...

Best regards,
  Seb

-- 
Sébastien Vauban




reply via email to

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