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: Highlight special string
Date: Sat, 27 Nov 2010 09:41:30 +0100	[thread overview]
Message-ID: <80eia7jgzp.fsf@missioncriticalit.com> (raw)
In-Reply-To: <20101126190854.93661hlkuwyoopno-2RFepEojUI1937y/D5i71g@public.gmane.org> (Karl Maihofer's message of "Fri, 26 Nov 2010 19:08:54 +0100")

Hi Karl,

Karl Maihofer wrote:
> Darlan Cavalcante Moreira <darcamo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> schrieb:
>> Karl Maihofer <ignoramus-Mmb7MZpHnFY@public.gmane.org> 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


_______________________________________________
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

      parent reply	other threads:[~2010-11-27  8:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-24  8:21 Highlight special string Karl Maihofer
2010-11-26 13:52 ` Darlan Cavalcante Moreira
     [not found] ` <29926_1290779567_oAQDqlho000818_4cefbbaa.1245960a.7fe6.7855@mx.google.com>
2010-11-26 18:08   ` Karl Maihofer
     [not found]     ` <20101126190854.93661hlkuwyoopno-2RFepEojUI1937y/D5i71g@public.gmane.org>
2010-11-27  8:41       ` Sébastien Vauban [this message]

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=80eia7jgzp.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).