# HG changeset patch # User Karl Heuer # Date 821229593 0 # Node ID 2a05fc406f3a27a8b890dfc183cbea1cca8c8e23 # Parent e7809b53da4db8d26fd79520afe0c8ea4e04fb0f (sh-alias-alist): Don't map sh to bash. (sh-canonicalize-shell): New function. (sh-shell-file): Renamed from sh-shell-path. (sh-set-shell): Don't set local-abbrev-table. (sh-abbrevs): Variable and function definition commented out. diff -r e7809b53da4d -r 2a05fc406f3a lisp/progmodes/sh-script.el --- a/lisp/progmodes/sh-script.el Tue Jan 09 23:19:28 1996 +0000 +++ b/lisp/progmodes/sh-script.el Tue Jan 09 23:19:53 1996 +0000 @@ -1,5 +1,5 @@ ;;; sh-script.el --- shell-script editing commands for Emacs -;; Copyright (C) 1993, 1994, 1995 by Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1995, 1996 by Free Software Foundation, Inc. ;; Author: Daniel.Pfeiffer@Informatik.START.dbp.de, fax (+49 69) 7588-2389 ;; Version: 2.0e @@ -90,8 +90,7 @@ (defvar sh-alias-alist (nconc (if (eq system-type 'linux) '((csh . tcsh) - (ksh . pdksh) - (sh . bash))) + (ksh . pdksh))) ;; for the time being '((ksh . ksh88) (sh5 . sh))) @@ -100,8 +99,8 @@ shell it really is.") -(defvar sh-shell-path (or (getenv "SHELL") "/bin/sh") - "*The executable of the shell being programmed.") +(defvar sh-shell-file (or (getenv "SHELL") "/bin/sh") + "*The executable file name for the shell being programmed.") (defvar sh-shell-arg @@ -116,46 +115,51 @@ -(defvar sh-shell (or (cdr (assq (intern (file-name-nondirectory sh-shell-path)) - sh-alias-alist)) - (intern (file-name-nondirectory sh-shell-path))) +(defun sh-canonicalize-shell (shell) + "Convert a shell name SHELL to the one we should handle it as." + (or (symbolp shell) + (setq shell (intern shell))) + (or (cdr (assq shell sh-alias-alist)) + shell)) + +(defvar sh-shell (sh-canonicalize-shell (file-name-nondirectory sh-shell-file)) "The shell being programmed. This is set by \\[sh-set-shell].") - - -(defvar sh-abbrevs - '((csh eval sh-abbrevs shell - "switch" 'sh-case - "getopts" 'sh-while-getopts) +;;; I turned off this feature because it doesn't permit typing commands +;;; in the usual way without help. +;;;(defvar sh-abbrevs +;;; '((csh eval sh-abbrevs shell +;;; "switch" 'sh-case +;;; "getopts" 'sh-while-getopts) - (es eval sh-abbrevs shell - "function" 'sh-function) +;;; (es eval sh-abbrevs shell +;;; "function" 'sh-function) - (ksh88 eval sh-abbrevs sh - "select" 'sh-select) +;;; (ksh88 eval sh-abbrevs sh +;;; "select" 'sh-select) - (rc eval sh-abbrevs shell - "case" 'sh-case - "function" 'sh-function) +;;; (rc eval sh-abbrevs shell +;;; "case" 'sh-case +;;; "function" 'sh-function) - (sh eval sh-abbrevs shell - "case" 'sh-case - "function" 'sh-function - "until" 'sh-until - "getopts" 'sh-while-getopts) +;;; (sh eval sh-abbrevs shell +;;; "case" 'sh-case +;;; "function" 'sh-function +;;; "until" 'sh-until +;;; "getopts" 'sh-while-getopts) - ;; The next entry is only used for defining the others - (shell "for" sh-for - "loop" sh-indexed-loop - "if" sh-if - "tmpfile" sh-tmp-file - "while" sh-while) +;;; ;; The next entry is only used for defining the others +;;; (shell "for" sh-for +;;; "loop" sh-indexed-loop +;;; "if" sh-if +;;; "tmpfile" sh-tmp-file +;;; "while" sh-while) - (zsh eval sh-abbrevs ksh88 - "repeat" 'sh-repeat)) - "Abbrev-table used in Shell-Script mode. See `sh-feature'. -Due to the internal workings of abbrev tables, the shell name symbol is -actually defined as the table for the like of \\[edit-abbrevs].") +;;; (zsh eval sh-abbrevs ksh88 +;;; "repeat" 'sh-repeat)) +;;; "Abbrev-table used in Shell-Script mode. See `sh-feature'. +;;;Due to the internal workings of abbrev tables, the shell name symbol is +;;;actually defined as the table for the like of \\[edit-abbrevs].") @@ -574,7 +578,7 @@ Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. If you generally program a shell different from your login shell you can -set `sh-shell-path' accordingly. If your shell's file name doesn't correctly +set `sh-shell-file' accordingly. If your shell's file name doesn't correctly indicate what shell it is use `sh-alias-alist' to translate. If your shell gives error messages with line numbers, you can use \\[executable-interpret] @@ -591,7 +595,7 @@ (make-local-variable 'comment-start-skip) (make-local-variable 'require-final-newline) (make-local-variable 'sh-header-marker) - (make-local-variable 'sh-shell-path) + (make-local-variable 'sh-shell-file) (make-local-variable 'sh-shell) (make-local-variable 'skeleton-pair-alist) (make-local-variable 'skeleton-pair-filter) @@ -641,7 +645,7 @@ (sh-set-shell (if (looking-at "#![\t ]*\\([^\t\n ]+\\)") (match-string 1) - sh-shell-path)) + sh-shell-file)) (run-hooks 'sh-mode-hook)) ;;;###autoload (defalias 'shell-script-mode 'sh-mode) @@ -701,8 +705,8 @@ (setq sh-shell (intern (file-name-nondirectory shell)) sh-shell (or (cdr (assq sh-shell sh-alias-alist)) sh-shell) - sh-shell-path (executable-set-magic shell (sh-feature sh-shell-arg)) - local-abbrev-table (sh-feature sh-abbrevs) + sh-shell-file (executable-set-magic shell (sh-feature sh-shell-arg)) +;;; local-abbrev-table (sh-feature sh-abbrevs) require-final-newline (sh-feature sh-require-final-newline) font-lock-keywords nil ; force resetting comment-start-skip (concat (sh-feature sh-comment-prefix) "#+[\t ]*") @@ -776,36 +780,37 @@ -(defun sh-abbrevs (ancestor &rest list) - "Iff it isn't, define the current shell as abbrev table and fill that. -Abbrev table will inherit all abbrevs from ANCESTOR, which is either an abbrev -table or a list of (NAME1 EXPANSION1 ...). In addition it will define abbrevs -according to the remaining arguments NAMEi EXPANSIONi ... -EXPANSION may be either a string or a skeleton command." - (or (if (boundp sh-shell) - (symbol-value sh-shell)) - (progn - (if (listp ancestor) - (nconc list ancestor)) - (define-abbrev-table sh-shell ()) - (if (vectorp ancestor) - (mapatoms (lambda (atom) - (or (eq atom 0) - (define-abbrev (symbol-value sh-shell) - (symbol-name atom) - (symbol-value atom) - (symbol-function atom)))) - ancestor)) - (while list - (define-abbrev (symbol-value sh-shell) - (car list) - (if (stringp (car (cdr list))) - (car (cdr list)) - "") - (if (symbolp (car (cdr list))) - (car (cdr list)))) - (setq list (cdr (cdr list))))) - (symbol-value sh-shell))) +;;; I commented this out because nobody calls it -- rms. +;;;(defun sh-abbrevs (ancestor &rest list) +;;; "Iff it isn't, define the current shell as abbrev table and fill that. +;;;Abbrev table will inherit all abbrevs from ANCESTOR, which is either an abbrev +;;;table or a list of (NAME1 EXPANSION1 ...). In addition it will define abbrevs +;;;according to the remaining arguments NAMEi EXPANSIONi ... +;;;EXPANSION may be either a string or a skeleton command." +;;; (or (if (boundp sh-shell) +;;; (symbol-value sh-shell)) +;;; (progn +;;; (if (listp ancestor) +;;; (nconc list ancestor)) +;;; (define-abbrev-table sh-shell ()) +;;; (if (vectorp ancestor) +;;; (mapatoms (lambda (atom) +;;; (or (eq atom 0) +;;; (define-abbrev (symbol-value sh-shell) +;;; (symbol-name atom) +;;; (symbol-value atom) +;;; (symbol-function atom)))) +;;; ancestor)) +;;; (while list +;;; (define-abbrev (symbol-value sh-shell) +;;; (car list) +;;; (if (stringp (car (cdr list))) +;;; (car (cdr list)) +;;; "") +;;; (if (symbolp (car (cdr list))) +;;; (car (cdr list)))) +;;; (setq list (cdr (cdr list))))) +;;; (symbol-value sh-shell))) (defun sh-mode-syntax-table (table &rest list) @@ -882,9 +887,9 @@ (shell-command-on-region (point-min) (setq end (+ sh-header-marker (- end start))) - sh-shell-path) + sh-shell-file) (delete-region sh-header-marker end))) - (shell-command-on-region start end (concat sh-shell-path " -"))))) + (shell-command-on-region start end (concat sh-shell-file " -"))))) (defun sh-remember-variable (var)