summaryrefslogtreecommitdiff
path: root/lisp/progmodes/tcl.el
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2005-04-05 13:06:25 +0000
committerGlenn Morris <rgm@gnu.org>2005-04-05 13:06:25 +0000
commitd6d43bde05e983ae718a39b7d4d12c803f89777c (patch)
tree7fe706b678d83fc995047edae6775028447902cd /lisp/progmodes/tcl.el
parent39b32c06bffe7327173a390e05cefd9a10d8059d (diff)
downloademacs-d6d43bde05e983ae718a39b7d4d12c803f89777c.tar.gz
(tcl-escaped-newline): New face.
(tcl-builtin-list): New variable. (tcl-set-font-lock-keywords): Add builtins, variables, and escaped newlines. Fix keywords subexpression number.
Diffstat (limited to 'lisp/progmodes/tcl.el')
-rw-r--r--lisp/progmodes/tcl.el46
1 files changed, 43 insertions, 3 deletions
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 24ae19b0ad4..95cfbb15196 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -42,6 +42,7 @@
;; * tcl-typeword-list is similar, but uses font-lock-type-face.
;; * tcl-keyword-list is a list of keywords. I've generally used this
;; for flow-control words. Eg I add "unwind_protect" to this list.
+;; * tcl-builtin-list lists commands to be given font-lock-builtin-face.
;; * tcl-type-alist can be used to minimally customize indentation
;; according to context.
@@ -193,6 +194,11 @@ inferior Tcl to load that file. The filename will be appropriately
quoted for Tcl."
:type 'string)
+(defface tcl-escaped-newline '((t :inherit font-lock-string-face))
+ "Face used for (non-escaped) backslash at end of a line in Tcl mode."
+ :group 'tcl
+ :version "22.1")
+
;;
;; Keymaps, abbrevs, syntax tables.
;;
@@ -372,6 +378,21 @@ Call `tcl-set-font-lock-keywords' after changing this list.")
Default list includes some TclX keywords.
Call `tcl-set-font-lock-keywords' after changing this list.")
+(defvar tcl-builtin-list
+ '("after" "append" "array" "bgerror" "binary" "catch" "cd" "clock"
+ "close" "concat" "console" "dde" "encoding" "eof" "exec" "expr"
+ "fblocked" "fconfigure" "fcopy" "file" "fileevent" "flush"
+ "format" "gets" "glob" "history" "incr" "info" "interp" "join"
+ "lappend" "lindex" "linsert" "list" "llength" "load" "lrange"
+ "lreplace" "lsort" "namespace" "open" "package" "pid" "puts" "pwd"
+ "read" "regexp" "registry" "regsub" "rename" "scan" "seek" "set"
+ "socket" "source" "split" "string" "subst" "tell" "time" "trace"
+ "unknown" "unset" "vwait")
+ "List of Tcl commands. Used only for highlighting.
+Call `tcl-set-font-lock-keywords' after changing this list.
+This list excludes those commands already found in `tcl-proc-list' and
+`tcl-keyword-list'.")
+
(defvar tcl-font-lock-keywords nil
"Keywords to highlight for Tcl. See variable `font-lock-keywords'.
This variable is generally set from `tcl-proc-regexp',
@@ -467,11 +488,30 @@ Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
"\\(\\s-\\|$\\)")
2 'font-lock-type-face)
+ (list (concat "\\_<" (regexp-opt tcl-builtin-list t) "\\_>")
+ 1 'font-lock-builtin-face)
+
+ ;; When variable names are enclosed in {} braces, any
+ ;; character can be used. Otherwise just letters, digits,
+ ;; underscores. Variable names can be prefixed with any
+ ;; number of "namespace::" qualifiers. A leading "::" refers
+ ;; to the global namespace.
+ '("\\${\\([^}]+\\)}" 1 font-lock-variable-name-face)
+ '("\\$\\(\\(?:::\\)?\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
+ 1 font-lock-variable-name-face)
+ '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+{\\([^}]+\\)}"
+ 1 font-lock-variable-name-face keep)
+ '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+\\(\\(?:::\\)?\
+\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
+ 1 font-lock-variable-name-face keep)
+
+ '("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'tcl-escaped-newline)
+
;; Keywords. Only recognized if surrounded by whitespace.
;; FIXME consider using "not word or symbol", not
;; "whitespace".
(cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>")
- 2))))
+ 1))))
(if tcl-proc-regexp
()
@@ -542,8 +582,8 @@ Commands:
(set (make-local-variable 'font-lock-defaults)
'(tcl-font-lock-keywords nil nil nil beginning-of-defun
- (font-lock-syntactic-keywords . tcl-font-lock-syntactic-keywords)
- (parse-sexp-lookup-properties . t)))
+ (font-lock-syntactic-keywords . tcl-font-lock-syntactic-keywords)
+ (parse-sexp-lookup-properties . t)))
(set (make-local-variable 'imenu-generic-expression)
tcl-imenu-generic-expression)