Mercurial > emacs
annotate lisp/progmodes/sh-script.el @ 66963:a11fdee52c05
Add :link (custom-group-link font-lock-faces) to defgroup.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Thu, 17 Nov 2005 07:40:11 +0000 |
parents | 5ab4a52a31ac |
children | 962ab95567f0 |
rev | line source |
---|---|
6463 | 1 ;;; sh-script.el --- shell-script editing commands for Emacs |
14169 | 2 |
59622
5ec981fa30e5
(sh-here-doc-open-re): Don't allow `|' or other
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59566
diff
changeset
|
3 ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2001, 2003, 2004, 2005 |
37296
f9dbfb08ed11
(sh-indent-line): Add optional PREFIX-ARG
Gerd Moellmann <gerd@gnu.org>
parents:
36631
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
6463 | 5 |
23869 | 6 ;; Author: Daniel Pfeiffer <occitan@esperanto.org> |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
7 ;; Version: 2.0f |
6463 | 8 ;; Maintainer: FSF |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
9 ;; Keywords: languages, unix |
6463 | 10 |
11 ;; This file is part of GNU Emacs. | |
12 | |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
14 ;; it under the terms of the GNU General Public License as published by | |
15 ;; the Free Software Foundation; either version 2, or (at your option) | |
16 ;; any later version. | |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
14169 | 24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
26 ;; Boston, MA 02110-1301, USA. | |
6463 | 27 |
28 ;;; Commentary: | |
29 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
30 ;; Major mode for editing shell scripts. Bourne, C and rc shells as well |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
31 ;; as various derivatives are supported and easily derived from. Structured |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
32 ;; statements can be inserted with one command or abbrev. Completion is |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
33 ;; available for filenames, variables known from the script, the shell and |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
34 ;; the environment as well as commands. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
35 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
36 ;;; Known Bugs: |
6463 | 37 |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
38 ;; - In Bourne the keyword `in' is not anchored to case, for, select ... |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
39 ;; - Variables in `"' strings aren't fontified because there's no way of |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
40 ;; syntactically distinguishing those from `'' strings. |
8257
bbf6304598d9
"Comment out" autoload cookies.
Richard M. Stallman <rms@gnu.org>
parents:
8121
diff
changeset
|
41 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
42 ;; Indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
43 ;; =========== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
44 ;; Indentation for rc and es modes is very limited, but for Bourne shells |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
45 ;; and its derivatives it is quite customizable. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
46 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
47 ;; The following description applies to sh and derived shells (bash, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
48 ;; zsh, ...). |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
49 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
50 ;; There are various customization variables which allow tailoring to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
51 ;; a wide variety of styles. Most of these variables are named |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
52 ;; sh-indent-for-XXX and sh-indent-after-XXX. For example. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
53 ;; sh-indent-after-if controls the indenting of a line following |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
54 ;; an if statement, and sh-indent-for-fi controls the indentation |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
55 ;; of the line containing the fi. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
56 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
57 ;; You can set each to a numeric value, but it is often more convenient |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
58 ;; to a symbol such as `+' which uses the value of variable `sh-basic-offset'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
59 ;; By changing this one variable you can increase or decrease how much |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
60 ;; indentation there is. Valid symbols: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
61 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
62 ;; + Indent right by sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
63 ;; - Indent left by sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
64 ;; ++ Indent right twice sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
65 ;; -- Indent left twice sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
66 ;; * Indent right half sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
67 ;; / Indent left half sh-basic-offset. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
68 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
69 ;; There are 4 commands to help set the indentation variables: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
70 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
71 ;; `sh-show-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
72 ;; This shows what variable controls the indentation of the current |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
73 ;; line and its value. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
74 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
75 ;; `sh-set-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
76 ;; This allows you to set the value of the variable controlling the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
77 ;; current line's indentation. You can enter a number or one of a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
78 ;; number of special symbols to denote the value of sh-basic-offset, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
79 ;; or its negative, or half it, or twice it, etc. If you've used |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
80 ;; cc-mode this should be familiar. If you forget which symbols are |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
81 ;; valid simply press C-h at the prompt. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
82 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
83 ;; `sh-learn-line-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
84 ;; Simply make the line look the way you want it, then invoke this |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
85 ;; command. It will set the variable to the value that makes the line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
86 ;; indent like that. If called with a prefix argument then it will set |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
87 ;; the value to one of the symbols if applicable. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
88 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
89 ;; `sh-learn-buffer-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
90 ;; This is the deluxe function! It "learns" the whole buffer (use |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
91 ;; narrowing if you want it to process only part). It outputs to a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
92 ;; buffer *indent* any conflicts it finds, and all the variables it has |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
93 ;; learned. This buffer is a sort of Occur mode buffer, allowing you to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
94 ;; easily find where something was set. It is popped to automatically |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
95 ;; if there are any conflicts found or if `sh-popup-occur-buffer' is |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
96 ;; non-nil. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
97 ;; `sh-indent-comment' will be set if all comments follow the same |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
98 ;; pattern; if they don't it will be set to nil. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
99 ;; Whether `sh-basic-offset' is set is determined by variable |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
100 ;; `sh-learn-basic-offset'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
101 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
102 ;; Unfortunately, `sh-learn-buffer-indent' can take a long time to run |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
103 ;; (e.g. if there are large case statements). Perhaps it does not make |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
104 ;; sense to run it on large buffers: if lots of lines have different |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
105 ;; indentation styles it will produce a lot of diagnostics in the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
106 ;; *indent* buffer; if there is a consistent style then running |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
107 ;; `sh-learn-buffer-indent' on a small region of the buffer should |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
108 ;; suffice. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
109 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
110 ;; Saving indentation values |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
111 ;; ------------------------- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
112 ;; After you've learned the values in a buffer, how to you remember |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
113 ;; them? Originally I had hoped that `sh-learn-buffer-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
114 ;; would make this unnecessary; simply learn the values when you visit |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
115 ;; the buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
116 ;; You can do this automatically like this: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
117 ;; (add-hook 'sh-set-shell-hook 'sh-learn-buffer-indent) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
118 ;; |
47264
05606bafb8f5
(sh-indent-for-fi, sh-indent-for-done): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents:
45900
diff
changeset
|
119 ;; However... `sh-learn-buffer-indent' is extremely slow, |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
120 ;; especially on large-ish buffer. Also, if there are conflicts the |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
121 ;; "last one wins" which may not produce the desired setting. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
122 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
123 ;; So...There is a minimal way of being able to save indentation values and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
124 ;; to reload them in another buffer or at another point in time. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
125 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
126 ;; Use `sh-name-style' to give a name to the indentation settings of |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
127 ;; the current buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
128 ;; Use `sh-load-style' to load indentation settings for the current |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
129 ;; buffer from a specific style. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
130 ;; Use `sh-save-styles-to-buffer' to write all the styles to a buffer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
131 ;; in lisp code. You can then store it in a file and later use |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
132 ;; `load-file' to load it. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
133 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
134 ;; Indentation variables - buffer local or global? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
135 ;; ---------------------------------------------- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
136 ;; I think that often having them buffer-local makes sense, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
137 ;; especially if one is using `sh-learn-buffer-indent'. However, if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
138 ;; a user sets values using customization, these changes won't appear |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
139 ;; to work if the variables are already local! |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
140 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
141 ;; To get round this, there is a variable `sh-make-vars-local' and 2 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
142 ;; functions: `sh-make-vars-local' and `sh-reset-indent-vars-to-global-values'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
143 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
144 ;; If `sh-make-vars-local' is non-nil, then these variables become |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
145 ;; buffer local when the mode is established. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
146 ;; If this is nil, then the variables are global. At any time you |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
147 ;; can make them local with the command `sh-make-vars-local'. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
148 ;; Conversely, to update with the global values you can use the |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
149 ;; command `sh-reset-indent-vars-to-global-values'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
150 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
151 ;; This may be awkward, but the intent is to cover all cases. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
152 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
153 ;; Awkward things, pitfalls |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
154 ;; ------------------------ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
155 ;; Indentation for a sh script is complicated for a number of reasons: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
156 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
157 ;; 1. You can't format by simply looking at symbols, you need to look |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
158 ;; at keywords. [This is not the case for rc and es shells.] |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
159 ;; 2. The character ")" is used both as a matched pair "(" ... ")" and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
160 ;; as a stand-alone symbol (in a case alternative). This makes |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
161 ;; things quite tricky! |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
162 ;; 3. Here-documents in a script should be treated "as is", and when |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
163 ;; they terminate we want to revert to the indentation of the line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
164 ;; containing the "<<" symbol. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
165 ;; 4. A line may be continued using the "\". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
166 ;; 5. The character "#" (outside a string) normally starts a comment, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
167 ;; but it doesn't in the sequence "$#"! |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
168 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
169 ;; To try and address points 2 3 and 5 I used a feature that cperl mode |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
170 ;; uses, that of a text's syntax property. This, however, has 2 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
171 ;; disadvantages: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
172 ;; 1. We need to scan the buffer to find which ")" symbols belong to a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
173 ;; case alternative, to find any here documents, and handle "$#". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
174 ;; 2. Setting the text property makes the buffer modified. If the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
175 ;; buffer is read-only buffer we have to cheat and bypass the read-only |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
176 ;; status. This is for cases where the buffer started read-only buffer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
177 ;; but the user issued `toggle-read-only'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
178 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
179 ;; Bugs |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
180 ;; ---- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
181 ;; - Indenting many lines is slow. It currently does each line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
182 ;; independently, rather than saving state information. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
183 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
184 ;; - `sh-learn-buffer-indent' is extremely slow. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
185 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
186 ;; Richard Sharman <rsharman@pobox.com> June 1999. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
187 |
6463 | 188 ;;; Code: |
189 | |
190 ;; page 1: variables and settings | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
191 ;; page 2: indentation stuff |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
192 ;; page 3: mode-command and utility functions |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
193 ;; page 4: statement syntax-commands for various shells |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
194 ;; page 5: various other commands |
6463 | 195 |
32503 | 196 (eval-when-compile |
197 (require 'skeleton) | |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
198 (require 'cl) |
32503 | 199 (require 'comint)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
200 (require 'executable) |
6463 | 201 |
65239
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
202 (defvar font-lock-comment-face) |
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
203 (defvar font-lock-set-defaults) |
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
204 (defvar font-lock-string-face) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
205 |
17068
d1391b21626f
(sh-mode-hook, sh-set-shell-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
16839
diff
changeset
|
206 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
207 (defgroup sh nil |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
208 "Shell programming utilities." |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
209 :group 'unix |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
210 :group 'languages) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
211 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
212 (defgroup sh-script nil |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
213 "Shell script mode." |
66963
a11fdee52c05
Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents:
66269
diff
changeset
|
214 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
215 :group 'sh |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
216 :prefix "sh-") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
217 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
218 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
219 (defcustom sh-ancestor-alist |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
220 '((ash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
221 (bash . jsh) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
222 (bash2 . jsh) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
223 (dtksh . ksh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
224 (es . rc) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
225 (itcsh . tcsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
226 (jcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
227 (jsh . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
228 (ksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
229 (ksh88 . jsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
230 (oash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
231 (pdksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
232 (posix . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
233 (tcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
234 (wksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
235 (wsh . sh) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
236 (zsh . ksh88) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
237 (rpm . sh)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
238 "*Alist showing the direct ancestor of various shells. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
239 This is the basis for `sh-feature'. See also `sh-alias-alist'. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
240 By default we have the following three hierarchies: |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
241 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
242 csh C Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
243 jcsh C Shell with Job Control |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
244 tcsh Turbo C Shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
245 itcsh ? Turbo C Shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
246 rc Plan 9 Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
247 es Extensible Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
248 sh Bourne Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
249 ash ? Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
250 jsh Bourne Shell with Job Control |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
251 bash GNU Bourne Again Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
252 ksh88 Korn Shell '88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
253 ksh Korn Shell '93 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
254 dtksh CDE Desktop Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
255 pdksh Public Domain Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
256 wksh Window Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
257 zsh Z Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
258 oash SCO OA (curses) Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
259 posix IEEE 1003.2 Shell Standard |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
260 wsh ? Shell" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
261 :type '(repeat (cons symbol symbol)) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
262 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
263 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
264 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
265 (defcustom sh-alias-alist |
47732
3712c799f805
(sh-alias-alist): Use append instead of nconc.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47595
diff
changeset
|
266 (append (if (eq system-type 'gnu/linux) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
267 '((csh . tcsh) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
268 (ksh . pdksh))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
269 ;; for the time being |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
270 '((ksh . ksh88) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
271 (bash2 . bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
272 (sh5 . sh))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
273 "*Alist for transforming shell names to what they really are. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
274 Use this where the name of the executable doesn't correspond to the type of |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
275 shell it really is." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
276 :type '(repeat (cons symbol symbol)) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
277 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
278 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
279 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
280 (defcustom sh-shell-file |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
281 (or |
16839
daaa2c5bb40a
(sh-shell-file): Downcase and remove extension on shells in NT.
Richard M. Stallman <rms@gnu.org>
parents:
16810
diff
changeset
|
282 ;; On MSDOS and Windows, collapse $SHELL to lower-case and remove |
daaa2c5bb40a
(sh-shell-file): Downcase and remove extension on shells in NT.
Richard M. Stallman <rms@gnu.org>
parents:
16810
diff
changeset
|
283 ;; the executable extension, so comparisons with the list of |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
284 ;; known shells work. |
16839
daaa2c5bb40a
(sh-shell-file): Downcase and remove extension on shells in NT.
Richard M. Stallman <rms@gnu.org>
parents:
16810
diff
changeset
|
285 (and (memq system-type '(ms-dos windows-nt)) |
21925
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
286 (let* ((shell (getenv "SHELL")) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
287 (shell-base |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
288 (and shell (file-name-nondirectory shell)))) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
289 ;; shell-script mode doesn't support DOS/Windows shells, |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
290 ;; so use the default instead. |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
291 (if (or (null shell) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
292 (member (downcase shell-base) |
21980
e73c0672d7b3
(sh-shell-file): Add cmdproxy to MS shells.
Richard M. Stallman <rms@gnu.org>
parents:
21925
diff
changeset
|
293 '("command.com" "cmd.exe" "4dos.com" "ndos.com" |
e73c0672d7b3
(sh-shell-file): Add cmdproxy to MS shells.
Richard M. Stallman <rms@gnu.org>
parents:
21925
diff
changeset
|
294 "cmdproxy.exe"))) |
21925
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
295 "/bin/sh" |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
296 (file-name-sans-extension (downcase shell))))) |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
297 (getenv "SHELL") |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
298 "/bin/sh") |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
299 "*The executable file name for the shell being programmed." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
300 :type 'string |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
301 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
302 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
303 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
304 (defcustom sh-shell-arg |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
305 ;; bash does not need any options when run in a shell script, |
14876
b39dde411ac8
(sh-shell-arg): Don't add any options for bash, ksh.
Richard M. Stallman <rms@gnu.org>
parents:
14849
diff
changeset
|
306 '((bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
307 (csh . "-f") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
308 (pdksh) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
309 ;; Bill_Mann@praxisint.com says -p with ksh can do harm. |
14876
b39dde411ac8
(sh-shell-arg): Don't add any options for bash, ksh.
Richard M. Stallman <rms@gnu.org>
parents:
14849
diff
changeset
|
310 (ksh88) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
311 ;; -p means don't initialize functions from the environment. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
312 (rc . "-p") |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
313 ;; Someone proposed -motif, but we don't want to encourage |
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
314 ;; use of a non-free widget set. |
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
315 (wksh) |
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
316 ;; -f means don't run .zshrc. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
317 (zsh . "-f")) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
318 "*Single argument string for the magic number. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
319 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
320 (choice (const :tag "No Arguments" nil) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
321 (string :tag "Arguments") |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
322 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
323 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
324 |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
325 (defcustom sh-imenu-generic-expression |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
326 `((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
327 . ((nil "^\\s-*\\(function\\s-+\\)?\\([A-Za-z_][A-Za-z_0-9]+\\)\\s-*()" 2)))) |
35180
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
328 "*Alist of regular expressions for recognizing shell function definitions. |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
329 See `sh-feature' and `imenu-generic-expression'." |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
330 :type '(alist :key-type (symbol :tag "Shell") |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
331 :value-type (alist :key-type (choice :tag "Title" |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
332 string |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
333 (const :tag "None" nil)) |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
334 :value-type |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
335 (repeat :tag "Regexp, index..." sexp))) |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
20900
diff
changeset
|
336 :group 'sh-script |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
337 :version "20.4") |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
338 |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
339 (defvar sh-shell-variables nil |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
340 "Alist of shell variable names that should be included in completion. |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
341 These are used for completion in addition to all the variables named |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
342 in `process-environment'. Each element looks like (VAR . VAR), where |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
343 the car and cdr are the same symbol.") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
344 |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
345 (defvar sh-shell-variables-initialized nil |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
346 "Non-nil if `sh-shell-variables' is initialized.") |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
347 |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
348 (defun sh-canonicalize-shell (shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
349 "Convert a shell name SHELL to the one we should handle it as." |
23589
660727693bf6
(sh-canonicalize-shell): Fix regexp.
Andreas Schwab <schwab@suse.de>
parents:
23511
diff
changeset
|
350 (if (string-match "\\.exe\\'" shell) |
23341
d29b6b51866f
(sh-set-shell): Remove .exe suffix from shell name.
Richard M. Stallman <rms@gnu.org>
parents:
22783
diff
changeset
|
351 (setq shell (substring shell 0 (match-beginning 0)))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
352 (or (symbolp shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
353 (setq shell (intern shell))) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
354 (or (cdr (assq shell sh-alias-alist)) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
355 shell)) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
356 |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
357 (defvar sh-shell (sh-canonicalize-shell (file-name-nondirectory sh-shell-file)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
358 "The shell being programmed. This is set by \\[sh-set-shell].") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
359 |
56688
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
360 (defvar sh-mode-abbrev-table nil) |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
361 |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
362 (define-abbrev-table 'sh-mode-abbrev-table ()) |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
363 |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
364 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
365 ;; I turned off this feature because it doesn't permit typing commands |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
366 ;; in the usual way without help. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
367 ;;(defvar sh-abbrevs |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
368 ;; '((csh sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
369 ;; "switch" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
370 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
371 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
372 ;; (es sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
373 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
374 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
375 ;; (ksh88 sh-abbrevs sh |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
376 ;; "select" 'sh-select) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
377 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
378 ;; (rc sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
379 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
380 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
381 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
382 ;; (sh sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
383 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
384 ;; "function" 'sh-function |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
385 ;; "until" 'sh-until |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
386 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
387 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
388 ;; ;; The next entry is only used for defining the others |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
389 ;; (shell "for" sh-for |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
390 ;; "loop" sh-indexed-loop |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
391 ;; "if" sh-if |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
392 ;; "tmpfile" sh-tmp-file |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
393 ;; "while" sh-while) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
394 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
395 ;; (zsh sh-abbrevs ksh88 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
396 ;; "repeat" 'sh-repeat)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
397 ;; "Abbrev-table used in Shell-Script mode. See `sh-feature'. |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
398 ;;;Due to the internal workings of abbrev tables, the shell name symbol is |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
399 ;;;actually defined as the table for the like of \\[edit-abbrevs].") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
400 |
6463 | 401 |
402 | |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
403 (defun sh-mode-syntax-table (table &rest list) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
404 "Copy TABLE and set syntax for successive CHARs according to strings S." |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
405 (setq table (copy-syntax-table table)) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
406 (while list |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
407 (modify-syntax-entry (pop list) (pop list) table)) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
408 table) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
409 |
52682
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
410 (defvar sh-mode-syntax-table nil |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
411 "The syntax table to use for Shell-Script mode. |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
412 This is buffer-local in every such buffer.") |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
413 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
414 (defvar sh-mode-default-syntax-table |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
415 (sh-mode-syntax-table () |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
416 ?\# "<" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
417 ?\n ">#" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
418 ?\" "\"\"" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
419 ?\' "\"'" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
420 ?\` "\"`" |
62242
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
421 ;; ?$ might also have a ". p" syntax. Both "'" and ". p" seem |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
422 ;; to work fine. This is needed so that dabbrev-expand |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
423 ;; $VARNAME works. |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
424 ?$ "'" |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
425 ?! "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
426 ?% "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
427 ?: "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
428 ?. "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
429 ?^ "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
430 ?~ "_" |
51970
be96dd81138a
(sh-mode-syntax-table): Change syntax of ?, to "_".
Andreas Schwab <schwab@suse.de>
parents:
51727
diff
changeset
|
431 ?, "_" |
57159
e00b0d40b4bc
(sh-mode-default-syntax-table): Set syntax of = to "." (punctuation).
Richard M. Stallman <rms@gnu.org>
parents:
56688
diff
changeset
|
432 ?= "." |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
433 ?< "." |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
434 ?> ".") |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
435 "Default syntax table for shell mode.") |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
436 |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
437 (defvar sh-mode-syntax-table-input |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
438 '((sh . nil)) |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
439 "Syntax-table used in Shell-Script mode. See `sh-feature'.") |
6463 | 440 |
441 (defvar sh-mode-map | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
442 (let ((map (make-sparse-keymap)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
443 (menu-map (make-sparse-keymap "Insert"))) |
6463 | 444 (define-key map "\C-c(" 'sh-function) |
445 (define-key map "\C-c\C-w" 'sh-while) | |
446 (define-key map "\C-c\C-u" 'sh-until) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
447 (define-key map "\C-c\C-t" 'sh-tmp-file) |
6463 | 448 (define-key map "\C-c\C-s" 'sh-select) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
449 (define-key map "\C-c\C-r" 'sh-repeat) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
450 (define-key map "\C-c\C-o" 'sh-while-getopts) |
6463 | 451 (define-key map "\C-c\C-l" 'sh-indexed-loop) |
452 (define-key map "\C-c\C-i" 'sh-if) | |
453 (define-key map "\C-c\C-f" 'sh-for) | |
454 (define-key map "\C-c\C-c" 'sh-case) | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
455 (define-key map "\C-c?" 'sh-show-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
456 (define-key map "\C-c=" 'sh-set-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
457 (define-key map "\C-c<" 'sh-learn-line-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
458 (define-key map "\C-c>" 'sh-learn-buffer-indent) |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
459 (define-key map "\C-c\C-\\" 'sh-backslash-region) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
460 |
6463 | 461 (define-key map "=" 'sh-assignment) |
462 (define-key map "\C-c+" 'sh-add) | |
13469
5bda9e4d85eb
(sh-mode-map): Put sh-execute-region on C-M-x.
Richard M. Stallman <rms@gnu.org>
parents:
13391
diff
changeset
|
463 (define-key map "\C-\M-x" 'sh-execute-region) |
5bda9e4d85eb
(sh-mode-map): Put sh-execute-region on C-M-x.
Richard M. Stallman <rms@gnu.org>
parents:
13391
diff
changeset
|
464 (define-key map "\C-c\C-x" 'executable-interpret) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
465 (define-key map "<" 'sh-maybe-here-document) |
12864
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
466 (define-key map "(" 'skeleton-pair-insert-maybe) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
467 (define-key map "{" 'skeleton-pair-insert-maybe) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
468 (define-key map "[" 'skeleton-pair-insert-maybe) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
469 (define-key map "'" 'skeleton-pair-insert-maybe) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
470 (define-key map "`" 'skeleton-pair-insert-maybe) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
471 (define-key map "\"" 'skeleton-pair-insert-maybe) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
472 |
49176
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
473 (define-key map [remap complete-tag] 'comint-dynamic-complete) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
474 (define-key map [remap newline-and-indent] 'sh-newline-and-indent) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
475 (define-key map [remap delete-backward-char] |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
476 'backward-delete-char-untabify) |
6463 | 477 (define-key map "\C-c:" 'sh-set-shell) |
49176
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
478 (define-key map [remap backward-sentence] 'sh-beginning-of-command) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
479 (define-key map [remap forward-sentence] 'sh-end-of-command) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
480 (define-key map [menu-bar insert] (cons "Insert" menu-map)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
481 (define-key menu-map [sh-while] '("While Loop" . sh-while)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
482 (define-key menu-map [sh-until] '("Until Loop" . sh-until)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
483 (define-key menu-map [sh-tmp-file] '("Temporary File" . sh-tmp-file)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
484 (define-key menu-map [sh-select] '("Select Statement" . sh-select)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
485 (define-key menu-map [sh-repeat] '("Repeat Loop" . sh-repeat)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
486 (define-key menu-map [sh-getopts] '("Options Loop" . sh-while-getopts)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
487 (define-key menu-map [sh-indexed-loop] '("Indexed Loop" . sh-indexed-loop)) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
488 (define-key menu-map [sh-if] '("If Statement" . sh-if)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
489 (define-key menu-map [sh-for] '("For Loop" . sh-for)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
490 (define-key menu-map [sh-case] '("Case Statement" . sh-case)) |
6463 | 491 map) |
492 "Keymap used in Shell-Script mode.") | |
493 | |
65384
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
494 (defvar sh-skeleton-pair-default-alist '((?( _ ?)) (?\)) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
495 (?[ ?\s _ ?\s ?]) (?\]) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
496 (?{ _ ?}) (?\})) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
497 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.") |
6463 | 498 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
499 (defcustom sh-dynamic-complete-functions |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
500 '(shell-dynamic-complete-environment-variable |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
501 shell-dynamic-complete-command |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
502 comint-dynamic-complete-filename) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
503 "*Functions for doing TAB dynamic completion." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
504 :type '(repeat function) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
505 :group 'sh-script) |
6463 | 506 |
507 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
508 (defcustom sh-require-final-newline |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
509 '((csh . t) |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
510 (pdksh . t)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
511 "*Value of `require-final-newline' in Shell-Script mode buffers. |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
512 \(SHELL . t) means use the value of `mode-require-final-newline' for SHELL. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
513 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
514 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
515 (choice (const :tag "require" t) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
516 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
517 :group 'sh-script) |
6463 | 518 |
519 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
520 (defcustom sh-assignment-regexp |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
521 '((csh . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
522 ;; actually spaces are only supported in let/(( ... )) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
523 (ksh88 . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
524 (rc . "\\<\\([a-zA-Z0-9_*]+\\)[ \t]*=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
525 (sh . "\\<\\([a-zA-Z0-9_]+\\)=")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
526 "*Regexp for the variable name and what may follow in an assignment. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
527 First grouping matches the variable name. This is upto and including the `=' |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
528 sign. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
529 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
530 (choice regexp |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
531 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
532 :group 'sh-script) |
6463 | 533 |
534 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
535 (defcustom sh-indentation 4 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
536 "The width for further indentation in Shell-Script mode." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
537 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
538 :group 'sh-script) |
6463 | 539 |
540 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
541 (defcustom sh-remember-variable-min 3 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
542 "*Don't remember variables less than this length for completing reads." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
543 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
544 :group 'sh-script) |
6463 | 545 |
546 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
547 (defvar sh-header-marker nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
548 "When non-nil is the end of header for prepending by \\[sh-execute-region]. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
549 That command is also used for setting this variable.") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
550 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
551 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
552 (defcustom sh-beginning-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
553 "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~a-zA-Z0-9:]\\)" |
6463 | 554 "*Regexp to determine the beginning of a shell command. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
555 The actual command starts at the beginning of the second \\(grouping\\)." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
556 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
557 :group 'sh-script) |
6463 | 558 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
559 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
560 (defcustom sh-end-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
561 "\\([/~a-zA-Z0-9:]\\)[ \t]*\\([;#)}`|&]\\|$\\)" |
6463 | 562 "*Regexp to determine the end of a shell command. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
563 The actual command ends at the end of the first \\(grouping\\)." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
564 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
565 :group 'sh-script) |
6463 | 566 |
567 | |
568 | |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
569 (defcustom sh-here-document-word "EOF" |
51265
575ad90ca254
(sh-here-document-word): Document new treatment of leading "-".
Glenn Morris <rgm@gnu.org>
parents:
49743
diff
changeset
|
570 "Word to delimit here documents. |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
571 If the first character of this string is \"-\", this is taken as |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
572 part of the redirection operator, rather than part of the |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
573 word (that is, \"<<-\" instead of \"<<\"). This is a feature |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
574 used by some shells (for example Bash) to indicate that leading |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
575 tabs inside the here document should be ignored. In this case, |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
576 Emacs indents the initial body and end of the here document with |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
577 tabs, to the same level as the start (note that apart from this |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
578 there is no support for indentation of here documents). This |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
579 will only work correctly if `sh-basic-offset' is a multiple of |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
580 `tab-width'. |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
581 |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
582 Any quote characters or leading whitespace in the word are |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
583 removed when closing the here document." |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
584 :type 'string |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
585 :group 'sh-script) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
586 |
6463 | 587 |
12863 | 588 (defvar sh-test |
589 '((sh "[ ]" . 3) | |
590 (ksh88 "[[ ]]" . 4)) | |
591 "Initial input in Bourne if, while and until skeletons. See `sh-feature'.") | |
592 | |
6463 | 593 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
594 ;; customized this out of sheer bravado. not for the faint of heart. |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
595 ;; but it *did* have an asterisk in the docstring! |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
596 (defcustom sh-builtins |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
597 '((bash sh-append posix |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
598 "." "alias" "bg" "bind" "builtin" "caller" "compgen" "complete" |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
599 "declare" "dirs" "disown" "enable" "fc" "fg" "help" "history" |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
600 "jobs" "kill" "let" "local" "popd" "printf" "pushd" "shopt" |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
601 "source" "suspend" "typeset" "unalias") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
602 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
603 ;; The next entry is only used for defining the others |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
604 (bourne sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
605 "eval" "export" "getopts" "newgrp" "pwd" "read" "readonly" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
606 "times" "ulimit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
607 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
608 (csh sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
609 "alias" "chdir" "glob" "history" "limit" "nice" "nohup" "rehash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
610 "setenv" "source" "time" "unalias" "unhash") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
611 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
612 (dtksh sh-append wksh) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
613 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
614 (es "access" "apids" "cd" "echo" "eval" "false" "let" "limit" "local" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
615 "newpgrp" "result" "time" "umask" "var" "vars" "wait" "whatis") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
616 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
617 (jsh sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
618 "bg" "fg" "jobs" "kill" "stop" "suspend") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
619 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
620 (jcsh sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
621 "bg" "fg" "jobs" "kill" "notify" "stop" "suspend") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
622 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
623 (ksh88 sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
624 "alias" "bg" "false" "fc" "fg" "jobs" "kill" "let" "print" "time" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
625 "typeset" "unalias" "whence") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
626 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
627 (oash sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
628 "checkwin" "dateline" "error" "form" "menu" "newwin" "oadeinit" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
629 "oaed" "oahelp" "oainit" "pp" "ppfile" "scan" "scrollok" "wattr" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
630 "wclear" "werase" "win" "wmclose" "wmmessage" "wmopen" "wmove" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
631 "wmtitle" "wrefresh") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
632 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
633 (pdksh sh-append ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
634 "bind") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
635 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
636 (posix sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
637 "command") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
638 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
639 (rc "builtin" "cd" "echo" "eval" "limit" "newpgrp" "shift" "umask" "wait" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
640 "whatis") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
641 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
642 (sh sh-append bourne |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
643 "hash" "test" "type") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
644 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
645 ;; The next entry is only used for defining the others |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
646 (shell "cd" "echo" "eval" "set" "shift" "umask" "unset" "wait") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
647 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
648 (wksh sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
649 "Xt[A-Z][A-Za-z]*") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
650 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
651 (zsh sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
652 "autoload" "bindkey" "builtin" "chdir" "compctl" "declare" "dirs" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
653 "disable" "disown" "echotc" "enable" "functions" "getln" "hash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
654 "history" "integer" "limit" "local" "log" "popd" "pushd" "r" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
655 "readonly" "rehash" "sched" "setopt" "source" "suspend" "true" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
656 "ttyctl" "type" "unfunction" "unhash" "unlimit" "unsetopt" "vared" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
657 "which")) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
658 "*List of all shell builtins for completing read and fontification. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
659 Note that on some systems not all builtins are available or some are |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
660 implemented as aliases. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
661 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
662 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
663 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
664 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
665 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
666 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
667 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
668 (defcustom sh-leading-keywords |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
669 '((bash sh-append sh |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
670 "time") |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
671 |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
672 (csh "else") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
673 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
674 (es "true" "unwind-protect" "whatis") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
675 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
676 (rc "else") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
677 |
55119
3a424bb24301
(sh-leading-keywords) <sh>: Add "!".
Andreas Schwab <schwab@suse.de>
parents:
54282
diff
changeset
|
678 (sh "!" "do" "elif" "else" "if" "then" "trap" "type" "until" "while")) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
679 "*List of keywords that may be immediately followed by a builtin or keyword. |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
680 Given some confusion between keywords and builtins depending on shell and |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
681 system, the distinction here has been based on whether they influence the |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
682 flow of control or syntax. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
683 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
684 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
685 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
686 :group 'sh-script) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
687 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
688 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
689 (defcustom sh-other-keywords |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
690 '((bash sh-append bourne |
51515
6d06c54cda5d
Fix bug in "Options Loop" skeleton for ksh. Add newlines to a few skeletons,
Juanma Barranquero <lekktu@gmail.com>
parents:
51379
diff
changeset
|
691 "bye" "logout" "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
692 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
693 ;; The next entry is only used for defining the others |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
694 (bourne sh-append sh |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
695 "function") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
696 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
697 (csh sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
698 "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
699 "if" "logout" "onintr" "repeat" "switch" "then" "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
700 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
701 (es "break" "catch" "exec" "exit" "fn" "for" "forever" "fork" "if" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
702 "return" "throw" "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
703 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
704 (ksh88 sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
705 "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
706 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
707 (rc "break" "case" "exec" "exit" "fn" "for" "if" "in" "return" "switch" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
708 "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
709 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
710 (sh sh-append shell |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
711 "done" "esac" "fi" "for" "in" "return") |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
712 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
713 ;; The next entry is only used for defining the others |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
714 (shell "break" "case" "continue" "exec" "exit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
715 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
716 (zsh sh-append bash |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
717 "select")) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
718 "*List of keywords not in `sh-leading-keywords'. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
719 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
720 :type '(repeat (cons (symbol :tag "Shell") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
721 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
722 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
723 :group 'sh-script) |
6463 | 724 |
725 | |
726 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
727 (defvar sh-variables |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
728 '((bash sh-append sh |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
729 "allow_null_glob_expansion" "auto_resume" "BASH" "BASH_ENV" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
730 "BASH_VERSINFO" "BASH_VERSION" "cdable_vars" "COMP_CWORD" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
731 "COMP_LINE" "COMP_POINT" "COMP_WORDS" "COMPREPLY" "DIRSTACK" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
732 "ENV" "EUID" "FCEDIT" "FIGNORE" "FUNCNAME" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
733 "glob_dot_filenames" "GLOBIGNORE" "GROUPS" "histchars" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
734 "HISTCMD" "HISTCONTROL" "HISTFILE" "HISTFILESIZE" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
735 "HISTIGNORE" "history_control" "HISTSIZE" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
736 "hostname_completion_file" "HOSTFILE" "HOSTTYPE" "IGNOREEOF" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
737 "ignoreeof" "INPUTRC" "LINENO" "MACHTYPE" "MAIL_WARNING" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
738 "noclobber" "nolinks" "notify" "no_exit_on_failed_exec" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
739 "NO_PROMPT_VARS" "OLDPWD" "OPTERR" "OSTYPE" "PIPESTATUS" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
740 "PPID" "POSIXLY_CORRECT" "PROMPT_COMMAND" "PS3" "PS4" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
741 "pushd_silent" "PWD" "RANDOM" "REPLY" "SECONDS" "SHELLOPTS" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
742 "SHLVL" "TIMEFORMAT" "TMOUT" "UID") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
743 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
744 (csh sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
745 "argv" "cdpath" "child" "echo" "histchars" "history" "home" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
746 "ignoreeof" "mail" "noclobber" "noglob" "nonomatch" "path" "prompt" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
747 "shell" "status" "time" "verbose") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
748 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
749 (es sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
750 "apid" "cdpath" "CDPATH" "history" "home" "ifs" "noexport" "path" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
751 "pid" "prompt" "signals") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
752 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
753 (jcsh sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
754 "notify") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
755 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
756 (ksh88 sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
757 "ENV" "ERRNO" "FCEDIT" "FPATH" "HISTFILE" "HISTSIZE" "LINENO" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
758 "OLDPWD" "PPID" "PS3" "PS4" "PWD" "RANDOM" "REPLY" "SECONDS" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
759 "TMOUT") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
760 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
761 (oash sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
762 "FIELD" "FIELD_MAX" "LAST_KEY" "OALIB" "PP_ITEM" "PP_NUM") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
763 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
764 (rc sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
765 "apid" "apids" "cdpath" "CDPATH" "history" "home" "ifs" "path" "pid" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
766 "prompt" "status") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
767 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
768 (sh sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
769 "CDPATH" "IFS" "OPTARG" "OPTIND" "PS1" "PS2") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
770 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
771 ;; The next entry is only used for defining the others |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
772 (shell "COLUMNS" "EDITOR" "HOME" "HUSHLOGIN" "LANG" "LC_COLLATE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
773 "LC_CTYPE" "LC_MESSAGES" "LC_MONETARY" "LC_NUMERIC" "LC_TIME" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
774 "LINES" "LOGNAME" "MAIL" "MAILCHECK" "MAILPATH" "PAGER" "PATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
775 "SHELL" "TERM" "TERMCAP" "TERMINFO" "VISUAL") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
776 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
777 (tcsh sh-append csh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
778 "addsuffix" "ampm" "autocorrect" "autoexpand" "autolist" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
779 "autologout" "chase_symlinks" "correct" "dextract" "edit" "el" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
780 "fignore" "gid" "histlit" "HOST" "HOSTTYPE" "HPATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
781 "ignore_symlinks" "listjobs" "listlinks" "listmax" "matchbeep" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
782 "nobeep" "NOREBIND" "oid" "printexitvalue" "prompt2" "prompt3" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
783 "pushdsilent" "pushdtohome" "recexact" "recognize_only_executables" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
784 "rmstar" "savehist" "SHLVL" "showdots" "sl" "SYSTYPE" "tcsh" "term" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
785 "tperiod" "tty" "uid" "version" "visiblebell" "watch" "who" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
786 "wordchars") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
787 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
788 (zsh sh-append ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
789 "BAUD" "bindcmds" "cdpath" "DIRSTACKSIZE" "fignore" "FIGNORE" "fpath" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
790 "HISTCHARS" "hostcmds" "hosts" "HOSTS" "LISTMAX" "LITHISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
791 "LOGCHECK" "mailpath" "manpath" "NULLCMD" "optcmds" "path" "POSTEDIT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
792 "prompt" "PROMPT" "PROMPT2" "PROMPT3" "PROMPT4" "psvar" "PSVAR" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
793 "READNULLCMD" "REPORTTIME" "RPROMPT" "RPS1" "SAVEHIST" "SPROMPT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
794 "STTY" "TIMEFMT" "TMOUT" "TMPPREFIX" "varcmds" "watch" "WATCH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
795 "WATCHFMT" "WORDCHARS" "ZDOTDIR")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
796 "List of all shell variables available for completing read. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
797 See `sh-feature'.") |
6463 | 798 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
799 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
800 ;; Font-Lock support |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
801 |
63455
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
802 (defface sh-heredoc |
61394
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
803 '((((min-colors 88) (class color) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
804 (background dark)) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
805 (:foreground "yellow1" :weight bold)) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
806 (((class color) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
807 (background dark)) |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
808 (:foreground "yellow" :weight bold)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
809 (((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
810 (background light)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
811 (:foreground "tan" )) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
812 (t |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
813 (:weight bold))) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
814 "Face to show a here-document" |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
815 :group 'sh-indentation) |
63455
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
816 ;; backward-compatibility alias |
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
817 (put 'sh-heredoc-face 'face-alias 'sh-heredoc) |
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
818 (defvar sh-heredoc-face 'sh-heredoc) |
6463 | 819 |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
820 (defface sh-escaped-newline '((t :inherit font-lock-string-face)) |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
821 "Face used for (non-escaped) backslash at end of a line in Shell-script mode." |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
822 :group 'sh-script |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
823 :version "22.1") |
6463 | 824 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
825 (defvar sh-font-lock-keywords-var |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
826 '((csh sh-append shell |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
827 ("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1 |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
828 font-lock-variable-name-face)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
829 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
830 (es sh-append executable-font-lock-keywords |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
831 ("\\$#?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\)" 1 |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
832 font-lock-variable-name-face)) |
6463 | 833 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
834 (rc sh-append es) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
835 |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
836 (sh sh-append shell |
20900
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
837 ;; Variable names. |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
838 ("\\$\\({#?\\)?\\([A-Za-z_][A-Za-z0-9_]*\\|[-#?@!]\\)" 2 |
20900
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
839 font-lock-variable-name-face) |
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
840 ;; Function names. |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
841 ("^\\(\\sw+\\)[ \t]*(" 1 font-lock-function-name-face) |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
842 ("\\<\\(function\\)\\>[ \t]*\\(\\sw+\\)?" |
62080
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
843 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t)) |
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
844 ("\\(?:^\\s *\\|[[();&|]\\s *\\|\\(?:\\s +-[ao]\\|if\\|else\\|then\\|while\\|do\\)\\s +\\)\\(!\\)" |
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
845 1 font-lock-negation-char-face)) |
6463 | 846 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
847 ;; The next entry is only used for defining the others |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
848 (shell |
52411
9db479d16349
(sh-font-lock-keywords): Use something other than
Glenn Morris <rgm@gnu.org>
parents:
52401
diff
changeset
|
849 ;; Using font-lock-string-face here confuses sh-get-indent-info. |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
850 ("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'sh-escaped-newline) |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
851 ("\\\\[^A-Za-z0-9]" 0 font-lock-string-face) |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
852 ("\\${?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\|[$*_]\\)" 1 |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
853 font-lock-variable-name-face)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
854 (rpm sh-append rpm2 |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
855 ("%{?\\(\\sw+\\)" 1 font-lock-keyword-face)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
856 (rpm2 sh-append shell |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
857 ("^\\(\\sw+\\):" 1 font-lock-variable-name-face))) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
858 "Default expressions to highlight in Shell Script modes. See `sh-feature'.") |
6463 | 859 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
860 (defvar sh-font-lock-keywords-var-1 |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
861 '((sh "[ \t]in\\>")) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
862 "Subdued level highlighting for Shell Script modes.") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
863 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
864 (defvar sh-font-lock-keywords-var-2 () |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
865 "Gaudy level highlighting for Shell Script modes.") |
6463 | 866 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
867 ;; These are used for the syntax table stuff (derived from cperl-mode). |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
868 ;; Note: parse-sexp-lookup-properties must be set to t for it to work. |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
869 (defconst sh-st-punc (string-to-syntax ".")) |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
870 (defconst sh-st-symbol (string-to-syntax "_")) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
871 (defconst sh-here-doc-syntax (string-to-syntax "|")) ;; generic string |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
872 |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
873 (defconst sh-escaped-line-re |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
874 ;; Should match until the real end-of-continued line, but if that is not |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
875 ;; possible (because we bump into EOB or the search bound), then we should |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
876 ;; match until the search bound. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
877 "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*") |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
878 |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
879 (defconst sh-here-doc-open-re |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
880 (concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\)+\\)" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
881 sh-escaped-line-re "\\(\n\\)")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
882 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
883 (defvar sh-here-doc-markers nil) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
884 (make-variable-buffer-local 'sh-here-doc-markers) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
885 (defvar sh-here-doc-re sh-here-doc-open-re) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
886 (make-variable-buffer-local 'sh-here-doc-re) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
887 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
888 (defun sh-font-lock-close-heredoc (bol eof indented) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
889 "Determine the syntax of the \\n after an EOF. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
890 If non-nil INDENTED indicates that the EOF was indented." |
40336
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
891 (let* ((eof-re (if eof (regexp-quote eof) "")) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
892 ;; A rough regexp that should find the opening <<EOF back. |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
893 (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
894 ;; Use \s| to cheaply check it's an open-heredoc. |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
895 eof-re "['\"]?\\([ \t|;&)<>]" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
896 sh-escaped-line-re |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
897 "\\)?\\s|")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
898 ;; A regexp that will find other EOFs. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
899 (ere (concat "^" (if indented "[ \t]*") eof-re "\n")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
900 (start (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
901 (goto-char bol) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
902 (re-search-backward (concat sre "\\|" ere) nil t)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
903 ;; If subgroup 1 matched, we found an open-heredoc, otherwise we first |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
904 ;; found a close-heredoc which makes the current close-heredoc inoperant. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
905 (cond |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
906 ((when (and start (match-end 1) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
907 (not (and indented (= (match-beginning 1) (match-end 1)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
908 (not (sh-in-comment-or-string (match-beginning 0)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
909 ;; Make sure our `<<' is not the EOF1 of a `cat <<EOF1 <<EOF2'. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
910 (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
911 (goto-char start) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
912 (setq start (line-beginning-position 2)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
913 (while |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
914 (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
915 (re-search-forward "<<") ; Skip ourselves. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
916 (and (re-search-forward sh-here-doc-open-re start 'move) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
917 (goto-char (match-beginning 0)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
918 (sh-in-comment-or-string (point))))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
919 ;; No <<EOF2 found after our <<. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
920 (= (point) start))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
921 sh-here-doc-syntax) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
922 ((not (or start (save-excursion (re-search-forward sre nil t)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
923 ;; There's no <<EOF either before or after us, |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
924 ;; so we should remove ourselves from font-lock's keywords. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
925 (setq sh-here-doc-markers (delete eof sh-here-doc-markers)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
926 (setq sh-here-doc-re |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
927 (concat sh-here-doc-open-re "\\|^\\([ \t]*\\)" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
928 (regexp-opt sh-here-doc-markers t) "\\(\n\\)")) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
929 nil)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
930 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
931 (defun sh-font-lock-open-heredoc (start string) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
932 "Determine the syntax of the \\n after a <<EOF. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
933 START is the position of <<. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
934 STRING is the actual word used as delimiter (f.ex. \"EOF\"). |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
935 INDENTED is non-nil if the here document's content (and the EOF mark) can |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
936 be indented (i.e. a <<- was used rather than just <<). |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
937 Point is at the beginning of the next line." |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
938 (unless (or (memq (char-before start) '(?< ?>)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
939 (sh-in-comment-or-string start)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
940 ;; We're looking at <<STRING, so we add "^STRING$" to the syntactic |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
941 ;; font-lock keywords to detect the end of this here document. |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
942 (let ((str (replace-regexp-in-string "['\"]" "" string))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
943 (unless (member str sh-here-doc-markers) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
944 (push str sh-here-doc-markers) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
945 (setq sh-here-doc-re |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
946 (concat sh-here-doc-open-re "\\|^\\([ \t]*\\)" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
947 (regexp-opt sh-here-doc-markers t) "\\(\n\\)")))) |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
948 (let ((ppss (save-excursion (syntax-ppss (1- (point)))))) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
949 (if (nth 4 ppss) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
950 ;; The \n not only starts the heredoc but also closes a comment. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
951 ;; Let's close the comment just before the \n. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
952 (put-text-property (1- (point)) (point) 'syntax-table '(12))) ;">" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
953 (if (or (nth 5 ppss) (> (count-lines start (point)) 1)) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
954 ;; If the sh-escaped-line-re part of sh-here-doc-re has matched |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
955 ;; several lines, make sure we refontify them together. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
956 ;; Furthermore, if (nth 5 ppss) is non-nil (i.e. the \n is |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
957 ;; escaped), it means the right \n is actually further down. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
958 ;; Don't bother fixing it now, but place a multiline property so |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
959 ;; that when jit-lock-context-* refontifies the rest of the |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
960 ;; buffer, it also refontifies the current line with it. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
961 (put-text-property start (point) 'font-lock-multiline t))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
962 sh-here-doc-syntax)) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
963 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
964 (defun sh-font-lock-here-doc (limit) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
965 "Search for a heredoc marker." |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
966 ;; This looks silly, but it's because `sh-here-doc-re' keeps changing. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
967 (re-search-forward sh-here-doc-re limit t)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
968 |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
969 (defun sh-is-quoted-p (pos) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
970 (and (eq (char-before pos) ?\\) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
971 (not (sh-is-quoted-p (1- pos))))) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
972 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
973 (defun sh-font-lock-paren (start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
974 (save-excursion |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
975 (goto-char start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
976 ;; Skip through all patterns |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
977 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
978 (progn |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
979 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
980 ;; Skip through one pattern |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
981 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
982 (or (/= 0 (skip-syntax-backward "w_")) |
54282
d11df80991d8
(sh-font-lock-paren): Add @ in case patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54158
diff
changeset
|
983 (/= 0 (skip-chars-backward "?[]*@/\\")) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
984 (and (sh-is-quoted-p (1- (point))) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
985 (goto-char (- (point) 2))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
986 (when (memq (char-before) '(?\" ?\')) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
987 (condition-case nil (progn (backward-sexp 1) t) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
988 (error nil))))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
989 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
990 (when (eq (char-before) ?|) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
991 (backward-char 1) t))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
992 (when (save-excursion (backward-char 2) (looking-at ";;\\|in")) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
993 sh-st-punc))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
994 |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
995 (defconst sh-font-lock-syntactic-keywords |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
996 ;; A `#' begins a comment when it is unquoted and at the beginning of a |
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
997 ;; word. In the shell, words are separated by metacharacters. |
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
998 ;; The list of special chars is taken from the single-unix spec |
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
999 ;; of the shell command language (under `quoting') but with `$' removed. |
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
1000 `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) |
66269
5ab4a52a31ac
(sh-font-lock-syntactic-keywords): Make $@ and $? into sexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66255
diff
changeset
|
1001 ;; Make sure $@ and @? are correctly recognized as sexps. |
5ab4a52a31ac
(sh-font-lock-syntactic-keywords): Make $@ and $? into sexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66255
diff
changeset
|
1002 ("\\$\\([?@]\\)" 1 ,sh-st-symbol) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1003 ;; Find HEREDOC starters and add a corresponding rule for the ender. |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1004 (sh-font-lock-here-doc |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1005 (2 (sh-font-lock-open-heredoc |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1006 (match-beginning 0) (match-string 1)) nil t) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1007 (5 (sh-font-lock-close-heredoc |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1008 (match-beginning 0) (match-string 4) |
40336
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
1009 (and (match-beginning 3) (/= (match-beginning 3) (match-end 3)))) |
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
1010 nil t)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1011 ;; Distinguish the special close-paren in `case'. |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1012 (")" 0 (sh-font-lock-paren (match-beginning 0))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1013 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1014 (defun sh-font-lock-syntactic-face-function (state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1015 (if (nth 3 state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1016 (if (char-valid-p (nth 3 state)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1017 font-lock-string-face |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1018 sh-heredoc-face) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1019 font-lock-comment-face)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1020 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1021 (defgroup sh-indentation nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1022 "Variables controlling indentation in shell scripts. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1023 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1024 Note: customizing these variables will not affect existing buffers if |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1025 `sh-make-vars-local' is no-nil. See the documentation for |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1026 variable `sh-make-vars-local', command `sh-make-vars-local' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1027 and command `sh-reset-indent-vars-to-global-values'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1028 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1029 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1030 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1031 (defcustom sh-set-shell-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1032 "*Hook run by `sh-set-shell'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1033 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1034 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1035 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1036 (defcustom sh-mode-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1037 "*Hook run by `sh-mode'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1038 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1039 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1040 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1041 (defcustom sh-learn-basic-offset nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1042 "*When `sh-guess-basic-offset' should learn `sh-basic-offset'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1043 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1044 nil mean: never. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1045 t means: only if there seems to be an obvious value. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1046 Anything else means: whenever we have a \"good guess\" as to the value." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1047 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1048 (const :tag "Never" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1049 (const :tag "Only if sure" t) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1050 (const :tag "If have a good guess" usually)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1051 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1052 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1053 (defcustom sh-popup-occur-buffer nil |
62309 | 1054 "*Controls when `sh-learn-buffer-indent' pops the `*indent*' buffer. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1055 If t it is always shown. If nil, it is shown only when there |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1056 are conflicts." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1057 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1058 (const :tag "Only when there are conflicts." nil) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1059 (const :tag "Always" t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1060 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1061 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1062 (defcustom sh-blink t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1063 "*If non-nil, `sh-show-indent' shows the line indentation is relative to. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1064 The position on the line is not necessarily meaningful. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1065 In some cases the line will be the matching keyword, but this is not |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1066 always the case." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1067 :type 'boolean |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1068 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1069 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1070 (defcustom sh-first-lines-indent 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1071 "*The indentation of the first non-blank non-comment line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1072 Usually 0 meaning first column. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1073 Can be set to a number, or to nil which means leave it as is." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1074 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1075 (const :tag "Leave as is" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1076 (integer :tag "Column number" |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1077 :menu-tag "Indent to this col (0 means first col)" )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1078 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1079 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1080 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1081 (defcustom sh-basic-offset 4 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1082 "*The default indentation increment. |
62309 | 1083 This value is used for the `+' and `-' symbols in an indentation variable." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1084 :type 'integer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1085 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1086 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1087 (defcustom sh-indent-comment nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1088 "*How a comment line is to be indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1089 nil means leave it as it is; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1090 t means indent it as a normal line, aligning it to previous non-blank |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1091 non-comment line; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1092 a number means align to that column, e.g. 0 means fist column." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1093 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1094 (const :tag "Leave as is." nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1095 (const :tag "Indent as a normal line." t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1096 (integer :menu-tag "Indent to this col (0 means first col)." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1097 :tag "Indent to column number.") ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1098 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1099 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1100 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1101 (defvar sh-debug nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1102 "Enable lots of debug messages - if function `sh-debug' is enabled.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1103 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1104 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1105 ;; Uncomment this defun and comment the defmacro for debugging. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1106 ;; (defun sh-debug (&rest args) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1107 ;; "For debugging: display message ARGS if variable SH-DEBUG is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1108 ;; (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1109 ;; (apply 'message args))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1110 (defmacro sh-debug (&rest args)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1111 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1112 (defconst sh-symbol-list |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1113 '((const :tag "+ " :value + |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1114 :menu-tag "+ Indent right by sh-basic-offset") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1115 (const :tag "- " :value - |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1116 :menu-tag "- Indent left by sh-basic-offset") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1117 (const :tag "++" :value ++ |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1118 :menu-tag "++ Indent right twice sh-basic-offset") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1119 (const :tag "--" :value -- |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1120 :menu-tag "-- Indent left twice sh-basic-offset") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1121 (const :tag "* " :value * |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1122 :menu-tag "* Indent right half sh-basic-offset") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1123 (const :tag "/ " :value / |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1124 :menu-tag "/ Indent left half sh-basic-offset"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1125 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1126 (defcustom sh-indent-for-else 0 |
62309 | 1127 "*How much to indent an `else' relative to its `if'. Usually 0." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1128 :type `(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1129 (integer :menu-tag "A number (positive=>indent right)" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1130 :tag "A number") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1131 (const :tag "--") ;; separator! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1132 ,@ sh-symbol-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1133 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1134 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1135 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1136 (defconst sh-number-or-symbol-list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1137 (append '((integer :menu-tag "A number (positive=>indent right)" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1138 :tag "A number") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1139 (const :tag "--")) ; separator |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1140 sh-symbol-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1141 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1142 (defcustom sh-indent-for-fi 0 |
62309 | 1143 "*How much to indent a `fi' relative to its `if'. Usually 0." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1144 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1145 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1146 |
62309 | 1147 (defcustom sh-indent-for-done 0 |
1148 "*How much to indent a `done' relative to its matching stmt. Usually 0." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1149 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1150 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1151 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1152 (defcustom sh-indent-after-else '+ |
62309 | 1153 "*How much to indent a statement after an `else' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1154 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1155 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1156 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1157 (defcustom sh-indent-after-if '+ |
62309 | 1158 "*How much to indent a statement after an `if' statement. |
1159 This includes lines after `else' and `elif' statements, too, but | |
1160 does not affect the `else', `elif' or `fi' statements themselves." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1161 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1162 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1163 |
58767
d2c6a8b592f2
(sh-indent-for-then): Change default.
Richard M. Stallman <rms@gnu.org>
parents:
57159
diff
changeset
|
1164 (defcustom sh-indent-for-then 0 |
62309 | 1165 "*How much to indent a `then' relative to its `if'." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1166 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1167 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1168 |
62214
e451c7eb2d24
(sh-indent-for-do): Default to 0.
Richard M. Stallman <rms@gnu.org>
parents:
62080
diff
changeset
|
1169 (defcustom sh-indent-for-do 0 |
62309 | 1170 "*How much to indent a `do' statement. |
62310 | 1171 This is relative to the statement before the `do', typically a |
1172 `while', `until', `for', `repeat' or `select' statement." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1173 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1174 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1175 |
62309 | 1176 (defcustom sh-indent-after-do '+ |
1177 "*How much to indent a line after a `do' statement. | |
1178 This is used when the `do' is the first word of the line. | |
62310 | 1179 This is relative to the statement before the `do', typically a |
1180 `while', `until', `for', `repeat' or `select' statement." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1181 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1182 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1183 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1184 (defcustom sh-indent-after-loop-construct '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1185 "*How much to indent a statement after a loop construct. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1186 |
62309 | 1187 This variable is used when the keyword `do' is on the same line as the |
1188 loop statement (e.g., `until', `while' or `for'). | |
1189 If the `do' is on a line by itself, then `sh-indent-after-do' is used instead." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1190 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1191 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1192 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1193 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1194 (defcustom sh-indent-after-done 0 |
62309 | 1195 "*How much to indent a statement after a `done' keyword. |
1196 Normally this is 0, which aligns the `done' to the matching | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1197 looping construct line. |
62309 | 1198 Setting it non-zero allows you to have the `do' statement on a line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1199 by itself and align the done under to do." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1200 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1201 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1202 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1203 (defcustom sh-indent-for-case-label '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1204 "*How much to indent a case label statement. |
62309 | 1205 This is relative to the line containing the `case' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1206 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1207 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1208 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1209 (defcustom sh-indent-for-case-alt '++ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1210 "*How much to indent statements after the case label. |
62309 | 1211 This is relative to the line containing the `case' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1212 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1213 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1214 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1215 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1216 (defcustom sh-indent-for-continuation '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1217 "*How much to indent for a continuation statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1218 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1219 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1220 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1221 (defcustom sh-indent-after-open '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1222 "*How much to indent after a line with an opening parenthesis or brace. |
62309 | 1223 For an open paren after a function, `sh-indent-after-function' is used." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1224 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1225 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1226 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1227 (defcustom sh-indent-after-function '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1228 "*How much to indent after a function line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1229 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1230 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1231 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1232 ;; These 2 are for the rc shell: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1233 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1234 (defcustom sh-indent-after-switch '+ |
62309 | 1235 "*How much to indent a `case' statement relative to the `switch' statement. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1236 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1237 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1238 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1239 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1240 (defcustom sh-indent-after-case '+ |
62309 | 1241 "*How much to indent a statement relative to the `case' statement. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1242 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1243 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1244 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1245 |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1246 (defcustom sh-backslash-column 48 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1247 "*Column in which `sh-backslash-region' inserts backslashes." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1248 :type 'integer |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1249 :group 'sh) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1250 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1251 (defcustom sh-backslash-align t |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1252 "*If non-nil, `sh-backslash-region' will align backslashes." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1253 :type 'boolean |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1254 :group 'sh) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1255 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1256 ;; Internal use - not designed to be changed by the user: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1257 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1258 (defun sh-mkword-regexpr (word) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1259 "Make a regexp which matches WORD as a word. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1260 This specifically excludes an occurrence of WORD followed by |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1261 punctuation characters like '-'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1262 (concat word "\\([^-a-z0-9_]\\|$\\)")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1263 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1264 (defconst sh-re-done (sh-mkword-regexpr "done")) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1265 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1266 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1267 (defconst sh-kws-for-done |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1268 '((sh . ( "while" "until" "for" ) ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1269 (bash . ( "while" "until" "for" "select" ) ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1270 (ksh88 . ( "while" "until" "for" "select" ) ) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1271 (zsh . ( "while" "until" "for" "repeat" "select" ) ) ) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1272 "Which keywords can match the word `done' in this shell.") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1273 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1274 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1275 (defconst sh-indent-supported |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1276 '((sh . t) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1277 (csh . nil) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1278 (rc . t)) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1279 "Shell types that shell indenting can do something with.") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1280 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1281 (defvar sh-indent-supported-here nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1282 "Non-nil if we support indentation for the current buffer's shell type.") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1283 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1284 (defconst sh-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1285 '( |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1286 sh-basic-offset sh-first-lines-indent sh-indent-after-case |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1287 sh-indent-after-do sh-indent-after-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1288 sh-indent-after-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1289 sh-indent-after-if |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1290 sh-indent-after-loop-construct |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1291 sh-indent-after-open |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1292 sh-indent-comment |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1293 sh-indent-for-case-alt |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1294 sh-indent-for-case-label |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1295 sh-indent-for-continuation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1296 sh-indent-for-do |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1297 sh-indent-for-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1298 sh-indent-for-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1299 sh-indent-for-fi |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1300 sh-indent-for-then |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1301 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1302 "A list of variables used by script mode to control indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1303 This list is used when switching between buffer-local and global |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1304 values of variables, and for the commands using indentation styles.") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1305 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1306 (defvar sh-make-vars-local t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1307 "*Controls whether indentation variables are local to the buffer. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1308 If non-nil, indentation variables are made local initially. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1309 If nil, you can later make the variables local by invoking |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1310 command `sh-make-vars-local'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1311 The default is t because I assume that in one Emacs session one is |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1312 frequently editing existing scripts with different styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1313 |
6463 | 1314 |
1315 ;; mode-command and utility functions | |
1316 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1317 ;;;###autoload |
41348
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1318 (defun sh-mode () |
6463 | 1319 "Major mode for editing shell scripts. |
1320 This mode works for many shells, since they all have roughly the same syntax, | |
1321 as far as commands, arguments, variables, pipes, comments etc. are concerned. | |
1322 Unless the file's magic number indicates the shell, your usual shell is | |
1323 assumed. Since filenames rarely give a clue, they are not further analyzed. | |
1324 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1325 This mode adapts to the variations between shells (see `sh-set-shell') by |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1326 means of an inheritance based feature lookup (see `sh-feature'). This |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1327 mechanism applies to all variables (including skeletons) that pertain to |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1328 shell-specific features. |
6463 | 1329 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1330 The default style of this mode is that of Rosenblatt's Korn shell book. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1331 The syntax of the statements varies with the shell being used. The |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1332 following commands are available, based on the current shell's syntax: |
6463 | 1333 |
1334 \\[sh-case] case statement | |
1335 \\[sh-for] for loop | |
1336 \\[sh-function] function definition | |
1337 \\[sh-if] if statement | |
1338 \\[sh-indexed-loop] indexed loop from 1 to n | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1339 \\[sh-while-getopts] while getopts loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1340 \\[sh-repeat] repeat loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1341 \\[sh-select] select loop |
6463 | 1342 \\[sh-until] until loop |
1343 \\[sh-while] while loop | |
1344 | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1345 For sh and rc shells indentation commands are: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1346 \\[sh-show-indent] Show the variable controlling this line's indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1347 \\[sh-set-indent] Set then variable controlling this line's indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1348 \\[sh-learn-line-indent] Change the indentation variable so this line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1349 would indent to the way it currently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1350 \\[sh-learn-buffer-indent] Set the indentation variables so the |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1351 buffer indents as it currently is indented. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1352 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1353 |
6463 | 1354 \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. |
1355 \\[sh-newline-and-indent] Delete unquoted space and indent new line same as this one. | |
1356 \\[sh-end-of-command] Go to end of successive commands. | |
1357 \\[sh-beginning-of-command] Go to beginning of successive commands. | |
1358 \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1359 \\[sh-execute-region] Have optional header and region be executed in a subshell. |
6463 | 1360 |
1361 \\[sh-maybe-here-document] Without prefix, following an unquoted < inserts here document. | |
40340
5800d6cc4718
sugar: escape a "{" in the first column to pacify font-lock
Sam Steingold <sds@gnu.org>
parents:
40336
diff
changeset
|
1362 \{, (, [, ', \", ` |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1363 Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1364 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1365 If you generally program a shell different from your login shell you can |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1366 set `sh-shell-file' accordingly. If your shell's file name doesn't correctly |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1367 indicate what shell it is use `sh-alias-alist' to translate. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1368 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1369 If your shell gives error messages with line numbers, you can use \\[executable-interpret] |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1370 with your script for an edit-interpret-debug cycle." |
41348
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1371 (interactive) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1372 (kill-all-local-variables) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1373 (setq major-mode 'sh-mode |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1374 mode-name "Shell-script") |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1375 (use-local-map sh-mode-map) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1376 (make-local-variable 'skeleton-end-hook) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1377 (make-local-variable 'paragraph-start) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1378 (make-local-variable 'paragraph-separate) |
6463 | 1379 (make-local-variable 'comment-start) |
1380 (make-local-variable 'comment-start-skip) | |
1381 (make-local-variable 'require-final-newline) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1382 (make-local-variable 'sh-header-marker) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1383 (make-local-variable 'sh-shell-file) |
6463 | 1384 (make-local-variable 'sh-shell) |
12864
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1385 (make-local-variable 'skeleton-pair-alist) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1386 (make-local-variable 'skeleton-pair-filter) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1387 (make-local-variable 'comint-dynamic-complete-functions) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1388 (make-local-variable 'comint-prompt-regexp) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1389 (make-local-variable 'font-lock-defaults) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1390 (make-local-variable 'skeleton-filter) |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
1391 (make-local-variable 'skeleton-newline-indent-rigidly) |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1392 (make-local-variable 'sh-shell-variables) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1393 (make-local-variable 'sh-shell-variables-initialized) |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1394 (make-local-variable 'imenu-generic-expression) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1395 (make-local-variable 'sh-indent-supported-here) |
65384
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
1396 (make-local-variable 'skeleton-pair-default-alist) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
1397 (setq skeleton-pair-default-alist sh-skeleton-pair-default-alist) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1398 (setq skeleton-end-hook (lambda () |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1399 (or (eolp) (newline) (indent-relative))) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
1400 paragraph-start (concat page-delimiter "\\|$") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1401 paragraph-separate paragraph-start |
6463 | 1402 comment-start "# " |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1403 comment-start-skip "#+[\t ]*" |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1404 local-abbrev-table sh-mode-abbrev-table |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1405 comint-dynamic-complete-functions sh-dynamic-complete-functions |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1406 ;; we can't look if previous line ended with `\' |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1407 comint-prompt-regexp "^[ \t]*" |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1408 imenu-case-fold-search nil |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1409 font-lock-defaults |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1410 `((sh-font-lock-keywords |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1411 sh-font-lock-keywords-1 sh-font-lock-keywords-2) |
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1412 nil nil |
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1413 ((?/ . "w") (?~ . "w") (?. . "w") (?- . "w") (?_ . "w")) nil |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1414 (font-lock-syntactic-keywords . sh-font-lock-syntactic-keywords) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1415 (font-lock-syntactic-face-function |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1416 . sh-font-lock-syntactic-face-function)) |
12864
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1417 skeleton-pair-alist '((?` _ ?`)) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1418 skeleton-pair-filter 'sh-quoted-p |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1419 skeleton-further-elements '((< '(- (min sh-indentation |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1420 (current-column))))) |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
1421 skeleton-filter 'sh-feature |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1422 skeleton-newline-indent-rigidly t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1423 sh-indent-supported-here nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1424 (set (make-local-variable 'parse-sexp-ignore-comments) t) |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1425 ;; Parse or insert magic number for exec, and set all variables depending |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1426 ;; on the shell thus determined. |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1427 (let ((interpreter |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1428 (save-excursion |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1429 (goto-char (point-min)) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
1430 (cond ((looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)") |
24730
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1431 (match-string 2)) |
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1432 ((and buffer-file-name |
62550
4f78132b042b
(sh-mode, sh-get-word): Minor regexp fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62310
diff
changeset
|
1433 (string-match "\\.m?spec\\'" buffer-file-name)) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
1434 "rpm"))))) |
42075
a39583392219
(sh-mode): Run sh-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents:
41349
diff
changeset
|
1435 (sh-set-shell (or interpreter sh-shell-file) nil nil)) |
62772
f2892faa87d4
* progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents:
62550
diff
changeset
|
1436 (run-mode-hooks 'sh-mode-hook)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1437 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1438 ;;;###autoload |
6463 | 1439 (defalias 'shell-script-mode 'sh-mode) |
1440 | |
1441 | |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1442 (defun sh-font-lock-keywords (&optional keywords) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1443 "Function to get simple fontification based on `sh-font-lock-keywords'. |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1444 This adds rules for comments and assignments." |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1445 (sh-feature sh-font-lock-keywords-var |
23511
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1446 (when (stringp (sh-feature sh-assignment-regexp)) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1447 (lambda (list) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1448 `((,(sh-feature sh-assignment-regexp) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1449 1 font-lock-variable-name-face) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1450 ,@keywords |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1451 ,@list |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1452 ,@executable-font-lock-keywords))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1453 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1454 (defun sh-font-lock-keywords-1 (&optional builtins) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1455 "Function to get better fontification including keywords." |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1456 (let ((keywords (concat "\\([;(){}`|&]\\|^\\)[ \t]*\\(\\(" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1457 (regexp-opt (sh-feature sh-leading-keywords) t) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1458 "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1459 (regexp-opt (append (sh-feature sh-leading-keywords) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1460 (sh-feature sh-other-keywords)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1461 t)))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1462 (sh-font-lock-keywords |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1463 `(,@(if builtins |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1464 `((,(concat keywords "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1465 (regexp-opt (sh-feature sh-builtins) t) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1466 "\\>") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1467 (2 font-lock-keyword-face nil t) |
16478 | 1468 (6 font-lock-builtin-face)) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1469 ,@(sh-feature sh-font-lock-keywords-var-2))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1470 (,(concat keywords "\\)\\>") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1471 2 font-lock-keyword-face) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1472 ,@(sh-feature sh-font-lock-keywords-var-1))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1473 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1474 (defun sh-font-lock-keywords-2 () |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1475 "Function to get better fontification including keywords and builtins." |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1476 (sh-font-lock-keywords-1 t)) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1477 |
6463 | 1478 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1479 (defvar sh-regexp-for-done nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1480 "A buffer-local regexp to match opening keyword for done.") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1481 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1482 (defvar sh-kw-alist nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1483 "A buffer-local, since it is shell-type dependent, list of keywords.") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1484 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1485 ;; ( key-word first-on-this on-prev-line ) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1486 ;; This is used to set `sh-kw-alist' which is a list of sublists each |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1487 ;; having 3 elements: |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1488 ;; a keyword |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1489 ;; a rule to check when the keyword appears on "this" line |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1490 ;; a rule to check when the keyword appears on "the previous" line |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1491 ;; The keyword is usually a string and is the first word on a line. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1492 ;; If this keyword appears on the line whose indentation is to be |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1493 ;; calculated, the rule in element 2 is called. If this returns |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1494 ;; non-zero, the resulting point (which may be changed by the rule) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1495 ;; is used as the default indentation. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1496 ;; If it returned false or the keyword was not found in the table, |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1497 ;; then the keyword from the previous line is looked up and the rule |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1498 ;; in element 3 is called. In this case, however, |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1499 ;; `sh-get-indent-info' does not stop but may keep going and test |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1500 ;; other keywords against rules in element 3. This is because the |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1501 ;; preceding line could have, for example, an opening "if" and an |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1502 ;; opening "while" keyword and we need to add the indentation offsets |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1503 ;; for both. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1504 ;; |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1505 (defconst sh-kw |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1506 '((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1507 ("if" nil sh-handle-prev-if) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1508 ("elif" sh-handle-this-else sh-handle-prev-else) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1509 ("else" sh-handle-this-else sh-handle-prev-else) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1510 ("fi" sh-handle-this-fi sh-handle-prev-fi) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1511 ("then" sh-handle-this-then sh-handle-prev-then) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1512 ("(" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1513 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1514 ("[" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1515 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1516 (")" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1517 ("]" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1518 ("case" nil sh-handle-prev-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1519 ("esac" sh-handle-this-esac sh-handle-prev-esac) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1520 (case-label nil sh-handle-after-case-label) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1521 (";;" nil sh-handle-prev-case-alt-end) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1522 ("done" sh-handle-this-done sh-handle-prev-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1523 ("do" sh-handle-this-do sh-handle-prev-do)) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1524 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1525 ;; Note: we don't need specific stuff for bash and zsh shells; |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1526 ;; the regexp `sh-regexp-for-done' handles the extra keywords |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1527 ;; these shells use. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1528 (rc |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1529 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1530 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1531 ("case" sh-handle-this-rc-case sh-handle-prev-rc-case)))) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1532 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1533 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1534 |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1535 (defun sh-set-shell (shell &optional no-query-flag insert-flag) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1536 "Set this buffer's shell to SHELL (a string). |
42909
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1537 When used interactively, insert the proper starting #!-line, |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1538 and make the visited file executable via `executable-set-magic', |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1539 perhaps querying depending on the value of `executable-query'. |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1540 |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1541 When this function is called noninteractively, INSERT-FLAG (the third |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1542 argument) controls whether to insert a #!-line and think about making |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1543 the visited file executable, and NO-QUERY-FLAG (the second argument) |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1544 controls whether to query about making the visited file executable. |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1545 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1546 Calls the value of `sh-set-shell-hook' if set." |
49132
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1547 (interactive (list (completing-read (format "Shell \(default %s\): " |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1548 sh-shell-file) |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1549 interpreter-mode-alist |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1550 (lambda (x) (eq (cdr x) 'sh-mode)) |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1551 nil nil nil sh-shell-file) |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1552 (eq executable-query 'function) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1553 t)) |
23589
660727693bf6
(sh-canonicalize-shell): Fix regexp.
Andreas Schwab <schwab@suse.de>
parents:
23511
diff
changeset
|
1554 (if (string-match "\\.exe\\'" shell) |
23341
d29b6b51866f
(sh-set-shell): Remove .exe suffix from shell name.
Richard M. Stallman <rms@gnu.org>
parents:
22783
diff
changeset
|
1555 (setq shell (substring shell 0 (match-beginning 0)))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1556 (setq sh-shell (intern (file-name-nondirectory shell)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1557 sh-shell (or (cdr (assq sh-shell sh-alias-alist)) |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1558 sh-shell)) |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1559 (if insert-flag |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1560 (setq sh-shell-file |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1561 (executable-set-magic shell (sh-feature sh-shell-arg) |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1562 no-query-flag insert-flag))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1563 (let ((tem (sh-feature sh-require-final-newline))) |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
1564 (if (eq tem t) |
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
1565 (setq require-final-newline mode-require-final-newline))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1566 (setq |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1567 mode-line-process (format "[%s]" sh-shell) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1568 sh-shell-variables nil |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1569 sh-shell-variables-initialized nil |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1570 imenu-generic-expression (sh-feature sh-imenu-generic-expression)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1571 (make-local-variable 'sh-mode-syntax-table) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1572 (let ((tem (sh-feature sh-mode-syntax-table-input))) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1573 (setq sh-mode-syntax-table |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1574 (if tem (apply 'sh-mode-syntax-table tem) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1575 sh-mode-default-syntax-table))) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1576 (set-syntax-table sh-mode-syntax-table) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1577 (dolist (var (sh-feature sh-variables)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1578 (sh-remember-variable var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1579 (make-local-variable 'indent-line-function) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1580 (if (setq sh-indent-supported-here (sh-feature sh-indent-supported)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1581 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1582 (message "Setting up indent for shell type %s" sh-shell) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1583 (set (make-local-variable 'parse-sexp-lookup-properties) t) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1584 (set (make-local-variable 'sh-kw-alist) (sh-feature sh-kw)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1585 (let ((regexp (sh-feature sh-kws-for-done))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1586 (if regexp |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1587 (set (make-local-variable 'sh-regexp-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1588 (sh-mkword-regexpr (regexp-opt regexp t))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1589 (message "setting up indent stuff") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1590 ;; sh-mode has already made indent-line-function local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1591 ;; but do it in case this is called before that. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1592 (setq indent-line-function 'sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1593 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1594 (sh-make-vars-local)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1595 (message "Indentation setup for shell type %s" sh-shell)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1596 (message "No indentation for this shell type.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1597 (setq indent-line-function 'sh-basic-indent-line)) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1598 (when font-lock-mode |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1599 (setq font-lock-set-defaults nil) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1600 (font-lock-set-defaults) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1601 (font-lock-fontify-buffer)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1602 (run-hooks 'sh-set-shell-hook)) |
6463 | 1603 |
1604 | |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1605 (defun sh-feature (alist &optional function) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1606 "Index ALIST by the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1607 If ALIST isn't a list where every element is a cons, it is returned as is. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1608 Else indexing follows an inheritance logic which works in two ways: |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1609 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1610 - Fall back on successive ancestors (see `sh-ancestor-alist') as long as |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1611 the alist contains no value for the current shell. |
24906
01882044b37a
(sh-feature): If nothing is known about the given shell, use the
Richard M. Stallman <rms@gnu.org>
parents:
24899
diff
changeset
|
1612 The ultimate default is always `sh'. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1613 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1614 - If the value thus looked up is a list starting with `sh-append', |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1615 we call the function `sh-append' with the rest of the list as |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1616 arguments, and use the value. However, the next element of the |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1617 list is not used as-is; instead, we look it up recursively |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1618 in ALIST to allow the function called to define the value for |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1619 one shell to be derived from another shell. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1620 The value thus determined is physically replaced into the alist. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1621 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1622 If FUNCTION is non-nil, it is called with one argument, |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1623 the value thus obtained, and the result is used instead." |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1624 (or (if (consp alist) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1625 ;; Check for something that isn't a valid alist. |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1626 (let ((l alist)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1627 (while (and l (consp (car l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1628 (setq l (cdr l))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1629 (if l alist))) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1630 |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1631 (let ((orig-sh-shell sh-shell)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1632 (let ((sh-shell sh-shell) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1633 elt val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1634 (while (and sh-shell |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1635 (not (setq elt (assq sh-shell alist)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1636 (setq sh-shell (cdr (assq sh-shell sh-ancestor-alist)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1637 ;; If the shell is not known, treat it as sh. |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1638 (unless elt |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1639 (setq elt (assq 'sh alist))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1640 (setq val (cdr elt)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1641 (if (and (consp val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1642 (memq (car val) '(sh-append sh-modify))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1643 (setq val |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1644 (apply (car val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1645 ;; Refer to the value for a different shell, |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1646 ;; as a kind of inheritance. |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1647 (let ((sh-shell (car (cdr val)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1648 (sh-feature alist)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1649 (cddr val)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1650 (if function |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1651 (setq sh-shell orig-sh-shell |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1652 val (funcall function val))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1653 val)))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1654 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1655 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1656 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1657 ;; I commented this out because nobody calls it -- rms. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1658 ;;(defun sh-abbrevs (ancestor &rest list) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1659 ;; "Iff it isn't, define the current shell as abbrev table and fill that. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1660 ;;Abbrev table will inherit all abbrevs from ANCESTOR, which is either an abbrev |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1661 ;;table or a list of (NAME1 EXPANSION1 ...). In addition it will define abbrevs |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1662 ;;according to the remaining arguments NAMEi EXPANSIONi ... |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1663 ;;EXPANSION may be either a string or a skeleton command." |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1664 ;; (or (if (boundp sh-shell) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1665 ;; (symbol-value sh-shell)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1666 ;; (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1667 ;; (if (listp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1668 ;; (nconc list ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1669 ;; (define-abbrev-table sh-shell ()) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1670 ;; (if (vectorp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1671 ;; (mapatoms (lambda (atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1672 ;; (or (eq atom 0) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1673 ;; (define-abbrev (symbol-value sh-shell) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1674 ;; (symbol-name atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1675 ;; (symbol-value atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1676 ;; (symbol-function atom)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1677 ;; ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1678 ;; (while list |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1679 ;; (define-abbrev (symbol-value sh-shell) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1680 ;; (car list) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1681 ;; (if (stringp (car (cdr list))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1682 ;; (car (cdr list)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1683 ;; "") |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1684 ;; (if (symbolp (car (cdr list))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1685 ;; (car (cdr list)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1686 ;; (setq list (cdr (cdr list))))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1687 ;; (symbol-value sh-shell))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1688 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1689 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1690 (defun sh-append (ancestor &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1691 "Return list composed of first argument (a list) physically appended to rest." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1692 (nconc list ancestor)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1693 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1694 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1695 (defun sh-modify (skeleton &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1696 "Modify a copy of SKELETON by replacing I1 with REPL1, I2 with REPL2 ..." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1697 (setq skeleton (copy-sequence skeleton)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1698 (while list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1699 (setcar (or (nthcdr (car list) skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1700 (error "Index %d out of bounds" (car list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1701 (car (cdr list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1702 (setq list (nthcdr 2 list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1703 skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1704 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1705 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1706 (defun sh-basic-indent-line () |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1707 "Indent a line for Sh mode (shell script mode). |
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1708 Indent as far as preceding non-empty line, then by steps of `sh-indentation'. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1709 Lines containing only comments are considered empty." |
6463 | 1710 (interactive) |
1711 (let ((previous (save-excursion | |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1712 (while (and (progn (beginning-of-line) |
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1713 (not (bobp))) |
14211
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1714 (progn |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1715 (forward-line -1) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1716 (back-to-indentation) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1717 (or (eolp) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1718 (eq (following-char) ?#))))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1719 (current-column))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1720 current) |
6463 | 1721 (save-excursion |
1722 (indent-to (if (eq this-command 'newline-and-indent) | |
1723 previous | |
1724 (if (< (current-column) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1725 (setq current (progn (back-to-indentation) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1726 (current-column)))) |
6463 | 1727 (if (eolp) previous 0) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1728 (delete-region (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1729 (progn (beginning-of-line) (point))) |
6463 | 1730 (if (eolp) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1731 (max previous (* (1+ (/ current sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1732 sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1733 (* (1+ (/ current sh-indentation)) sh-indentation)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1734 (if (< (current-column) (current-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1735 (skip-chars-forward " \t")))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1736 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1737 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1738 (defun sh-execute-region (start end &optional flag) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1739 "Pass optional header and region to a subshell for noninteractive execution. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1740 The working directory is that of the buffer, and only environment variables |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1741 are already set which is why you can mark a header within the script. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1742 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1743 With a positive prefix ARG, instead of sending region, define header from |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1744 beginning of buffer to point. With a negative prefix ARG, instead of sending |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1745 region, clear header." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1746 (interactive "r\nP") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1747 (if flag |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1748 (setq sh-header-marker (if (> (prefix-numeric-value flag) 0) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1749 (point-marker))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1750 (if sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1751 (save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1752 (let (buffer-undo-list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1753 (goto-char sh-header-marker) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1754 (append-to-buffer (current-buffer) start end) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1755 (shell-command-on-region (point-min) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1756 (setq end (+ sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1757 (- end start))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1758 sh-shell-file) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1759 (delete-region sh-header-marker end))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1760 (shell-command-on-region start end (concat sh-shell-file " -"))))) |
6463 | 1761 |
1762 | |
1763 (defun sh-remember-variable (var) | |
1764 "Make VARIABLE available for future completing reads in this buffer." | |
1765 (or (< (length var) sh-remember-variable-min) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1766 (getenv var) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1767 (assoc var sh-shell-variables) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1768 (push (cons var var) sh-shell-variables)) |
6463 | 1769 var) |
1770 | |
1771 | |
1772 | |
1773 (defun sh-quoted-p () | |
1774 "Is point preceded by an odd number of backslashes?" | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1775 (eq -1 (% (save-excursion (skip-chars-backward "\\\\")) 2))) |
6463 | 1776 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1777 ;; Indentation stuff. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1778 (defun sh-must-support-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1779 "*Signal an error if the shell type for this buffer is not supported. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1780 Also, the buffer must be in Shell-script mode." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1781 (unless sh-indent-supported-here |
40927
d8cd2ee4b10c
(sh-must-be-shell-mode): Allow modes derived from sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
40340
diff
changeset
|
1782 (error "This buffer's shell does not support indentation through Emacs"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1783 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1784 (defun sh-make-vars-local () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1785 "Make the indentation variables local to this buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1786 Normally they already are local. This command is provided in case |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1787 variable `sh-make-vars-local' has been set to nil. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1788 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1789 To revert all these variables to the global values, use |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1790 command `sh-reset-indent-vars-to-global-values'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1791 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1792 (mapcar 'make-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1793 (message "Indentation variable are now local.")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1794 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1795 (defun sh-reset-indent-vars-to-global-values () |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1796 "Reset local indentation variables to the global values. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1797 Then, if variable `sh-make-vars-local' is non-nil, make them local." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1798 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1799 (mapcar 'kill-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1800 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1801 (mapcar 'make-local-variable sh-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1802 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1803 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1804 ;; Theoretically these are only needed in shell and derived modes. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1805 ;; However, the routines which use them are only called in those modes. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1806 (defconst sh-special-keywords "then\\|do") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1807 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1808 (defun sh-help-string-for-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1809 "Construct a string for `sh-read-variable' when changing variable VAR ." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1810 (let ((msg (documentation-property var 'variable-documentation)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1811 (msg2 "")) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1812 (unless (memq var '(sh-first-lines-indent sh-indent-comment)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1813 (setq msg2 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1814 (format "\n |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1815 You can enter a number (positive to increase indentation, |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1816 negative to decrease indentation, zero for no change to indentation). |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1817 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1818 Or, you can enter one of the following symbols which are relative to |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1819 the value of variable `sh-basic-offset' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1820 which in this buffer is currently %s. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1821 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1822 \t%s." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1823 sh-basic-offset |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1824 (mapconcat (lambda (x) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1825 (nth (1- (length x)) x)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1826 sh-symbol-list "\n\t")))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1827 (concat |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1828 ;; The following shows the global not the local value! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1829 ;; (format "Current value of %s is %s\n\n" var (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1830 msg msg2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1831 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1832 (defun sh-read-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1833 "Read a new value for indentation variable VAR." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1834 (interactive "*variable? ") ;; to test |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1835 (let ((minibuffer-help-form `(sh-help-string-for-variable |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1836 (quote ,var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1837 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1838 (setq val (read-from-minibuffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1839 (format "New value for %s (press %s for help): " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1840 var (single-key-description help-char)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1841 (format "%s" (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1842 nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1843 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1844 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1845 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1846 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1847 (defun sh-in-comment-or-string (start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1848 "Return non-nil if START is in a comment or string." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1849 (save-excursion |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1850 (let ((state (syntax-ppss start))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1851 (or (nth 3 state) (nth 4 state))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1852 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1853 (defun sh-goto-matching-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1854 "Go to the matching if for a fi. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1855 This handles nested if..fi pairs." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1856 (let ((found (sh-find-prev-matching "\\bif\\b" "\\bfi\\b" 1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1857 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1858 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1859 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1860 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1861 ;; Functions named sh-handle-this-XXX are called when the keyword on the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1862 ;; line whose indentation is being handled contain XXX; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1863 ;; those named sh-handle-prev-XXX are when XXX appears on the previous line. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1864 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1865 (defun sh-handle-prev-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1866 (list '(+ sh-indent-after-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1867 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1868 (defun sh-handle-this-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1869 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1870 ;; (list "aligned to if") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1871 (list "aligned to if" '(+ sh-indent-for-else)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1872 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1873 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1874 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1875 (defun sh-handle-prev-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1876 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1877 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1878 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1879 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1880 (defun sh-handle-this-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1881 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1882 (list "aligned to if" '(+ sh-indent-for-fi)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1883 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1884 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1885 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1886 (defun sh-handle-prev-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1887 ;; Why do we have this rule? Because we must go back to the if |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1888 ;; to get its indent. We may continue back from there. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1889 ;; We return nil because we don't have anything to add to result, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1890 ;; the side affect of setting align-point is all that matters. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1891 ;; we could return a comment (a string) but I can't think of a good one... |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1892 (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1893 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1894 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1895 (defun sh-handle-this-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1896 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1897 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1898 (list '(+ sh-indent-for-then)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1899 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1900 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1901 (defun sh-handle-prev-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1902 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1903 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1904 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1905 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1906 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1907 (defun sh-handle-prev-open () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1908 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1909 (let ((x (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1910 (if (and x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1911 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1912 (goto-char x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1913 (or |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1914 (looking-at "function\\b") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1915 (looking-at "\\s-*\\S-+\\s-*()") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1916 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1917 (list '(+ sh-indent-after-function)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1918 (list '(+ sh-indent-after-open))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1919 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1920 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1921 (defun sh-handle-this-close () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1922 (forward-char 1) ;; move over ")" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1923 (if (sh-safe-forward-sexp -1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1924 (list "aligned to opening paren"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1925 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1926 (defun sh-goto-matching-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1927 (let ((found (sh-find-prev-matching "\\bcase\\b" "\\besac\\b" 1))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1928 (if found (goto-char found)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1929 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1930 (defun sh-handle-prev-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1931 ;; This is typically called when point is on same line as a case |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1932 ;; we shouldn't -- and can't find prev-case |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1933 (if (looking-at ".*\\<case\\>") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1934 (list '(+ sh-indent-for-case-label)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1935 (error "We don't seem to be on a line with a case"))) ;; debug |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1936 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1937 (defun sh-handle-this-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1938 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1939 (list "aligned to matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1940 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1941 (defun sh-handle-prev-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1942 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1943 (list "matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1944 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1945 (defun sh-handle-after-case-label () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1946 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1947 (list '(+ sh-indent-for-case-alt)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1948 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1949 (defun sh-handle-prev-case-alt-end () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1950 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1951 (list '(+ sh-indent-for-case-label)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1952 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1953 (defun sh-safe-forward-sexp (&optional arg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1954 "Try and do a `forward-sexp', but do not error. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1955 Return new point if successful, nil if an error occurred." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1956 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1957 (progn |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1958 (forward-sexp (or arg 1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1959 (point)) ;; return point if successful |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1960 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1961 (sh-debug "oops!(1) %d" (point)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1962 nil))) ;; return nil if fail |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1963 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1964 (defun sh-goto-match-for-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1965 (let ((found (sh-find-prev-matching sh-regexp-for-done sh-re-done 1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1966 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1967 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1968 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1969 (defun sh-handle-this-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1970 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1971 (list "aligned to do stmt" '(+ sh-indent-for-done)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1972 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1973 (defun sh-handle-prev-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1974 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1975 (list "previous done"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1976 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1977 (defun sh-handle-this-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1978 (if (sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1979 (list '(+ sh-indent-for-do)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1980 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1981 (defun sh-handle-prev-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1982 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1983 ((save-restriction |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1984 (narrow-to-region |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1985 (point) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1986 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1987 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1988 (point))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1989 (sh-goto-match-for-done)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1990 (sh-debug "match for done found on THIS line") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1991 (list '(+ sh-indent-after-loop-construct))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1992 ((sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1993 (sh-debug "match for done found on PREV line") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1994 (list '(+ sh-indent-after-do))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1995 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1996 (message "match for done NOT found") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1997 nil))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1998 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1999 ;; for rc: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2000 (defun sh-find-prev-switch () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2001 "Find the line for the switch keyword matching this line's case keyword." |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2002 (re-search-backward "\\<switch\\>" nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2003 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2004 (defun sh-handle-this-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2005 (if (sh-find-prev-switch) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2006 (list '(+ sh-indent-after-switch)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2007 ;; (list '(+ sh-indent-for-case-label)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2008 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2009 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2010 (defun sh-handle-prev-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2011 (list '(+ sh-indent-after-case))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2012 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2013 (defun sh-check-rule (n thing) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2014 (let ((rule (nth n (assoc thing sh-kw-alist))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2015 (val nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2016 (if rule |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2017 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2018 (setq val (funcall rule)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2019 (sh-debug "rule (%d) for %s at %d is %s\n-> returned %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2020 n thing (point) rule val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2021 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2022 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2023 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2024 (defun sh-get-indent-info () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2025 "Return indent-info for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2026 This is a list. nil means the line is to be left as is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2027 Otherwise it contains one or more of the following sublists: |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2028 \(t NUMBER\) NUMBER is the base location in the buffer that indentation is |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2029 relative to. If present, this is always the first of the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2030 sublists. The indentation of the line in question is |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2031 derived from the indentation of this point, possibly |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2032 modified by subsequent sublists. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2033 \(+ VAR\) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2034 \(- VAR\) Get the value of variable VAR and add to or subtract from |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2035 the indentation calculated so far. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2036 \(= VAR\) Get the value of variable VAR and *replace* the |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2037 indentation with its value. This only occurs for |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2038 special variables such as `sh-indent-comment'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2039 STRING This is ignored for the purposes of calculating |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2040 indentation, it is printed in certain cases to help show |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2041 what the indentation is based on." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2042 ;; See comments before `sh-kw'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2043 (save-excursion |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2044 (let ((have-result nil) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2045 this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2046 start |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2047 val |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2048 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2049 (align-point nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2050 prev-line-end x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2051 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2052 ;; Note: setting result to t means we are done and will return nil. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2053 ;;(This function never returns just t.) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2054 (cond |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2055 ((or (and (boundp 'font-lock-string-face) (not (bobp)) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2056 (eq (get-text-property (1- (point)) 'face) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2057 font-lock-string-face)) |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
2058 (eq (get-text-property (point) 'face) sh-heredoc-face)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2059 (setq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2060 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2061 ((looking-at "\\s-*#") ; was (equal this-kw "#") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2062 (if (bobp) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2063 (setq result t) ;; return nil if 1st line! |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2064 (setq result (list '(= sh-indent-comment))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2065 ;; we still need to get previous line in case |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2066 ;; sh-indent-comment is t (indent as normal) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2067 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2068 (setq have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2069 )) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2070 ) ;; cond |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2071 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2072 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2073 ;; Continuation lines are handled specially |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2074 (if (sh-this-is-a-continuation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2075 (progn |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2076 (setq result |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2077 (if (save-excursion |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2078 (beginning-of-line) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2079 (not (memq (char-before (- (point) 2)) '(?\s ?\t)))) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2080 ;; By convention, if the continuation \ is not |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2081 ;; preceded by a SPC or a TAB it means that the line |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2082 ;; is cut at a place where spaces cannot be freely |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2083 ;; added/removed. I.e. do not indent the line. |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2084 (list '(= nil)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2085 ;; We assume the line being continued is already |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2086 ;; properly indented... |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2087 ;; (setq prev-line-end (sh-prev-line)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2088 (setq align-point (sh-prev-line nil)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2089 (list '(+ sh-indent-for-continuation)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2090 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2091 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2092 (skip-chars-forward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2093 (setq this-kw (sh-get-kw))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2094 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2095 ;; Handle "this" keyword: first word on the line we're |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2096 ;; calculating indentation info for. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2097 (if this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2098 (if (setq val (sh-check-rule 1 this-kw)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2099 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2100 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2101 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2102 "this - setting align-point to %d" align-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2103 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2104 (setq have-result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2105 ;; set prev-line to continue processing remainder |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2106 ;; of this line as a previous line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2107 (setq prev-line-end (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2108 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2109 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2110 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2111 (setq prev-line-end (sh-prev-line 'end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2112 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2113 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2114 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2115 ;; We start off at beginning of this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2116 ;; Scan previous statements while this is <= |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2117 ;; start of previous line. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2118 (setq start (point)) ;; for debug only |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2119 (goto-char prev-line-end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2120 (setq x t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2121 (while (and x (setq x (sh-prev-thing))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2122 (sh-debug "at %d x is: %s result is: %s" (point) x result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2123 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2124 ((and (equal x ")") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2125 (equal (get-text-property (1- (point)) 'syntax-table) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2126 sh-st-punc)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2127 (sh-debug "Case label) here") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2128 (setq x 'case-label) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2129 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2130 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2131 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2132 (setq align-point (point)))) |
53419 | 2133 (or (bobp) |
2134 (forward-char -1)) | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2135 (skip-chars-forward "[a-z0-9]*?") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2136 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2137 ((string-match "[])}]" x) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2138 (setq x (sh-safe-forward-sexp -1)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2139 (if x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2140 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2141 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2142 (setq result (append result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2143 (list "aligned to opening paren"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2144 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2145 ((string-match "[[({]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2146 (sh-debug "Checking special thing: %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2147 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2148 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2149 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2150 (setq align-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2151 ((string-match "[\"'`]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2152 (sh-debug "Skipping back for %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2153 ;; this was oops-2 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2154 (setq x (sh-safe-forward-sexp -1))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2155 ((stringp x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2156 (sh-debug "Checking string %s at %s" x (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2157 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2158 ;; (or (eq t (car val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2159 ;; (eq t (car (car val)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2160 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2161 ;; not sure about this test Wed Jan 27 23:48:35 1999 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2162 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2163 (unless (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2164 (forward-char -1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2165 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2166 (error "Don't know what to do with %s" x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2167 ) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2168 ) ;; while |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2169 (sh-debug "result is %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2170 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2171 (sh-debug "No prev line!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2172 (sh-debug "result: %s align-point: %s" result align-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2173 ) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2174 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2175 (if align-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2176 ;; was: (setq result (append result (list (list t align-point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2177 (setq result (append (list (list t align-point)) result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2178 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2179 (sh-debug "result is now: %s" result) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2180 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2181 (or result |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2182 (setq result (list (if prev-line-end |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2183 (list t prev-line-end) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2184 (list '= 'sh-first-lines-indent))))) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2185 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2186 (if (eq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2187 (setq result nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2188 (sh-debug "result is: %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2189 result |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2190 ) ;; let |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2191 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2192 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2193 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2194 (defun sh-get-indent-var-for-line (&optional info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2195 "Return the variable controlling indentation for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2196 If there is not [just] one such variable, return a string |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2197 indicating the problem. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2198 If INFO is supplied it is used, else it is calculated." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2199 (let ((var nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2200 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2201 (reason nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2202 sym elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2203 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2204 (setq info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2205 (if (null info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2206 (setq result "this line to be left as is") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2207 (while (and info (null result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2208 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2209 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2210 ((stringp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2211 (setq reason elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2212 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2213 ((not (listp elt)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2214 (error "sh-get-indent-var-for-line invalid elt: %s" elt)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2215 ;; so it is a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2216 ((eq t (car elt)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2217 ) ;; nothing |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2218 ((symbolp (setq sym (nth 1 elt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2219 ;; A bit of a kludge - when we see the sh-indent-comment |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2220 ;; ignore other variables. Otherwise it is tricky to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2221 ;; "learn" the comment indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2222 (if (eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2223 (setq result var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2224 (if var |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2225 (setq result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2226 "this line is controlled by more than 1 variable.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2227 (setq var sym)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2228 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2229 (error "sh-get-indent-var-for-line invalid list elt: %s" elt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2230 (setq info (cdr info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2231 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2232 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2233 (setq result var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2234 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2235 (setq result reason)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2236 (if (null result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2237 ;; e.g. just had (t POS) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2238 (setq result "line has default indentation")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2239 result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2240 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2241 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2242 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2243 ;; Finding the previous line isn't trivial. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2244 ;; We must *always* go back one more and see if that is a continuation |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2245 ;; line -- it is the PREVIOUS line which is continued, not the one |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2246 ;; we are going to! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2247 ;; Also, we want to treat a whole "here document" as one big line, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2248 ;; because we may want to a align to the beginning of it. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2249 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2250 ;; What we do: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2251 ;; - go back to previous non-empty line |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2252 ;; - if this is in a here-document, go to the beginning of it |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2253 ;; - while previous line is continued, go back one line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2254 (defun sh-prev-line (&optional end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2255 "Back to end of previous non-comment non-empty line. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2256 Go to beginning of logical line unless END is non-nil, in which case |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2257 we go to the end of the previous line and do not check for continuations." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2258 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2259 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2260 (forward-comment (- (point-max))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2261 (unless end (beginning-of-line)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2262 (when (and (not (bobp)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2263 (equal (get-text-property (1- (point)) 'face) |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
2264 sh-heredoc-face)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2265 (let ((p1 (previous-single-property-change (1- (point)) 'face))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2266 (when p1 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2267 (goto-char p1) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2268 (if end |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2269 (end-of-line) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2270 (beginning-of-line))))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2271 (unless end |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2272 ;; we must check previous lines to see if they are continuation lines |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2273 ;; if so, we must return position of first of them |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2274 (while (and (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2275 (>= 0 (forward-line -1)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2276 (beginning-of-line) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2277 (skip-chars-forward " \t")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2278 (point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2279 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2280 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2281 (defun sh-prev-stmt () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2282 "Return the address of the previous stmt or nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2283 ;; This is used when we are trying to find a matching keyword. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2284 ;; Searching backward for the keyword would certainly be quicker, but |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2285 ;; it is hard to remove "false matches" -- such as if the keyword |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2286 ;; appears in a string or quote. This way is slower, but (I think) safer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2287 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2288 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2289 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2290 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2291 (found nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2292 (prev nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2293 (skip-chars-backward " \t;|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2294 (while (and (not found) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2295 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2296 going) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2297 ;; Do a backward-sexp if possible, else backup bit by bit... |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2298 (if (sh-safe-forward-sexp -1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2299 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2300 (if (looking-at sh-special-keywords) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2301 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2302 (setq found prev)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2303 (setq prev (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2304 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2305 ;; backward-sexp failed |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2306 (if (zerop (skip-chars-backward " \t()[\]{};`'")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2307 (forward-char -1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2308 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2309 (let ((back (sh-prev-line nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2310 (if back |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2311 (goto-char back) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2312 (setq going nil))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2313 (unless found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2314 (skip-chars-backward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2315 (if (or (and (bolp) (not (sh-this-is-a-continuation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2316 (eq (char-before) ?\;) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2317 (looking-at "\\s-*[|&]")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2318 (setq found (point))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2319 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2320 (goto-char found)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2321 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2322 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2323 (skip-chars-forward " \t|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2324 (setq found (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2325 (if (>= (point) start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2326 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2327 (debug "We didn't move!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2328 (setq found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2329 (or found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2330 (sh-debug "Did not find prev stmt."))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2331 found))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2332 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2333 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2334 (defun sh-get-word () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2335 "Get a shell word skipping whitespace from point." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2336 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2337 (skip-chars-forward "\t ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2338 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2339 (while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2340 (if (looking-at "[\"'`]") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2341 (sh-safe-forward-sexp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2342 ;; (> (skip-chars-forward "^ \t\n\"'`") 0) |
62550
4f78132b042b
(sh-mode, sh-get-word): Minor regexp fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62310
diff
changeset
|
2343 (> (skip-chars-forward "-_a-zA-Z$0-9") 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2344 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2345 (buffer-substring start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2346 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2347 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2348 (defun sh-prev-thing () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2349 "Return the previous thing this logical line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2350 ;; This is called when `sh-get-indent-info' is working backwards on |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2351 ;; the previous line(s) finding what keywords may be relevant for |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2352 ;; indenting. It moves over sexps if possible, and will stop |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2353 ;; on a ; and at the beginning of a line if it is not a continuation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2354 ;; line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2355 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2356 ;; Added a kludge for ";;" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2357 ;; Possible return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2358 ;; nil - nothing |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2359 ;; a string - possibly a keyword |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2360 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2361 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2362 nil |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2363 (let (c min-point |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2364 (start (point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2365 (save-restriction |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2366 (narrow-to-region |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2367 (if (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2368 (setq min-point (sh-prev-line nil)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2369 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2370 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2371 (setq min-point (point)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2372 (point)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2373 (skip-chars-backward " \t;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2374 (unless (looking-at "\\s-*;;") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2375 (skip-chars-backward "^)}];\"'`({[") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2376 (setq c (char-before)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2377 (sh-debug "stopping at %d c is %s start=%d min-point=%d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2378 (point) c start min-point) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2379 (if (< (point) min-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2380 (error "point %d < min-point %d" (point) min-point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2381 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2382 ((looking-at "\\s-*;;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2383 ;; (message "Found ;; !") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2384 ";;") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2385 ((or (eq c ?\n) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2386 (eq c nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2387 (eq c ?\;)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2388 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2389 ;; skip forward over white space newline and \ at eol |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2390 (skip-chars-forward " \t\n\\\\") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2391 (sh-debug "Now at %d start=%d" (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2392 (if (>= (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2393 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2394 (sh-debug "point: %d >= start: %d" (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2395 nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2396 (sh-get-word)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2397 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2398 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2399 ;; c -- return a string |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2400 (char-to-string c) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2401 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2402 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2403 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2404 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2405 (defun sh-this-is-a-continuation () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2406 "Return non-nil if current line is a continuation of previous line." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2407 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2408 (and (zerop (forward-line -1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2409 (looking-at ".*\\\\$") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2410 (not (nth 4 (parse-partial-sexp (match-beginning 0) (match-end 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2411 nil nil nil t)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2412 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2413 (defun sh-get-kw (&optional where and-move) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2414 "Return first word of line from WHERE. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2415 If AND-MOVE is non-nil then move to end of word." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2416 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2417 (if where |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2418 (goto-char where)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2419 (prog1 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2420 (buffer-substring (point) |
63885
135b9f905ec6
(sh-get-kw): `&' also separates words.
Glenn Morris <rgm@gnu.org>
parents:
63455
diff
changeset
|
2421 (progn (skip-chars-forward "^ \t\n;&")(point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2422 (unless and-move |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2423 (goto-char start))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2424 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2425 (defun sh-find-prev-matching (open close &optional depth) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2426 "Find a matching token for a set of opening and closing keywords. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2427 This takes into account that there may be nested open..close pairings. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2428 OPEN and CLOSE are regexps denoting the tokens to be matched. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2429 Optional parameter DEPTH (usually 1) says how many to look for." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2430 (let ((parse-sexp-ignore-comments t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2431 prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2432 (setq depth (or depth 1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2433 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2434 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2435 (while (and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2436 (/= 0 depth) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2437 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2438 (setq prev (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2439 (goto-char prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2440 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2441 (if (looking-at "\\\\\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2442 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2443 (forward-char 2) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2444 (skip-chars-forward " \t"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2445 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2446 ((looking-at open) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2447 (setq depth (1- depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2448 (sh-debug "found open at %d - depth = %d" (point) depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2449 ((looking-at close) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2450 (setq depth (1+ depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2451 (sh-debug "found close - depth = %d" depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2452 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2453 )))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2454 (error nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2455 (if (eq depth 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2456 prev ;; (point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2457 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2458 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2459 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2460 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2461 (defun sh-var-value (var &optional ignore-error) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2462 "Return the value of variable VAR, interpreting symbols. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2463 It can also return t or nil. |
60917
87f9bb9d3718
* progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
Werner LEMBERG <wl@gnu.org>
parents:
59622
diff
changeset
|
2464 If an invalid value is found, throw an error unless Optional argument |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2465 IGNORE-ERROR is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2466 (let ((val (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2467 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2468 ((numberp val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2469 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2470 ((eq val t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2471 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2472 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2473 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2474 ((eq val '+) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2475 sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2476 ((eq val '-) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2477 (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2478 ((eq val '++) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2479 (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2480 ((eq val '--) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2481 (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2482 ((eq val '*) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2483 (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2484 ((eq val '/) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2485 (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2486 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2487 (if ignore-error |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2488 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2489 (message "Don't know how to handle %s's value of %s" var val) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2490 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2491 (error "Don't know how to handle %s's value of %s" var val)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2492 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2493 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2494 (defun sh-set-var-value (var value &optional no-symbol) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2495 "Set variable VAR to VALUE. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2496 Unless optional argument NO-SYMBOL is non-nil, then if VALUE is |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2497 can be represented by a symbol then do so." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2498 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2499 (no-symbol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2500 (set var value)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2501 ((= value sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2502 (set var '+)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2503 ((= value (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2504 (set var '-)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2505 ((eq value (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2506 (set var '++)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2507 ((eq value (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2508 (set var '--)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2509 ((eq value (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2510 (set var '*)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2511 ((eq value (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2512 (set var '/)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2513 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2514 (set var value))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2515 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2516 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2517 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2518 (defun sh-calculate-indent (&optional info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2519 "Return the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2520 If INFO is supplied it is used, else it is calculated from current line." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2521 (let ((ofs 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2522 (base-value 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2523 elt a b var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2524 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2525 (setq info (sh-get-indent-info))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2526 (when info |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2527 (while info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2528 (sh-debug "info: %s ofs=%s" info ofs) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2529 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2530 (cond |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2531 ((stringp elt)) ;; do nothing? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2532 ((listp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2533 (setq a (car (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2534 (setq b (nth 1 (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2535 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2536 ((eq a t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2537 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2538 (goto-char b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2539 (setq val (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2540 (setq base-value val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2541 ((symbolp b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2542 (setq val (sh-var-value b)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2543 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2544 ((eq a '=) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2545 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2546 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2547 ;; no indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2548 ;; set info to nil so we stop immediately |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2549 (setq base-value nil ofs nil info nil)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2550 ((eq val t) (setq ofs 0)) ;; indent as normal line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2551 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2552 ;; The following assume the (t POS) come first! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2553 (setq ofs val base-value 0) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2554 (setq info nil)))) ;; ? stop now |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2555 ((eq a '+) (setq ofs (+ ofs val))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2556 ((eq a '-) (setq ofs (- ofs val))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2557 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2558 (error "sh-calculate-indent invalid a a=%s b=%s" a b)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2559 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2560 (error "sh-calculate-indent invalid elt: a=%s b=%s" a b)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2561 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2562 (error "sh-calculate-indent invalid elt %s" elt))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2563 (sh-debug "a=%s b=%s val=%s base-value=%s ofs=%s" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2564 a b val base-value ofs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2565 (setq info (cdr info))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2566 ;; return value: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2567 (sh-debug "at end: base-value: %s ofs: %s" base-value ofs) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2568 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2569 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2570 ((or (null base-value)(null ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2571 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2572 ((and (numberp base-value)(numberp ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2573 (sh-debug "base (%d) + ofs (%d) = %d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2574 base-value ofs (+ base-value ofs)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2575 (+ base-value ofs)) ;; return value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2576 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2577 (error "sh-calculate-indent: Help. base-value=%s ofs=%s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2578 base-value ofs) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2579 nil))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2580 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2581 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
2582 (defun sh-indent-line () |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2583 "Indent the current line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2584 (interactive) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
2585 (let ((indent (sh-calculate-indent)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2586 (pos (- (point-max) (point)))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2587 (when indent |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2588 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2589 (skip-chars-forward " \t") |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
2590 (indent-line-to indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2591 ;; If initial point was within line's indentation, |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2592 ;; position after the indentation. Else stay at same point in text. |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2593 (if (> (- (point-max) pos) (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2594 (goto-char (- (point-max) pos)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2595 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2596 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2597 (defun sh-blink (blinkpos &optional msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2598 "Move cursor momentarily to BLINKPOS and display MSG." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2599 ;; We can get here without it being a number on first line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2600 (if (numberp blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2601 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2602 (goto-char blinkpos) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2603 (if msg (message "%s" msg) (message nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2604 (sit-for blink-matching-delay)) |
65610
5c0acc1c2a2c
(sh-blink): Fix spurious reference to variable `message'.
Juanma Barranquero <lekktu@gmail.com>
parents:
65584
diff
changeset
|
2605 (if msg (message "%s" msg) (message nil)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2606 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2607 (defun sh-show-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2608 "Show the how the currently line would be indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2609 This tells you which variable, if any, controls the indentation of |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2610 this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2611 If optional arg ARG is non-null (called interactively with a prefix), |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2612 a pop up window describes this variable. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2613 If variable `sh-blink' is non-nil then momentarily go to the line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2614 we are indenting relative to, if applicable." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2615 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2616 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2617 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2618 (var (sh-get-indent-var-for-line info)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2619 (curr-indent (current-indentation)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2620 val msg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2621 (if (stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2622 (message "%s" (setq msg var)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2623 (setq val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2624 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2625 (if (eq curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2626 (setq msg (format "%s is %s" var (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2627 (setq msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2628 (if val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2629 (format "%s (%s) would change indent from %d to: %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2630 var (symbol-value var) curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2631 (format "%s (%s) would leave line as is" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2632 var (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2633 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2634 (if (and arg var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2635 (describe-variable var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2636 (if sh-blink |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2637 (let ((info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2638 (if (and info (listp (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2639 (eq (car (car info)) t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2640 (sh-blink (nth 1 (car info)) msg) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2641 (message "%s" msg))) |
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2642 (message "%s" msg)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2643 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2644 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2645 (defun sh-set-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2646 "Set the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2647 If the current line is controlled by an indentation variable, prompt |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2648 for a new value for it." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2649 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2650 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2651 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2652 (var (sh-get-indent-var-for-line info)) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2653 val old-val indent-val) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2654 (if (stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2655 (message "Cannot set indent - %s" var) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2656 (setq old-val (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2657 (setq val (sh-read-variable var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2658 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2659 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2660 (set var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2661 (setq indent-val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2662 (if indent-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2663 (message "Variable: %s Value: %s would indent to: %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2664 var (symbol-value var) indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2665 (message "Variable: %s Value: %s would leave line as is." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2666 var (symbol-value var))) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2667 ;; I'm not sure about this, indenting it now? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2668 ;; No. Because it would give the impression that an undo would |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2669 ;; restore thing, but the value has been altered. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2670 ;; (sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2671 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2672 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2673 (set var old-val) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2674 (message "Bad value for %s, restoring to previous value %s" |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2675 var old-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2676 (sit-for 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2677 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2678 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2679 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2680 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2681 (defun sh-learn-line-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2682 "Learn how to indent a line as it currently is indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2683 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2684 If there is an indentation variable which controls this line's indentation, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2685 then set it to a value which would indent the line the way it |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2686 presently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2687 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2688 If the value can be represented by one of the symbols then do so |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2689 unless optional argument ARG (the prefix when interactive) is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2690 (interactive "*P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2691 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2692 ;; I'm not sure if we show allow learning on an empty line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2693 ;; Though it might occasionally be useful I think it usually |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2694 ;; would just be confusing. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2695 (if (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2696 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2697 (looking-at "\\s-*$")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2698 (message "sh-learn-line-indent ignores empty lines.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2699 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2700 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2701 ival sval diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2702 (no-symbol arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2703 (curr-indent (current-indentation))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2704 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2705 ((stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2706 (message "Cannot learn line - %s" var)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2707 ((eq var 'sh-indent-comment) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2708 ;; This is arbitrary... |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2709 ;; - if curr-indent is 0, set to curr-indent |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2710 ;; - else if it has the indentation of a "normal" line, |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2711 ;; then set to t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2712 ;; - else set to curr-indent. |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2713 (setq sh-indent-comment |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2714 (if (= curr-indent 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2715 0 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2716 (let* ((sh-indent-comment t) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2717 (val2 (sh-calculate-indent info))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2718 (if (= val2 curr-indent) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2719 t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2720 curr-indent)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2721 (message "%s set to %s" var (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2722 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2723 ((numberp (setq sval (sh-var-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2724 (setq ival (sh-calculate-indent info)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2725 (setq diff (- curr-indent ival)) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2726 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2727 (sh-debug "curr-indent: %d ival: %d diff: %d var:%s sval %s" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2728 curr-indent ival diff var sval) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2729 (setq new-val (+ sval diff)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2730 ;;; I commented out this because someone might want to replace |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2731 ;;; a value of `+' with the current value of sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2732 ;;; or vice-versa. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2733 ;;; (if (= 0 diff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2734 ;;; (message "No change needed!") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2735 (sh-set-var-value var new-val no-symbol) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2736 (message "%s set to %s" var (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2737 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2738 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2739 (debug) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2740 (message "Cannot change %s" var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2741 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2742 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2743 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2744 (defun sh-mark-init (buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2745 "Initialize a BUFFER to be used by `sh-mark-line'." |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2746 (with-current-buffer (get-buffer-create buffer) |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2747 (erase-buffer) |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2748 (occur-mode))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2749 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2750 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2751 (defun sh-mark-line (message point buffer &optional add-linenum occur-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2752 "Insert MESSAGE referring to location POINT in current buffer into BUFFER. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2753 Buffer BUFFER is in `occur-mode'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2754 If ADD-LINENUM is non-nil the message is preceded by the line number. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2755 If OCCUR-POINT is non-nil then the line is marked as a new occurrence |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2756 so that `occur-next' and `occur-prev' will work." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2757 (let ((m1 (make-marker)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2758 start |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2759 (line "")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2760 (when point |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2761 (set-marker m1 point (current-buffer)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2762 (if add-linenum |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2763 (setq line (format "%d: " (1+ (count-lines 1 point)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2764 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2765 (if (get-buffer buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2766 (set-buffer (get-buffer buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2767 (set-buffer (get-buffer-create buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2768 (occur-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2769 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2770 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2771 (setq start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2772 (insert line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2773 (if occur-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2774 (setq occur-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2775 (insert message) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2776 (if point |
38079
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2777 (add-text-properties |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2778 start (point) |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2779 '(mouse-face highlight |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2780 help-echo "mouse-2: go to the line where I learned this"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2781 (insert "\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2782 (if point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2783 (progn |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2784 (put-text-property start (point) 'occur-target m1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2785 (if occur-point |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2786 (put-text-property start occur-point |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2787 'occur-match t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2788 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2789 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2790 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2791 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2792 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2793 ;; Is this really worth having? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2794 (defvar sh-learned-buffer-hook nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2795 "*An abnormal hook, called with an alist of learned variables.") |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
2796 ;; Example of how to use sh-learned-buffer-hook |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2797 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2798 ;; (defun what-i-learned (list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2799 ;; (let ((p list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2800 ;; (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2801 ;; (set-buffer "*scratch*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2802 ;; (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2803 ;; (insert "(setq\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2804 ;; (while p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2805 ;; (insert (format " %s %s \n" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2806 ;; (nth 0 (car p)) (nth 1 (car p)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2807 ;; (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2808 ;; (insert ")\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2809 ;; ))) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2810 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2811 ;; (add-hook 'sh-learned-buffer-hook 'what-i-learned) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2812 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2813 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2814 ;; Originally this was sh-learn-region-indent (beg end) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2815 ;; However, in practice this was awkward so I changed it to |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2816 ;; use the whole buffer. Use narrowing if needbe. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2817 (defun sh-learn-buffer-indent (&optional arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2818 "Learn how to indent the buffer the way it currently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2819 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2820 Output in buffer \"*indent*\" shows any lines which have conflicting |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2821 values of a variable, and the final value of all variables learned. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2822 This buffer is popped to automatically if there are any discrepancies. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2823 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2824 If no prefix ARG is given, then variables are set to numbers. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2825 If a prefix arg is given, then variables are set to symbols when |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2826 applicable -- e.g. to symbol `+' if the value is that of the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2827 basic indent. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2828 If a positive numerical prefix is given, then `sh-basic-offset' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2829 is set to the prefix's numerical value. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2830 Otherwise, sh-basic-offset may or may not be changed, according |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2831 to the value of variable `sh-learn-basic-offset'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2832 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2833 Abnormal hook `sh-learned-buffer-hook' if non-nil is called when the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2834 function completes. The function is abnormal because it is called |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2835 with an alist of variables learned. This feature may be changed or |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2836 removed in the future. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2837 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2838 This command can often take a long time to run." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2839 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2840 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2841 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2842 (goto-char (point-min)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2843 (let ((learned-var-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2844 (out-buffer "*indent*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2845 (num-diffs 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2846 previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2847 (max 17) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2848 vec |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2849 msg |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2850 (comment-col nil) ;; number if all same, t if seen diff values |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2851 (comments-always-default t) ;; nil if we see one not default |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2852 initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2853 (specified-basic-offset (and arg (numberp arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2854 (> arg 0))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2855 (linenum 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2856 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2857 (setq vec (make-vector max 0)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2858 (sh-mark-init out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2859 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2860 (if specified-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2861 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2862 (setq sh-basic-offset arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2863 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2864 (format "Using specified sh-basic-offset of %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2865 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2866 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2867 (format "Initial value of sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2868 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2869 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2870 (while (< (point) (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2871 (setq linenum (1+ linenum)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2872 ;; (if (zerop (% linenum 10)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2873 (message "line %d" linenum) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2874 ;; ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2875 (unless (looking-at "\\s-*$") ;; ignore empty lines! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2876 (let* ((sh-indent-comment t) ;; info must return default indent |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2877 (info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2878 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2879 sval ival diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2880 (curr-indent (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2881 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2882 ((null var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2883 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2884 ((stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2885 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2886 ((numberp (setq sval (sh-var-value var 'no-error))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2887 ;; the numberp excludes comments since sval will be t. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2888 (setq ival (sh-calculate-indent)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2889 (setq diff (- curr-indent ival)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2890 (setq new-val (+ sval diff)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2891 (sh-set-var-value var new-val 'no-symbol) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2892 (unless (looking-at "\\s-*#") ;; don't learn from comments |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2893 (if (setq previous-set-info (assoc var learned-var-list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2894 (progn |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2895 ;; it was already there, is it same value ? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2896 (unless (eq (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2897 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2898 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2899 (format "Variable %s was set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2900 var (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2901 (point) out-buffer t t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2902 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2903 (format " but was previously set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2904 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2905 (nth 2 previous-set-info) out-buffer t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2906 (setq num-diffs (1+ num-diffs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2907 ;; (delete previous-set-info learned-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2908 (setcdr previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2909 (list (symbol-value var) (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2910 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2911 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2912 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2913 (append (list (list var (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2914 (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2915 learned-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2916 (if (numberp new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2917 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2918 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2919 "This line's indent value: %d" new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2920 (if (< new-val 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2921 (setq new-val (- new-val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2922 (if (< new-val max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2923 (aset vec new-val (1+ (aref vec new-val)))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2924 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2925 ((eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2926 (unless (= curr-indent (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2927 ;; this is not the default indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2928 (setq comments-always-default nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2929 (if comment-col ;; then we have see one before |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2930 (or (eq comment-col curr-indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2931 (setq comment-col t)) ;; seen a different one |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2932 (setq comment-col curr-indent)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2933 )) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2934 (t |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2935 (sh-debug "Cannot learn this line!!!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2936 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2937 (sh-debug |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2938 "at %s learned-var-list is %s" (point) learned-var-list) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2939 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2940 (forward-line 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2941 ) ;; while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2942 (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2943 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2944 (setq msg (format |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2945 "comment-col = %s comments-always-default = %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2946 comment-col comments-always-default)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2947 ;; (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2948 (sh-mark-line msg nil out-buffer))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2949 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2950 ((eq comment-col 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2951 (setq msg "\nComments are all in 1st column.\n")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2952 (comments-always-default |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2953 (setq msg "\nComments follow default indentation.\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2954 (setq comment-col t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2955 ((numberp comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2956 (setq msg (format "\nComments are in col %d." comment-col))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2957 (t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2958 (setq msg "\nComments seem to be mixed, leaving them as is.\n") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2959 (setq comment-col nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2960 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2961 (sh-debug msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2962 (sh-mark-line msg nil out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2963 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2964 (sh-mark-line initial-msg nil out-buffer t t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2965 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2966 (setq suggested (sh-guess-basic-offset vec)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2967 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2968 (if (and suggested (not specified-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2969 (let ((new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2970 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2971 ;; t => set it if we have a single value as a number |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2972 ((and (eq sh-learn-basic-offset t) (numberp suggested)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2973 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2974 ;; other non-nil => set it if only one value was found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2975 (sh-learn-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2976 (if (numberp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2977 suggested |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2978 (if (= (length suggested) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2979 (car suggested)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2980 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2981 nil)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2982 (if new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2983 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2984 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2985 (append (list (list 'sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2986 (setq sh-basic-offset new-value) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2987 (point-max))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2988 learned-var-list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2989 ;; Not sure if we need to put this line in, since |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2990 ;; it will appear in the "Learned variable settings". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2991 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2992 (format "Changed sh-basic-offset to: %d" sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2993 nil out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2994 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2995 (if (listp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2996 (format "Possible value(s) for sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2997 (mapconcat 'int-to-string suggested " ")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2998 (format "Suggested sh-basic-offset: %d" suggested)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2999 nil out-buffer)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3000 |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3001 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3002 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3003 (append (list (list 'sh-indent-comment comment-col (point-max))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3004 learned-var-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3005 (setq sh-indent-comment comment-col) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
3006 (let ((name (buffer-name))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3007 (sh-mark-line "\nLearned variable settings:" nil out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3008 (if arg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3009 ;; Set learned variables to symbolic rather than numeric |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3010 ;; values where possible. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3011 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3012 (let ((var (car learned-var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3013 (val (nth 1 learned-var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3014 (when (and (not (eq var 'sh-basic-offset)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3015 (numberp val)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3016 (sh-set-var-value var val))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3017 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3018 (let ((var (car learned-var))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3019 (sh-mark-line (format " %s %s" var (symbol-value var)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3020 (nth 2 learned-var) out-buffer))) |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
3021 (with-current-buffer out-buffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3022 (goto-char (point-min)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3023 (insert |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3024 (format "Indentation values for buffer %s.\n" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3025 (format "%d indentation variable%s different values%s\n\n" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3026 num-diffs |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3027 (if (= num-diffs 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3028 " has" "s have") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3029 (if (zerop num-diffs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3030 "." ":")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3031 ))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3032 ;; Are abnormal hooks considered bad form? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3033 (run-hook-with-args 'sh-learned-buffer-hook learned-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3034 (if (or sh-popup-occur-buffer (> num-diffs 0)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3035 (pop-to-buffer out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3036 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3037 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3038 (defun sh-guess-basic-offset (vec) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3039 "See if we can determine a reasonable value for `sh-basic-offset'. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3040 This is experimental, heuristic and arbitrary! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3041 Argument VEC is a vector of information collected by |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3042 `sh-learn-buffer-indent'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3043 Return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3044 number - there appears to be a good single value |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3045 list of numbers - no obvious one, here is a list of one or more |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3046 reasonable choices |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3047 nil - we couldn't find a reasonable one." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3048 (let* ((max (1- (length vec))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3049 (i 1) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
3050 (totals (make-vector max 0))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3051 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3052 (aset totals i (+ (aref totals i) (* 4 (aref vec i)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3053 (if (zerop (% i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3054 (aset totals i (+ (aref totals i) (aref vec (/ i 2))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3055 (if (< (* i 2) max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3056 (aset totals i (+ (aref totals i) (aref vec (* i 2))))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3057 (setq i (1+ i))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3058 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3059 (let ((x nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3060 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3061 tot sum p) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3062 (setq i 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3063 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3064 (if (/= (aref totals i) 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3065 (setq x (append x (list (cons i (aref totals i)))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3066 (setq i (1+ i))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3067 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3068 (setq x (sort x (lambda (a b) (> (cdr a) (cdr b))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3069 (setq tot (apply '+ (append totals nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3070 (sh-debug (format "vec: %s\ntotals: %s\ntot: %d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3071 vec totals tot)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3072 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3073 ((zerop (length x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3074 (message "no values!")) ;; we return nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3075 ((= (length x) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3076 (message "only value is %d" (car (car x))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3077 (setq result (car (car x)))) ;; return single value |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3078 ((> (cdr (car x)) (/ tot 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3079 ;; 1st is > 50% |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3080 (message "basic-offset is probably %d" (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3081 (setq result (car (car x)))) ;; again, return a single value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3082 ((>= (cdr (car x)) (* 2 (cdr (car (cdr x))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3083 ;; 1st is >= 2 * 2nd |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3084 (message "basic-offset could be %d" (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3085 (setq result (car (car x)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3086 ((>= (+ (cdr (car x))(cdr (car (cdr x)))) (/ tot 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3087 ;; 1st & 2nd together >= 50% - return a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3088 (setq p x sum 0 result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3089 (while (and p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3090 (<= (setq sum (+ sum (cdr (car p)))) (/ tot 2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3091 (setq result (append result (list (car (car p))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3092 (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3093 (message "Possible choices for sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3094 (mapconcat 'int-to-string result " "))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3095 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3096 (message "No obvious value for sh-basic-offset. Perhaps %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3097 (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3098 ;; result is nil here |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3099 )) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
3100 result))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3101 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3102 ;; ======================================================================== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3103 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3104 ;; Styles -- a quick and dirty way of saving the indentation settings. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3105 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3106 (defvar sh-styles-alist nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3107 "A list of all known shell indentation styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3108 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3109 (defun sh-name-style (name &optional confirm-overwrite) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3110 "Name the current indentation settings as a style called NAME. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3111 If this name exists, the command will prompt whether it should be |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3112 overwritten if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3113 - - it was called interactively with a prefix argument, or |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3114 - - called non-interactively with optional CONFIRM-OVERWRITE non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3115 ;; (interactive "sName for this style: ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3116 (interactive |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3117 (list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3118 (read-from-minibuffer "Name for this style? " ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3119 (not current-prefix-arg))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3120 (let ((slist (cons name |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3121 (mapcar (lambda (var) (cons var (symbol-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3122 sh-var-list))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3123 (style (assoc name sh-styles-alist))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3124 (if style |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3125 (if (and confirm-overwrite |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3126 (not (y-or-n-p "This style exists. Overwrite it? "))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3127 (message "Not changing style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3128 (message "Updating style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3129 (setcdr style (cdr slist))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3130 (message "Creating new style %s" name) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3131 (push slist sh-styles-alist)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3132 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3133 (defun sh-load-style (name) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3134 "Set shell indentation values for this buffer from those in style NAME." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3135 (interactive (list (completing-read |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3136 "Which style to use for this buffer? " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3137 sh-styles-alist nil t))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3138 (let ((sl (assoc name sh-styles-alist))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3139 (if (null sl) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3140 (error "sh-load-style - style %s not known" name) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3141 (dolist (var (cdr sl)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3142 (set (car var) (cdr var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3143 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3144 (defun sh-save-styles-to-buffer (buff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3145 "Save all current styles in elisp to buffer BUFF. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3146 This is always added to the end of the buffer." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3147 (interactive (list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3148 (read-from-minibuffer "Buffer to save styles in? " "*scratch*"))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3149 (with-current-buffer (get-buffer-create buff) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3150 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3151 (insert "\n") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3152 (pp `(setq sh-styles-alist ',sh-styles-alist) (current-buffer)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3153 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3154 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3155 |
6463 | 3156 ;; statement syntax-commands for various shells |
3157 | |
3158 ;; You are welcome to add the syntax or even completely new statements as | |
3159 ;; appropriate for your favorite shell. | |
3160 | |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3161 (defconst sh-non-closing-paren |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3162 ;; If we leave it rear-sticky, calling `newline' ends up inserting a \n |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3163 ;; that inherits this property, which then confuses the indentation. |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3164 (propertize ")" 'syntax-table sh-st-punc 'rear-nonsticky t)) |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3165 |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3166 (define-skeleton sh-case |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3167 "Insert a case/switch statement. See `sh-feature'." |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3168 (csh "expression: " |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3169 "switch( " str " )" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3170 > "case " (read-string "pattern: ") ?: \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3171 > _ \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3172 "breaksw" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3173 ( "other pattern, %s: " |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3174 < "case " str ?: \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3175 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3176 "breaksw" \n) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3177 < "default:" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3178 > _ \n |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3179 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3180 < < "endsw" \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3181 (es) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3182 (rc "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3183 > "switch( " str " ) {" \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3184 > "case " (read-string "pattern: ") \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3185 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3186 ( "other pattern, %s: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3187 "case " str > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3188 > _ \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3189 "case *" > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3190 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3191 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3192 ?\} > \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3193 (sh "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3194 > "case " str " in" \n |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3195 ( "pattern, %s: " |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3196 > str sh-non-closing-paren \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3197 > _ \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3198 ";;" \n) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3199 > "*" sh-non-closing-paren \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3200 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3201 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3202 "esac" > \n)) |
6463 | 3203 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3204 (define-skeleton sh-for |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3205 "Insert a for loop. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3206 (csh sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3207 1 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3208 2 "foreach " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3209 4 " ( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3210 6 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3211 15 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3212 16 "end") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3213 (es sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3214 4 " = ") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3215 (rc sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3216 2 "for( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3217 6 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3218 15 ?\} ) |
6463 | 3219 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3220 > "for " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3221 > _ | ?$ & (sh-remember-variable str) \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3222 "done" > \n)) |
6463 | 3223 |
3224 | |
3225 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3226 (define-skeleton sh-indexed-loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3227 "Insert an indexed loop from 1 to n. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3228 (bash sh-modify posix) |
6463 | 3229 (csh "Index variable: " |
3230 "@ " str " = 1" \n | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3231 "while( $" str " <= " (read-string "upper limit: ") " )" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3232 > _ ?$ str \n |
6463 | 3233 "@ " str "++" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3234 < "end" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3235 (es sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3236 4 " =") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3237 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3238 > "integer " str "=0" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3239 > "while (( ( " str " += 1 ) <= " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3240 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3241 " )); do" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3242 > _ ?$ (sh-remember-variable str) > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3243 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3244 (posix "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3245 > str "=1" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3246 "while [ $" str " -le " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3247 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3248 " ]; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3249 > _ ?$ str \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3250 str ?= (sh-add (sh-remember-variable str) 1) \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3251 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3252 (rc "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3253 > "for( " str " in" " `{awk 'BEGIN { for( i=1; i<=" |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3254 (read-string "upper limit: ") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3255 "; i++ ) print i }'`}) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3256 > _ ?$ (sh-remember-variable str) \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3257 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3258 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3259 > "for " str " in `awk 'BEGIN { for( i=1; i<=" |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3260 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3261 "; i++ ) print i }'`; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3262 > _ ?$ (sh-remember-variable str) \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3263 "done" > \n)) |
6463 | 3264 |
3265 | |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3266 (defun sh-shell-initialize-variables () |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3267 "Scan the buffer for variable assignments. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3268 Add these variables to `sh-shell-variables'." |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3269 (message "Scanning buffer `%s' for variable assignments..." (buffer-name)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3270 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3271 (goto-char (point-min)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3272 (setq sh-shell-variables-initialized t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3273 (while (search-forward "=" nil t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3274 (sh-assignment 0))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3275 (message "Scanning buffer `%s' for variable assignments...done" |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3276 (buffer-name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3277 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3278 (defvar sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3279 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3280 (defun sh-add-completer (string predicate code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3281 "Do completion using `sh-shell-variables', but initialize it first. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3282 This function is designed for use as the \"completion table\", |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3283 so it takes three arguments: |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3284 STRING, the current buffer contents; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3285 PREDICATE, the predicate for filtering possible matches; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3286 CODE, which says what kind of things to do. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3287 CODE can be nil, t or `lambda'. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3288 nil means to return the best completion of STRING, or nil if there is none. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3289 t means to return a list of all possible completions of STRING. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3290 `lambda' means to return t if STRING is a valid completion as it stands." |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3291 (let ((sh-shell-variables |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
3292 (with-current-buffer sh-add-buffer |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3293 (or sh-shell-variables-initialized |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3294 (sh-shell-initialize-variables)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3295 (nconc (mapcar (lambda (var) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3296 (let ((name |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3297 (substring var 0 (string-match "=" var)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3298 (cons name name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3299 process-environment) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3300 sh-shell-variables)))) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3301 (case code |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
3302 ((nil) (try-completion string sh-shell-variables predicate)) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3303 (lambda (test-completion string sh-shell-variables predicate)) |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3304 (t (all-completions string sh-shell-variables predicate))))) |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3305 |
6463 | 3306 (defun sh-add (var delta) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3307 "Insert an addition of VAR and prefix DELTA for Bourne (type) shell." |
6463 | 3308 (interactive |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3309 (let ((sh-add-buffer (current-buffer))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3310 (list (completing-read "Variable: " 'sh-add-completer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3311 (prefix-numeric-value current-prefix-arg)))) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3312 (insert (sh-feature '((bash . "$(( ") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3313 (ksh88 . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3314 (posix . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3315 (rc . "`{expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3316 (sh . "`expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3317 (zsh . "$[ "))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3318 (sh-remember-variable var) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3319 (if (< delta 0) " - " " + ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3320 (number-to-string (abs delta)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3321 (sh-feature '((bash . " ))") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3322 (ksh88 . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3323 (posix . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3324 (rc . "}") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3325 (sh . "`") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3326 (zsh . " ]"))))) |
6463 | 3327 |
3328 | |
3329 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3330 (define-skeleton sh-function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3331 "Insert a function definition. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3332 (bash sh-modify ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3333 3 "() {") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3334 (ksh88 "name: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3335 "function " str " {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3336 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3337 < "}" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3338 (rc sh-modify ksh88 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3339 1 "fn ") |
6463 | 3340 (sh () |
3341 "() {" \n | |
3342 > _ \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3343 < "}" \n)) |
6463 | 3344 |
3345 | |
3346 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3347 (define-skeleton sh-if |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3348 "Insert an if statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3349 (csh "condition: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3350 "if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3351 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3352 ( "other condition, %s: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3353 < "else if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3354 > _ \n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3355 < "else" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3356 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3357 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3358 < "endif" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3359 (es "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3360 > "if { " str " } {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3361 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3362 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3363 "} { " str " } {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3364 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3365 "} {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3366 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3367 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3368 ?\} > \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3369 (rc "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3370 > "if( " str " ) {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3371 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3372 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3373 "} else if( " str " ) {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3374 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3375 "} else {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3376 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3377 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3378 ?\} > \n) |
6463 | 3379 (sh "condition: " |
12863 | 3380 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3381 > "if " str "; then" \n |
6463 | 3382 > _ \n |
3383 ( "other condition, %s: " | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3384 > "elif " str "; then" > \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3385 > \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3386 "else" > \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3387 > \n |
6463 | 3388 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3389 "fi" > \n)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3390 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3391 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3392 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3393 (define-skeleton sh-repeat |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3394 "Insert a repeat loop definition. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3395 (es nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3396 > "forever {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3397 > _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3398 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3399 (zsh "factor: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3400 > "repeat " str "; do" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3401 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3402 "done" > \n)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3403 |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3404 ;;;(put 'sh-repeat 'menu-enable '(sh-feature sh-repeat)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3405 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3406 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3407 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3408 (define-skeleton sh-select |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3409 "Insert a select statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3410 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3411 > "select " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3412 > ?$ str \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3413 "done" > \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3414 (bash sh-append ksh88)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3415 ;;;(put 'sh-select 'menu-enable '(sh-feature sh-select)) |
6463 | 3416 |
3417 | |
3418 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3419 (define-skeleton sh-tmp-file |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3420 "Insert code to setup temporary file handling. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3421 (bash sh-append ksh88) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3422 (csh (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3423 "set tmp = `mktemp -t " str ".XXXXXX`" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3424 "onintr exit" \n _ |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3425 (and (goto-char (point-max)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3426 (not (bolp)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3427 ?\n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3428 "exit:\n" |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3429 "rm $tmp* >&/dev/null" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3430 (es (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3431 > "local( signals = $signals sighup sigint;" \n |
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3432 > "tmp = `{ mktemp -t " str ".XXXXXX } ) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3433 > "catch @ e {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3434 > "rm $tmp^* >[2]/dev/null" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3435 "throw $e" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3436 "} {" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3437 _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3438 ?\} > \n |
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3439 ?\} > \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3440 (ksh88 sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3441 7 "EXIT") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3442 (rc (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3443 > "tmp = `{ mktemp -t " str ".XXXXXX }" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3444 "fn sigexit { rm $tmp^* >[2]/dev/null }" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3445 (sh (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3446 > "TMP=`mktemp -t " str ".XXXXXX`" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3447 "trap \"rm $TMP* 2>/dev/null\" " ?0 \n)) |
6463 | 3448 |
3449 | |
3450 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3451 (define-skeleton sh-until |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3452 "Insert an until loop. See `sh-feature'." |
6463 | 3453 (sh "condition: " |
12863 | 3454 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3455 > "until " str "; do" \n |
6463 | 3456 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3457 "done" > \n)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3458 ;;;(put 'sh-until 'menu-enable '(sh-feature sh-until)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3459 |
6463 | 3460 |
3461 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3462 (define-skeleton sh-while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3463 "Insert a while loop. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3464 (csh sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3465 2 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3466 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3467 5 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3468 10 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3469 11 "end") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3470 (es sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3471 3 "while { " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3472 5 " } {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3473 10 ?\} ) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3474 (rc sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3475 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3476 5 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3477 10 ?\} ) |
6463 | 3478 (sh "condition: " |
12863 | 3479 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3480 > "while " str "; do" \n |
6463 | 3481 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3482 "done" > \n)) |
6463 | 3483 |
3484 | |
3485 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3486 (define-skeleton sh-while-getopts |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3487 "Insert a while getopts loop. See `sh-feature'. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3488 Prompts for an options string which consists of letters for each recognized |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3489 option followed by a colon `:' if the option accepts an argument." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3490 (bash sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3491 18 "${0##*/}") |
12863 | 3492 (csh nil |
3493 "while( 1 )" \n | |
3494 > "switch( \"$1\" )" \n | |
3495 '(setq input '("- x" . 2)) | |
3496 > > | |
3497 ( "option, %s: " | |
3498 < "case " '(eval str) | |
3499 '(if (string-match " +" str) | |
3500 (setq v1 (substring str (match-end 0)) | |
3501 str (substring str 0 (match-beginning 0))) | |
3502 (setq v1 nil)) | |
3503 str ?: \n | |
3504 > "set " v1 & " = $2" | -4 & _ \n | |
3505 (if v1 "shift") & \n | |
3506 "breaksw" \n) | |
3507 < "case --:" \n | |
3508 > "shift" \n | |
3509 < "default:" \n | |
3510 > "break" \n | |
3511 resume: | |
3512 < < "endsw" \n | |
3513 "shift" \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3514 < "end" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3515 (ksh88 sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3516 16 "print" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3517 18 "${0##*/}" |
51515
6d06c54cda5d
Fix bug in "Options Loop" skeleton for ksh. Add newlines to a few skeletons,
Juanma Barranquero <lekktu@gmail.com>
parents:
51379
diff
changeset
|
3518 37 "OPTIND-1") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3519 (posix sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3520 18 "$(basename $0)") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3521 (sh "optstring: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3522 > "while getopts :" str " OPT; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3523 > "case $OPT in" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3524 '(setq v1 (append (vconcat str) nil)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3525 ( (prog1 (if v1 (char-to-string (car v1))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3526 (if (eq (nth 1 v1) ?:) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3527 (setq v1 (nthcdr 2 v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3528 v2 "\"$OPTARG\"") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3529 (setq v1 (cdr v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3530 v2 nil))) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3531 > str "|+" str sh-non-closing-paren \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3532 > _ v2 \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3533 > ";;" \n) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3534 > "*" sh-non-closing-paren \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3535 > "echo" " \"usage: " "`basename $0`" |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3536 " [+-" '(setq v1 (point)) str |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3537 '(save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3538 (while (search-backward ":" v1 t) |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3539 (replace-match " ARG] [+-" t t))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3540 (if (eq (preceding-char) ?-) -5) |
29844
093c79809c9e
(sh-while-getopts): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
29422
diff
changeset
|
3541 (if (and (sequencep v1) (length v1)) "] " "} ") |
28923
dcafe3c9cd6c
(sh-while-getopts) <sh>: Handle case that
Gerd Moellmann <gerd@gnu.org>
parents:
26967
diff
changeset
|
3542 "[--] ARGS...\"" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3543 "exit 2" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3544 "esac" > |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3545 \n "done" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3546 > \n |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3547 "shift " (sh-add "OPTIND" -1) \n |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3548 "OPTIND=1" \n)) |
6463 | 3549 |
3550 | |
3551 | |
3552 (defun sh-assignment (arg) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3553 "Remember preceding identifier for future completion and do self-insert." |
6463 | 3554 (interactive "p") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3555 (self-insert-command arg) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3556 (if (<= arg 1) |
6463 | 3557 (sh-remember-variable |
3558 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3559 (if (re-search-forward (sh-feature sh-assignment-regexp) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3560 (prog1 (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3561 (beginning-of-line 1)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3562 t) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
3563 (match-string 1)))))) |
6463 | 3564 |
3565 | |
3566 (defun sh-maybe-here-document (arg) | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3567 "Insert self. Without prefix, following unquoted `<' inserts here document. |
6463 | 3568 The document is bounded by `sh-here-document-word'." |
3569 (interactive "*P") | |
3570 (self-insert-command (prefix-numeric-value arg)) | |
3571 (or arg | |
3572 (not (eq (char-after (- (point) 2)) last-command-char)) | |
3573 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3574 (backward-char 2) |
6463 | 3575 (sh-quoted-p)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3576 (let ((tabs (if (string-match "\\`-" sh-here-document-word) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3577 (make-string (/ (current-indentation) tab-width) ?\t) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3578 "")) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3579 (delim (replace-regexp-in-string "['\"]" "" |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3580 sh-here-document-word))) |
6463 | 3581 (insert sh-here-document-word) |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
3582 (or (eolp) (looking-at "[ \t]") (insert ?\s)) |
6463 | 3583 (end-of-line 1) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3584 (while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3585 (sh-quoted-p) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3586 (end-of-line 2)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3587 (insert ?\n tabs) |
51265
575ad90ca254
(sh-here-document-word): Document new treatment of leading "-".
Glenn Morris <rgm@gnu.org>
parents:
49743
diff
changeset
|
3588 (save-excursion |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3589 (insert ?\n tabs (replace-regexp-in-string |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3590 "\\`-?[ \t]*" "" delim)))))) |
6463 | 3591 |
3592 | |
3593 ;; various other commands | |
3594 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3595 (autoload 'comint-dynamic-complete "comint" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3596 "Dynamically perform completion at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3597 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3598 (autoload 'shell-dynamic-complete-command "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3599 "Dynamically complete the command at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3600 |
6463 | 3601 (autoload 'comint-dynamic-complete-filename "comint" |
3602 "Dynamically complete the filename at point." t) | |
3603 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3604 (autoload 'shell-dynamic-complete-environment-variable "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3605 "Dynamically complete the environment variable at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3606 |
6463 | 3607 |
3608 | |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3609 (defun sh-newline-and-indent () |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3610 "Strip unquoted whitespace, insert newline, and indent like current line." |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3611 (interactive "*") |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3612 (indent-to (prog1 (current-indentation) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3613 (delete-region (point) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3614 (progn |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3615 (or (zerop (skip-chars-backward " \t")) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3616 (if (sh-quoted-p) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3617 (forward-char))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3618 (point))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3619 (newline)))) |
6463 | 3620 |
3621 (defun sh-beginning-of-command () | |
3622 "Move point to successive beginnings of commands." | |
3623 (interactive) | |
3624 (if (re-search-backward sh-beginning-of-command nil t) | |
3625 (goto-char (match-beginning 2)))) | |
3626 | |
3627 (defun sh-end-of-command () | |
3628 "Move point to successive ends of commands." | |
3629 (interactive) | |
3630 (if (re-search-forward sh-end-of-command nil t) | |
3631 (goto-char (match-end 1)))) | |
3632 | |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3633 ;; Backslashification. Stolen from make-mode.el. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3634 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3635 (defun sh-backslash-region (from to delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3636 "Insert, align, or delete end-of-line backslashes on the lines in the region. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3637 With no argument, inserts backslashes and aligns existing backslashes. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3638 With an argument, deletes the backslashes. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3639 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3640 This function does not modify the last line of the region if the region ends |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3641 right at the start of the following line; it does not modify blank lines |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3642 at the start of the region. So you can put the region around an entire |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3643 shell command and conveniently use this command." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3644 (interactive "r\nP") |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3645 (save-excursion |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3646 (goto-char from) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3647 (let ((column sh-backslash-column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3648 (endmark (make-marker))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3649 (move-marker endmark to) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3650 ;; Compute the smallest column number past the ends of all the lines. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3651 (if sh-backslash-align |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3652 (progn |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3653 (if (not delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3654 (while (< (point) to) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3655 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3656 (if (= (preceding-char) ?\\) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3657 (progn (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3658 (skip-chars-backward " \t"))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3659 (setq column (max column (1+ (current-column)))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3660 (forward-line 1))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3661 ;; Adjust upward to a tab column, if that doesn't push |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3662 ;; past the margin. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3663 (if (> (% column tab-width) 0) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3664 (let ((adjusted (* (/ (+ column tab-width -1) tab-width) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3665 tab-width))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3666 (if (< adjusted (window-width)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3667 (setq column adjusted)))))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3668 ;; Don't modify blank lines at start of region. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3669 (goto-char from) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3670 (while (and (< (point) endmark) (eolp)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3671 (forward-line 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3672 ;; Add or remove backslashes on all the lines. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3673 (while (and (< (point) endmark) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3674 ;; Don't backslashify the last line |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3675 ;; if the region ends right at the start of the next line. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3676 (save-excursion |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3677 (forward-line 1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3678 (< (point) endmark))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3679 (if (not delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3680 (sh-append-backslash column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3681 (sh-delete-backslash)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3682 (forward-line 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3683 (move-marker endmark nil)))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3684 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3685 (defun sh-append-backslash (column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3686 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3687 ;; Note that "\\\\" is needed to get one backslash. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3688 (if (= (preceding-char) ?\\) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3689 (progn (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3690 (delete-horizontal-space) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3691 (indent-to column (if sh-backslash-align nil 1))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3692 (indent-to column (if sh-backslash-align nil 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3693 (insert "\\"))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3694 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3695 (defun sh-delete-backslash () |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3696 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3697 (or (bolp) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3698 (progn |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3699 (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3700 (if (looking-at "\\\\") |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3701 (delete-region (1+ (point)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3702 (progn (skip-chars-backward " \t") (point))))))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3703 |
13707 | 3704 (provide 'sh-script) |
18382 | 3705 |
59622
5ec981fa30e5
(sh-here-doc-open-re): Don't allow `|' or other
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59566
diff
changeset
|
3706 ;; arch-tag: eccd8b72-f337-4fc2-ae86-18155a69d937 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3707 ;;; sh-script.el ends here |