emacssyntax-highlightingfont-lock

emacs automatically highlight *E *F etc and highlight to EOL


I am trying to build my major mode for syntax highlighting log files from a certain tool flow. and I've been using this excellent guide to get started http://ergoemacs.org/emacs/elisp_syntax_coloring.html

but I would like to highlight "*W", "*E" and "*F" but I cannot get that to work

here are my font-lock keywords

(setq mylog-font-lock-keywords
  (let* (
         ;; define several category of keywords
        (x-warnings  '("UVM_ERROR" "UVM_FATAL" "^.*E" "F"))
        (x-keywords '("UVM_INFO" "NOTE" "Note"))
        (x-types '("UVM_WARNING" "*W," "xmsim"))
        (x-constants '("ACTIVE" "AGENT" "ALL_SIDES" "ATTACH_BACK"))
        (x-events '("at_rot_target" "at_target" "attach"))
        (x-functions '("llAbs" "llAcos" "llAddToLandBanList" "llAddToLandPassList"))



        ;; generate regex string for each category of keywords
        (x-keywords-regexp (regexp-opt x-keywords 'words))
        (x-types-regexp (regexp-opt x-types 'words))
        (x-constants-regexp (regexp-opt x-constants 'words))
        (x-events-regexp (regexp-opt x-events 'words))
        (x-functions-regexp (regexp-opt x-functions 'words))
        (x-warnings-regexp (regexp-opt x-warnings 'words))
        )

    `(
      (,x-types-regexp . font-lock-type-face)
      (,x-constants-regexp . font-lock-constant-face)
      (,x-events-regexp . font-lock-builtin-face)
      (,x-functions-regexp . font-lock-function-name-face)
      (,x-keywords-regexp . font-lock-keyword-face)
      (,x-warnings-regexp . font-lock-warning-face)
      ;; note: order above matters, because once colored, that part won't change.
      ;; in general, put longer words first
      )))

;;;###autoload (define-derived-mode mylog-mode verilog-mode "log mode" "Major mode for editing LOG FILES…"

;; code for syntax highlighting (setq font-lock-defaults '((mylog-font-lock-keywords)))) (set-face-foreground 'font-lock-type-face "yellow")

;; add the mode to the `features' list (provide 'mylog-mode)

as you can see I've tried a few things with out success.. any other words are highlighted correctly?

as a final touch I would like to for all occurenses of WARNING or ERROR I would like to highlight the entire line until EOL.

I have found some examples but none that show how to highlight until EOL in a major mode lisp file


Solution

  • This is an example (taken from my init.el). Hope it help.

    (font-lock-add-keywords nil
      '( ; high-light full line ending with "E" or "FATAL"
         ("^.*\\(E\\|FATAL\\)$" . 'font-lock-function-name-face)
         ; high-light full line beginning with '*E' '*F' '*W'
         ("^\\*[EFW]\\b.*$" . 'font-lock-comment-face)
         ; high-light only ending part of the lines which contain "F"
         ("\\b\\w*F$" . 'font-lock-function-name-face)
         ; high-light from "UVM" to end of line
         ("\\bUVM.*$" . 'font-lock-function-name-face)
         ; high-light only words that end with "G"
         ("\\b\\w*G\\b" . 'font-lock-function-name-face)
         ; bold things between 2 **, like **bold**
         ("\\*\\*.+?\\*\\*" . 'bold)))