Commit 5789bd83 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.

In the `shell' entry, don't try to refer to executable-font-lock-keywords.
(sh-font-lock-keywords-var-1): Renamed from sh-font-lock-keywords-1.
(sh-font-lock-keywords-var-2): Renamed from sh-font-lock-keywords-2.
(sh-font-lock-keywords): Append executable-font-lock-keywords here.
(sh-mode): Set comment-start-skip, local-abbrev-table, imenu-case-fold-search.
(sh-set-shell): Don't set them here.
(sh-feature): Simplify.  Get rid of the eval-a-variable feature.
Don't cache the results in the original alist; don't ever modify that alist.
parent 444465c8
......@@ -815,7 +815,7 @@ See `sh-feature'.")
:group 'sh-script
:version "22.1")
(defvar sh-font-lock-keywords
(defvar sh-font-lock-keywords-var
'((csh sh-append shell
("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1
font-lock-variable-name-face))
......@@ -838,7 +838,7 @@ See `sh-feature'.")
1 font-lock-negation-char-face))
;; The next entry is only used for defining the others
(shell sh-append executable-font-lock-keywords
(shell
;; Using font-lock-string-face here confuses sh-get-indent-info.
("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'sh-escaped-newline)
("\\\\[^A-Za-z0-9]" 0 font-lock-string-face)
......@@ -850,11 +850,11 @@ See `sh-feature'.")
("^\\(\\sw+\\):" 1 font-lock-variable-name-face)))
"Default expressions to highlight in Shell Script modes. See `sh-feature'.")
(defvar sh-font-lock-keywords-1
(defvar sh-font-lock-keywords-var-1
'((sh "[ \t]in\\>"))
"Subdued level highlighting for Shell Script modes.")
(defvar sh-font-lock-keywords-2 ()
(defvar sh-font-lock-keywords-var-2 ()
"Gaudy level highlighting for Shell Script modes.")
;; These are used for the syntax table stuff (derived from cperl-mode).
......@@ -1364,9 +1364,12 @@ with your script for an edit-interpret-debug cycle."
paragraph-start (concat page-delimiter "\\|$")
paragraph-separate paragraph-start
comment-start "# "
comment-start-skip "#+[\t ]*"
local-abbrev-table sh-mode-abbrev-table
comint-dynamic-complete-functions sh-dynamic-complete-functions
;; we can't look if previous line ended with `\'
comint-prompt-regexp "^[ \t]*"
imenu-case-fold-search nil
font-lock-defaults
`((sh-font-lock-keywords
sh-font-lock-keywords-1 sh-font-lock-keywords-2)
......@@ -1403,13 +1406,14 @@ with your script for an edit-interpret-debug cycle."
(defun sh-font-lock-keywords (&optional keywords)
"Function to get simple fontification based on `sh-font-lock-keywords'.
This adds rules for comments and assignments."
(sh-feature sh-font-lock-keywords
(sh-feature sh-font-lock-keywords-var
(when (stringp (sh-feature sh-assignment-regexp))
(lambda (list)
`((,(sh-feature sh-assignment-regexp)
1 font-lock-variable-name-face)
,@keywords
,@list)))))
,@list
,@executable-font-lock-keywords)))))
(defun sh-font-lock-keywords-1 (&optional builtins)
"Function to get better fontification including keywords."
......@@ -1426,10 +1430,10 @@ This adds rules for comments and assignments."
"\\>")
(2 font-lock-keyword-face nil t)
(6 font-lock-builtin-face))
,@(sh-feature sh-font-lock-keywords-2)))
,@(sh-feature sh-font-lock-keywords-var-2)))
(,(concat keywords "\\)\\>")
2 font-lock-keyword-face)
,@(sh-feature sh-font-lock-keywords-1)))))
,@(sh-feature sh-font-lock-keywords-var-1)))))
(defun sh-font-lock-keywords-2 ()
"Function to get better fontification including keywords and builtins."
......@@ -1491,6 +1495,7 @@ This adds rules for comments and assignments."
("case" sh-handle-this-rc-case sh-handle-prev-rc-case))))
(defun sh-set-shell (shell &optional no-query-flag insert-flag)
"Set this buffer's shell to SHELL (a string).
When used interactively, insert the proper starting #!-line,
......@@ -1523,13 +1528,10 @@ Calls the value of `sh-set-shell-hook' if set."
(if (eq tem t)
(setq require-final-newline mode-require-final-newline)))
(setq
comment-start-skip "#+[\t ]*"
local-abbrev-table sh-mode-abbrev-table
mode-line-process (format "[%s]" sh-shell)
sh-shell-variables nil
sh-shell-variables-initialized nil
imenu-generic-expression (sh-feature sh-imenu-generic-expression)
imenu-case-fold-search nil)
imenu-generic-expression (sh-feature sh-imenu-generic-expression))
(make-local-variable 'sh-mode-syntax-table)
(let ((tem (sh-feature sh-mode-syntax-table-input)))
(setq sh-mode-syntax-table
......@@ -1557,10 +1559,13 @@ Calls the value of `sh-set-shell-hook' if set."
(message "Indentation setup for shell type %s" sh-shell))
(message "No indentation for this shell type.")
(setq indent-line-function 'sh-basic-indent-line))
(when font-lock-mode
(setq font-lock-set-defaults nil)
(font-lock-set-defaults)
(font-lock-fontify-buffer))
(run-hooks 'sh-set-shell-hook))
(defun sh-feature (alist &optional function)
"Index ALIST by the current shell.
If ALIST isn't a list where every element is a cons, it is returned as is.
......@@ -1578,15 +1583,16 @@ Else indexing follows an inheritance logic which works in two ways:
one shell to be derived from another shell.
The value thus determined is physically replaced into the alist.
Optional FUNCTION is applied to the determined value and the result is cached
in ALIST."
If FUNCTION is non-nil, it is called with one argument,
the value thus obtained, and the result is used instead."
(or (if (consp alist)
;; Check for something that isn't a valid alist.
(let ((l alist))
(while (and l (consp (car l)))
(setq l (cdr l)))
(if l alist)))
(if function
(cdr (assoc (setq function (cons sh-shell function)) alist)))
(let ((orig-sh-shell sh-shell))
(let ((sh-shell sh-shell)
elt val)
(while (and sh-shell
......@@ -1595,22 +1601,20 @@ in ALIST."
;; If the shell is not known, treat it as sh.
(unless elt
(setq elt (assq 'sh alist)))
(if (and (consp (setq val (cdr elt)))
(setq val (cdr elt))
(if (and (consp val)
(memq (car val) '(sh-append sh-modify)))
(setcdr elt
(setq val
(apply (car val)
;; Refer to the value for a different shell,
;; as a kind of inheritance.
(let ((sh-shell (car (cdr val))))
(if (assq sh-shell alist)
(sh-feature alist)
(eval sh-shell)))
(cddr val)))))
(sh-feature alist))
(cddr val))))
(if function
(nconc alist
(list (cons function
(setq sh-shell (car function)
val (funcall (cdr function) val))))))
val)))
(setq sh-shell orig-sh-shell
val (funcall function val)))
val))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment