emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/progmodes/sh-script.el


From: Richard M . Stallman
Subject: [Emacs-diffs] Changes to emacs/lisp/progmodes/sh-script.el
Date: Sun, 14 Aug 2005 22:01:39 -0400

Index: emacs/lisp/progmodes/sh-script.el
diff -c emacs/lisp/progmodes/sh-script.el:1.161 
emacs/lisp/progmodes/sh-script.el:1.162
*** emacs/lisp/progmodes/sh-script.el:1.161     Wed Jul 13 04:55:41 2005
--- emacs/lisp/progmodes/sh-script.el   Mon Aug 15 02:01:38 2005
***************
*** 815,821 ****
    :group 'sh-script
    :version "22.1")
  
! (defvar sh-font-lock-keywords
    '((csh sh-append shell
         ("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1
            font-lock-variable-name-face))
--- 815,821 ----
    :group 'sh-script
    :version "22.1")
  
! (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,844 ****
         1 font-lock-negation-char-face))
  
      ;; The next entry is only used for defining the others
!     (shell sh-append executable-font-lock-keywords
             ;; Using font-lock-string-face here confuses sh-get-indent-info.
             ("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'sh-escaped-newline)
           ("\\\\[^A-Za-z0-9]" 0 font-lock-string-face)
--- 838,844 ----
         1 font-lock-negation-char-face))
  
      ;; The next entry is only used for defining the others
!     (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,860 ****
          ("^\\(\\sw+\\):"  1 font-lock-variable-name-face)))
    "Default expressions to highlight in Shell Script modes.  See 
`sh-feature'.")
  
! (defvar sh-font-lock-keywords-1
    '((sh "[ \t]in\\>"))
    "Subdued level highlighting for Shell Script modes.")
  
! (defvar sh-font-lock-keywords-2 ()
    "Gaudy level highlighting for Shell Script modes.")
  
  ;; These are used for the syntax table stuff (derived from cperl-mode).
--- 850,860 ----
          ("^\\(\\sw+\\):"  1 font-lock-variable-name-face)))
    "Default expressions to highlight in Shell Script modes.  See 
`sh-feature'.")
  
! (defvar sh-font-lock-keywords-var-1
    '((sh "[ \t]in\\>"))
    "Subdued level highlighting for Shell Script modes.")
  
! (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,1372 ****
--- 1364,1375 ----
        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,1415 ****
  (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
              (when (stringp (sh-feature sh-assignment-regexp))
                (lambda (list)
                  `((,(sh-feature sh-assignment-regexp)
                     1 font-lock-variable-name-face)
                    ,@keywords
!                   ,@list)))))
  
  (defun sh-font-lock-keywords-1 (&optional builtins)
    "Function to get better fontification including keywords."
--- 1406,1419 ----
  (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-var
              (when (stringp (sh-feature sh-assignment-regexp))
                (lambda (list)
                  `((,(sh-feature sh-assignment-regexp)
                     1 font-lock-variable-name-face)
                    ,@keywords
!                   ,@list
!                   ,@executable-font-lock-keywords)))))
  
  (defun sh-font-lock-keywords-1 (&optional builtins)
    "Function to get better fontification including keywords."
***************
*** 1426,1435 ****
                         "\\>")
                (2 font-lock-keyword-face nil t)
                (6 font-lock-builtin-face))
!              ,@(sh-feature sh-font-lock-keywords-2)))
         (,(concat keywords "\\)\\>")
          2 font-lock-keyword-face)
!        ,@(sh-feature sh-font-lock-keywords-1)))))
  
  (defun sh-font-lock-keywords-2 ()
    "Function to get better fontification including keywords and builtins."
--- 1430,1439 ----
                         "\\>")
                (2 font-lock-keyword-face nil t)
                (6 font-lock-builtin-face))
!              ,@(sh-feature sh-font-lock-keywords-var-2)))
         (,(concat keywords "\\)\\>")
          2 font-lock-keyword-face)
!        ,@(sh-feature sh-font-lock-keywords-var-1)))))
  
  (defun sh-font-lock-keywords-2 ()
    "Function to get better fontification including keywords and builtins."
***************
*** 1491,1496 ****
--- 1495,1501 ----
       ("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,1535 ****
      (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)
    (make-local-variable 'sh-mode-syntax-table)
    (let ((tem (sh-feature sh-mode-syntax-table-input)))
      (setq sh-mode-syntax-table
--- 1528,1537 ----
      (if (eq tem t)
        (setq require-final-newline mode-require-final-newline)))
    (setq
        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))
    (make-local-variable 'sh-mode-syntax-table)
    (let ((tem (sh-feature sh-mode-syntax-table-input)))
      (setq sh-mode-syntax-table
***************
*** 1557,1566 ****
        (message "Indentation setup for shell type %s" sh-shell))
      (message "No indentation for this shell type.")
      (setq indent-line-function 'sh-basic-indent-line))
    (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.
--- 1559,1571 ----
        (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,1616 ****
      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."
    (or (if (consp 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 ((sh-shell sh-shell)
!           elt val)
!       (while (and sh-shell
!                   (not (setq elt (assq sh-shell alist))))
!         (setq sh-shell (cdr (assq sh-shell sh-ancestor-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)))
!                (memq (car val) '(sh-append sh-modify)))
!           (setcdr elt
!                   (setq val
!                         (apply (car val)
!                                (let ((sh-shell (car (cdr val))))
!                                    (if (assq sh-shell alist)
!                                        (sh-feature alist)
!                                      (eval sh-shell)))
!                                (cddr val)))))
!       (if function
!           (nconc alist
!                  (list (cons function
!                              (setq sh-shell (car function)
!                                    val (funcall (cdr function) val))))))
!       val)))
  
  
  
--- 1583,1620 ----
      one shell to be derived from another shell.
      The value thus determined is physically replaced into the 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)))
! 
!       (let ((orig-sh-shell sh-shell))
!       (let ((sh-shell sh-shell)
!             elt val)
!         (while (and sh-shell
!                     (not (setq elt (assq sh-shell alist))))
!           (setq sh-shell (cdr (assq sh-shell sh-ancestor-alist))))
!         ;; If the shell is not known, treat it as sh.
!         (unless elt
!           (setq elt (assq 'sh alist)))
!         (setq val (cdr elt))
!         (if (and (consp val)
!                  (memq (car val) '(sh-append sh-modify)))
!             (setq val
!                   (apply (car val)
!                          ;; Refer to the value for a different shell,
!                          ;; as a kind of inheritance.
!                          (let ((sh-shell (car (cdr val))))
!                            (sh-feature alist))
!                          (cddr val))))
!         (if function
!             (setq sh-shell orig-sh-shell
!                   val (funcall function val)))
!         val))))
  
  
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]