X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/56ce0469b54e50e65158905d38c4857b7cc831f0..4f124fb5287c38e0f8e507a2b8a5edd4d0cfb42c:/lisp/progmodes/scheme.el diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index 127efad288..13dd790b6a 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -1,4 +1,4 @@ -;;; scheme.el --- Scheme (and DSSSL) editing mode. +;;; scheme.el --- Scheme (and DSSSL) editing mode ;; Copyright (C) 1986, 87, 88, 97, 1998 Free Software Foundation, Inc. @@ -53,59 +53,58 @@ (require 'lisp-mode) -(defvar scheme-mode-syntax-table nil) -(if (not scheme-mode-syntax-table) - (let ((i 0)) - (setq scheme-mode-syntax-table (make-syntax-table)) - (set-syntax-table scheme-mode-syntax-table) - - ;; Default is atom-constituent. - (while (< i 256) - (modify-syntax-entry i "_ ") - (setq i (1+ i))) - - ;; Word components. - (setq i ?0) - (while (<= i ?9) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - (setq i ?A) - (while (<= i ?Z) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - (setq i ?a) - (while (<= i ?z) - (modify-syntax-entry i "w ") - (setq i (1+ i))) - - ;; Whitespace - (modify-syntax-entry ?\t " ") - (modify-syntax-entry ?\n "> ") - (modify-syntax-entry ?\f " ") - (modify-syntax-entry ?\r " ") - (modify-syntax-entry ? " ") - - ;; These characters are delimiters but otherwise undefined. - ;; Brackets and braces balance for editing convenience. - (modify-syntax-entry ?\[ "(] ") - (modify-syntax-entry ?\] ")[ ") - (modify-syntax-entry ?{ "(} ") - (modify-syntax-entry ?} "){ ") - (modify-syntax-entry ?\| " 23") - - ;; Other atom delimiters - (modify-syntax-entry ?\( "() ") - (modify-syntax-entry ?\) ")( ") - (modify-syntax-entry ?\; "< ") - (modify-syntax-entry ?\" "\" ") - (modify-syntax-entry ?' " p") - (modify-syntax-entry ?` " p") - - ;; Special characters - (modify-syntax-entry ?, "_ p") - (modify-syntax-entry ?@ "_ p") - (modify-syntax-entry ?# "_ p14") - (modify-syntax-entry ?\\ "\\ "))) +(defvar scheme-mode-syntax-table + (let ((st (make-syntax-table)) + (i 0)) + + ;; Default is atom-constituent. + (while (< i 256) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + + ;; Word components. + (setq i ?0) + (while (<= i ?9) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + (setq i ?A) + (while (<= i ?Z) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + (setq i ?a) + (while (<= i ?z) + (modify-syntax-entry i "w " st) + (setq i (1+ i))) + + ;; Whitespace + (modify-syntax-entry ?\t " " st) + (modify-syntax-entry ?\n "> " st) + (modify-syntax-entry ?\f " " st) + (modify-syntax-entry ?\r " " st) + (modify-syntax-entry ? " " st) + + ;; These characters are delimiters but otherwise undefined. + ;; Brackets and braces balance for editing convenience. + (modify-syntax-entry ?\[ "(] " st) + (modify-syntax-entry ?\] ")[ " st) + (modify-syntax-entry ?{ "(} " st) + (modify-syntax-entry ?} "){ " st) + (modify-syntax-entry ?\| " 23" st) + + ;; Other atom delimiters + (modify-syntax-entry ?\( "() " st) + (modify-syntax-entry ?\) ")( " st) + (modify-syntax-entry ?\; "< " st) + (modify-syntax-entry ?\" "\" " st) + (modify-syntax-entry ?' "' " st) + (modify-syntax-entry ?` "' " st) + + ;; Special characters + (modify-syntax-entry ?, "' " st) + (modify-syntax-entry ?@ "' " st) + (modify-syntax-entry ?# "' 14" st) + (modify-syntax-entry ?\\ "\\ " st) + st)) (defvar scheme-mode-abbrev-table nil) (define-abbrev-table 'scheme-mode-abbrev-table ()) @@ -166,8 +165,9 @@ (setq font-lock-defaults '((scheme-font-lock-keywords scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) - nil t (("+-*/.<>=!?$%_&~^:" . "w")) beginning-of-defun - (font-lock-mark-block-function . mark-defun)))) + nil t (("+-*/.<>=!?$%_&~^:#" . "w")) beginning-of-defun + (font-lock-mark-block-function . mark-defun) + (font-lock-syntactic-face-function . lisp-font-lock-syntactic-face-function)))) (defvar scheme-mode-line-process "") @@ -264,6 +264,12 @@ See `run-hooks'." :type 'hook :group 'scheme) +;; This is shared by cmuscheme and xscheme. +(defcustom scheme-program-name "scheme" + "*Program invoked by the `run-scheme' command." + :type 'string + :group 'scheme) + (defvar dsssl-imenu-generic-expression ;; Perhaps this should also look for the style-sheet DTD tags. I'm ;; not sure it's the best way to organize it; perhaps one type @@ -322,7 +328,7 @@ See `run-hooks'." "do" "else" "for-each" "if" "lambda" "let" "let*" "let-syntax" "letrec" "letrec-syntax" ;; Hannes Haug wants: - "and" "or" "delay" + "and" "or" "delay" "force" ;; Stefan Monnier says don't bother: ;;"quasiquote" "quote" "unquote" "unquote-splicing" "map" "syntax" "syntax-rules") t) @@ -331,8 +337,8 @@ See `run-hooks'." ;; David Fox for SOS/STklos class specifiers. '("\\<<\\sw+>\\>" . font-lock-type-face) ;; - ;; Scheme `:' keywords as builtins. - '("\\<:\\sw+\\>" . font-lock-builtin-face) + ;; Scheme `:' and `#:' keywords as builtins. + '("\\<#?:\\sw+\\>" . font-lock-builtin-face) ))) "Gaudy expressions to highlight in Scheme modes.") @@ -424,7 +430,7 @@ that variable's value is a string." (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) (if (and (elt state 2) (not (looking-at "\\sw\\|\\s_"))) - ;; car of form doesn't seem to be a a symbol + ;; car of form doesn't seem to be a symbol (progn (if (not (> (save-excursion (forward-line 1) (point)) calculate-lisp-indent-last-sexp)) @@ -496,7 +502,7 @@ that variable's value is a string." (put 'let-syntax 'scheme-indent-function 1) (put 'letrec-syntax 'scheme-indent-function 1) (put 'syntax-rules 'scheme-indent-function 1) - +(put 'syntax-case 'scheme-indent-function 2) ; not r5rs (put 'call-with-input-file 'scheme-indent-function 1) (put 'with-input-from-file 'scheme-indent-function 1) @@ -552,4 +558,5 @@ that variable's value is a string." (provide 'scheme) +;;; arch-tag: a8f06bc1-ad11-42d2-9e36-ce651df37a90 ;;; scheme.el ends here