0

I wrote a simple mode with the following font-lock definition, which defines just some keywords:

(defvar marpa-mode-font-lock
  `((,(regexp-opt '(":default" "action" "lexeme" "default" "latm" "separator") t)
     . 'font-lock-keyword-face)
    )
  "Highlighting for Marpa mode")

I use it in my mode function in this way:

(set (make-local-variable 'font-lock-defaults) '(marpa-mode-font-lock))

When I use the mode more than just the keywords are highlighted. Strings are also highlighted with some kind of C or Lisp default syntax.

How can I disable the default string syntax in order to replace it with my own definition?

In the language for which I wrote the mode, strings are not delimited by double quotes. Instead they are delimited by single quotes and may have a suffix attribute like this: 'create':i.

1 Answer 1

1

Strings and comments are highlighted based on the information in the syntax table.

Typically, this is much better than a keyword-based solution as it handles multi-line constructs better.

However, if you really want to disable this, you can set font-lock-keywords-only:

font-lock-keywords-only is a variable defined in `font-lock.el'. Its value is nil

Documentation: Non-nil means Font Lock should not fontify comments or strings. This is normally set via `font-lock-defaults'.

3
  • I see. I have stolen the syntax-table modification from sql-mode: (modify-syntax-entry ?' "\"" table) and (modify-syntax-entry ?\" "." table). There seems to be no way to make the suffix also part of the string?
    – ceving
    Nov 18, 2015 at 9:36
  • @ceving, can you give me some concrete examples on what is a correct string and something that incorrectly is highlighted as one. (I don't know sql). Nov 18, 2015 at 10:01
  • 1
    I think i got it; btw nice piece of software your el2markdown.
    – ceving
    Nov 18, 2015 at 16:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.