views:

120

answers:

3

I would like to create only a syntax highlighting minor mode for Emacs. I have the "Writing GNU Emacs Extensions" by O'Reilly, but it does not go into any depth of detail. Is there a simple tutorial for a real or fake programming language highlighting mode?

Thank you

+9  A: 

Defining a custom Generic Mode is probably the best place to start. You can define basic syntax highlighting for a language as simply as the following snippet.

(require 'generic-x)

(define-generic-mode 
  'my-mode                          ;; name of the mode
  '("//")                           ;; comments delimiter
  '("function" "var" "return")      ;; some keywords
  '(("=" . 'font-lock-operator) 
    ("+" . 'font-lock-operator)     ;; some operators
    (";" . 'font-lock-builtin))     ;; a built-in 
  '("\\.myext$")                    ;; files that trigger this mode
   nil                              ;; any other functions to call
  "My custom highlighting mode"     ;; doc string
)

It's great for quickly defining some basic syntax highlighting for obscure languages. I even use it for log files in some cases.

Colin Cochrane
would one save this is a file like my-syntax.el and add something like `(require 'my-syntax)` in .emacs? Thank you
Eli
You can do that, or put it directly in your .emacs if you prefer. If you put it in a seperate file, ensure it is in your load-path and that you include the line (provide 'my-syntax) at the end if you want to use (require 'my-syntax).
Colin Cochrane
A: 

You also might find it useful to look at this answer, which has a pointer to code that defines a minor mode to highlight certain key words - but only in strings and comments.

A minor mode is nicer if all you want is highlights - less baggage.

The relevant portions of the manual are for the function 'font-lock-add-keywords and the variable font-lock-keywords.

Trey Jackson
+1  A: 

EmacsWiki's Mode tutorial has a little more information on creating a major mode, in case you want to expand from syntax highlighting only.

Joakim Hårsman