Mercurial > emacs
annotate lisp/progmodes/sh-script.el @ 48254:0012ec6b9866
*** empty log message ***
author | Markus Rost <rost@math.uni-bielefeld.de> |
---|---|
date | Mon, 11 Nov 2002 22:06:24 +0000 |
parents | d9114ecd3312 |
children | 99f9777a831b |
rev | line source |
---|---|
6463 | 1 ;;; sh-script.el --- shell-script editing commands for Emacs |
14169 | 2 |
37296
f9dbfb08ed11
(sh-indent-line): Add optional PREFIX-ARG
Gerd Moellmann <gerd@gnu.org>
parents:
36631
diff
changeset
|
3 ;; Copyright (C) 1993, 94, 95, 96, 97, 1999, 2001 |
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 |
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
26 ;; Boston, MA 02111-1307, 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) | |
198 (require 'comint)) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
199 (require 'executable) |
6463 | 200 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
201 |
17068
d1391b21626f
(sh-mode-hook, sh-set-shell-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
16839
diff
changeset
|
202 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
203 (defgroup sh nil |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
204 "Shell programming utilities" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
205 :group 'unix |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
206 :group 'languages) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
207 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
208 (defgroup sh-script nil |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
209 "Shell script mode" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
210 :group 'sh |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
211 :prefix "sh-") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
212 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
213 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
214 (defcustom sh-ancestor-alist |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
215 '((ash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
216 (bash . jsh) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
217 (bash2 . jsh) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
218 (dtksh . ksh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
219 (es . rc) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
220 (itcsh . tcsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
221 (jcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
222 (jsh . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
223 (ksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
224 (ksh88 . jsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
225 (oash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
226 (pdksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
227 (posix . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
228 (tcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
229 (wksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
230 (wsh . sh) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
231 (zsh . ksh88) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
232 (rpm . sh)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
233 "*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
|
234 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
|
235 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
|
236 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
237 csh C Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
238 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
|
239 tcsh Turbo C Shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
240 itcsh ? Turbo C Shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
241 rc Plan 9 Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
242 es Extensible Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
243 sh Bourne Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
244 ash ? Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
245 jsh Bourne Shell with Job Control |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
246 bash GNU Bourne Again Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
247 ksh88 Korn Shell '88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
248 ksh Korn Shell '93 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
249 dtksh CDE Desktop Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
250 pdksh Public Domain Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
251 wksh Window Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
252 zsh Z Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
253 oash SCO OA (curses) Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
254 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
|
255 wsh ? Shell" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
256 :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
|
257 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
258 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
259 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
260 (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
|
261 (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
|
262 '((csh . tcsh) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
263 (ksh . pdksh))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
264 ;; for the time being |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
265 '((ksh . ksh88) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
266 (bash2 . bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
267 (sh5 . sh))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
268 "*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
|
269 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
|
270 shell it really is." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
271 :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
|
272 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
273 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
274 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
275 (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
|
276 (or |
16839
daaa2c5bb40a
(sh-shell-file): Downcase and remove extension on shells in NT.
Richard M. Stallman <rms@gnu.org>
parents:
16810
diff
changeset
|
277 ;; 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
|
278 ;; 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
|
279 ;; 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
|
280 (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
|
281 (let* ((shell (getenv "SHELL")) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
282 (shell-base |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
283 (and shell (file-name-nondirectory shell)))) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
284 ;; 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
|
285 ;; so use the default instead. |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
286 (if (or (null shell) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
287 (member (downcase shell-base) |
21980
e73c0672d7b3
(sh-shell-file): Add cmdproxy to MS shells.
Richard M. Stallman <rms@gnu.org>
parents:
21925
diff
changeset
|
288 '("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
|
289 "cmdproxy.exe"))) |
21925
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
290 "/bin/sh" |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
291 (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
|
292 (getenv "SHELL") |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
293 "/bin/sh") |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
294 "*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
|
295 :type 'string |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
296 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
297 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
298 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
299 (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
|
300 ;; 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
|
301 '((bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
302 (csh . "-f") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
303 (pdksh) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
304 ;; 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
|
305 (ksh88) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
306 ;; -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
|
307 (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
|
308 ;; 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
|
309 ;; 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
|
310 (wksh) |
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
311 ;; -f means don't run .zshrc. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
312 (zsh . "-f")) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
313 "*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
|
314 :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
|
315 (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
|
316 (string :tag "Arguments") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
317 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
318 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
319 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
320 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
321 |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
322 (defcustom sh-imenu-generic-expression |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
323 `((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
324 . ((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
|
325 "*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
|
326 See `sh-feature' and `imenu-generic-expression'." |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
327 :type '(alist :key-type (symbol :tag "Shell") |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
328 :value-type (alist :key-type (choice :tag "Title" |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
329 string |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
330 (const :tag "None" nil)) |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
331 :value-type |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
332 (repeat :tag "Regexp, index..." sexp))) |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
20900
diff
changeset
|
333 :group 'sh-script |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
334 :version "20.4") |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
335 |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
336 (defvar sh-shell-variables nil |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
337 "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
|
338 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
|
339 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
|
340 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
|
341 |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
342 (defvar sh-shell-variables-initialized nil |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
343 "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
|
344 |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
345 (defun sh-canonicalize-shell (shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
346 "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
|
347 (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
|
348 (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
|
349 (or (symbolp shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
350 (setq shell (intern shell))) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
351 (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
|
352 shell)) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
353 |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
354 (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
|
355 "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
|
356 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
357 ;; 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
|
358 ;; 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
|
359 ;;(defvar sh-abbrevs |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
360 ;; '((csh eval sh-abbrevs shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
361 ;; "switch" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
362 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
363 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
364 ;; (es eval sh-abbrevs shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
365 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
366 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
367 ;; (ksh88 eval sh-abbrevs sh |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
368 ;; "select" 'sh-select) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
369 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
370 ;; (rc eval sh-abbrevs shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
371 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
372 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
373 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
374 ;; (sh eval sh-abbrevs shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
375 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
376 ;; "function" 'sh-function |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
377 ;; "until" 'sh-until |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
378 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
379 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
380 ;; ;; 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
|
381 ;; (shell "for" sh-for |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
382 ;; "loop" sh-indexed-loop |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
383 ;; "if" sh-if |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
384 ;; "tmpfile" sh-tmp-file |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
385 ;; "while" sh-while) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
386 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
387 ;; (zsh eval sh-abbrevs ksh88 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
388 ;; "repeat" 'sh-repeat)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
389 ;; "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
|
390 ;;;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
|
391 ;;;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
|
392 |
6463 | 393 |
394 | |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
395 (defvar sh-mode-syntax-table |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
396 '((sh eval sh-mode-syntax-table () |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
397 ?\# "<" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
398 ?\n ">#" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
399 ?\" "\"\"" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
400 ?\' "\"'" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
401 ?\` "\"`" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
402 ?! "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
403 ?% "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
404 ?: "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
405 ?. "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
406 ?^ "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
407 ?~ "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
408 ?< "." |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
409 ?> ".") |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
410 (csh eval identity sh) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
411 (rc eval identity sh)) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
412 |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
413 "Syntax-table used in Shell-Script mode. See `sh-feature'.") |
6463 | 414 |
415 (defvar sh-mode-map | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
416 (let ((map (make-sparse-keymap)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
417 (menu-map (make-sparse-keymap "Insert"))) |
6463 | 418 (define-key map "\C-c(" 'sh-function) |
419 (define-key map "\C-c\C-w" 'sh-while) | |
420 (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
|
421 (define-key map "\C-c\C-t" 'sh-tmp-file) |
6463 | 422 (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
|
423 (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
|
424 (define-key map "\C-c\C-o" 'sh-while-getopts) |
6463 | 425 (define-key map "\C-c\C-l" 'sh-indexed-loop) |
426 (define-key map "\C-c\C-i" 'sh-if) | |
427 (define-key map "\C-c\C-f" 'sh-for) | |
428 (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
|
429 (define-key map "\C-c?" 'sh-show-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
430 (define-key map "\C-c=" 'sh-set-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
431 (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
|
432 (define-key map "\C-c>" 'sh-learn-buffer-indent) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
433 |
6463 | 434 (define-key map "=" 'sh-assignment) |
435 (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
|
436 (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
|
437 (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
|
438 (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
|
439 (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
|
440 (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
|
441 (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
|
442 (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
|
443 (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
|
444 (define-key map "\"" 'skeleton-pair-insert-maybe) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
445 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
446 (substitute-key-definition 'complete-tag 'comint-dynamic-complete |
6463 | 447 map (current-global-map)) |
448 (substitute-key-definition 'newline-and-indent 'sh-newline-and-indent | |
449 map (current-global-map)) | |
450 (substitute-key-definition 'delete-backward-char | |
451 'backward-delete-char-untabify | |
452 map (current-global-map)) | |
453 (define-key map "\C-c:" 'sh-set-shell) | |
454 (substitute-key-definition 'beginning-of-defun | |
455 'sh-beginning-of-compound-command | |
456 map (current-global-map)) | |
457 (substitute-key-definition 'backward-sentence 'sh-beginning-of-command | |
458 map (current-global-map)) | |
459 (substitute-key-definition 'forward-sentence 'sh-end-of-command | |
460 map (current-global-map)) | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
461 (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
|
462 (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
|
463 (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
|
464 (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
|
465 (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
|
466 (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
|
467 (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
|
468 (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
|
469 (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
|
470 (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
|
471 (define-key menu-map [sh-case] '("Case Statement" . sh-case)) |
6463 | 472 map) |
473 "Keymap used in Shell-Script mode.") | |
474 | |
475 | |
476 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
477 (defcustom sh-dynamic-complete-functions |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
478 '(shell-dynamic-complete-environment-variable |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
479 shell-dynamic-complete-command |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
480 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
|
481 "*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
|
482 :type '(repeat function) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
483 :group 'sh-script) |
6463 | 484 |
485 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
486 (defcustom sh-require-final-newline |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
487 '((csh . t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
488 (pdksh . t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
489 (rc eval . require-final-newline) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
490 (sh eval . require-final-newline)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
491 "*Value of `require-final-newline' in Shell-Script mode buffers. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
492 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
493 :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
|
494 (choice (const :tag "require" t) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
495 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
496 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
497 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
498 :group 'sh-script) |
6463 | 499 |
500 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
501 (defcustom sh-assignment-regexp |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
502 '((csh . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
503 ;; actually spaces are only supported in let/(( ... )) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
504 (ksh88 . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
505 (rc . "\\<\\([a-zA-Z0-9_*]+\\)[ \t]*=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
506 (sh . "\\<\\([a-zA-Z0-9_]+\\)=")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
507 "*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
|
508 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
|
509 sign. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
510 :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
|
511 (choice regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
512 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
513 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
514 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
515 :group 'sh-script) |
6463 | 516 |
517 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
518 (defcustom sh-indentation 4 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
519 "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
|
520 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
521 :group 'sh-script) |
6463 | 522 |
523 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
524 (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
|
525 "*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
|
526 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
527 :group 'sh-script) |
6463 | 528 |
529 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
530 (defvar sh-header-marker nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
531 "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
|
532 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
|
533 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
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-beginning-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
536 "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~a-zA-Z0-9:]\\)" |
6463 | 537 "*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
|
538 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
|
539 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
540 :group 'sh-script) |
6463 | 541 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
542 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
543 (defcustom sh-end-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
544 "\\([/~a-zA-Z0-9:]\\)[ \t]*\\([;#)}`|&]\\|$\\)" |
6463 | 545 "*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
|
546 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
|
547 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
548 :group 'sh-script) |
6463 | 549 |
550 | |
551 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
552 (defvar sh-here-document-word "EOF" |
6463 | 553 "Word to delimit here documents.") |
554 | |
12863 | 555 (defvar sh-test |
556 '((sh "[ ]" . 3) | |
557 (ksh88 "[[ ]]" . 4)) | |
558 "Initial input in Bourne if, while and until skeletons. See `sh-feature'.") | |
559 | |
6463 | 560 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
561 ;; 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
|
562 ;; 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
|
563 (defcustom sh-builtins |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
564 '((bash eval sh-append posix |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
565 "alias" "bg" "bind" "builtin" "declare" "dirs" "enable" "fc" "fg" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
566 "help" "history" "jobs" "kill" "let" "local" "popd" "pushd" "source" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
567 "suspend" "typeset" "unalias") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
568 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
569 ;; 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
|
570 (bourne eval sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
571 "eval" "export" "getopts" "newgrp" "pwd" "read" "readonly" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
572 "times" "ulimit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
573 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
574 (csh eval sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
575 "alias" "chdir" "glob" "history" "limit" "nice" "nohup" "rehash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
576 "setenv" "source" "time" "unalias" "unhash") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
577 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
578 (dtksh eval identity wksh) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
579 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
580 (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
|
581 "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
|
582 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
583 (jsh eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
584 "bg" "fg" "jobs" "kill" "stop" "suspend") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
585 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
586 (jcsh eval sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
587 "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
|
588 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
589 (ksh88 eval sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
590 "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
|
591 "typeset" "unalias" "whence") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
592 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
593 (oash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
594 "checkwin" "dateline" "error" "form" "menu" "newwin" "oadeinit" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
595 "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
|
596 "wclear" "werase" "win" "wmclose" "wmmessage" "wmopen" "wmove" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
597 "wmtitle" "wrefresh") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
598 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
599 (pdksh eval sh-append ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
600 "bind") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
601 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
602 (posix eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
603 "command") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
604 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
605 (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
|
606 "whatis") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
607 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
608 (sh eval sh-append bourne |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
609 "hash" "test" "type") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
610 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
611 ;; 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
|
612 (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
|
613 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
614 (wksh eval sh-append ksh88 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
615 "Xt[A-Z][A-Za-z]*") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
616 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
617 (zsh eval sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
618 "autoload" "bindkey" "builtin" "chdir" "compctl" "declare" "dirs" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
619 "disable" "disown" "echotc" "enable" "functions" "getln" "hash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
620 "history" "integer" "limit" "local" "log" "popd" "pushd" "r" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
621 "readonly" "rehash" "sched" "setopt" "source" "suspend" "true" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
622 "ttyctl" "type" "unfunction" "unhash" "unlimit" "unsetopt" "vared" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
623 "which")) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
624 "*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
|
625 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
|
626 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
|
627 :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
|
628 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
629 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
630 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
631 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
632 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
633 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
634 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
635 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
636 (defcustom sh-leading-keywords |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
637 '((csh "else") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
638 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
639 (es "true" "unwind-protect" "whatis") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
640 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
641 (rc "else") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
642 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
643 (sh "do" "elif" "else" "if" "then" "trap" "type" "until" "while")) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
644 "*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
|
645 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
|
646 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
|
647 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
|
648 :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
|
649 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
650 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
651 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
652 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
653 :group 'sh-script) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
654 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
655 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
656 (defcustom sh-other-keywords |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
657 '((bash eval sh-append bourne |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
658 "bye" "logout") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
659 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
660 ;; The next entry is only used for defining the others |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
661 (bourne eval sh-append sh |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
662 "function") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
663 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
664 (csh eval sh-append shell |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
665 "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
666 "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
|
667 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
668 (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
|
669 "return" "throw" "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
670 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
671 (ksh88 eval sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
672 "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
673 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
674 (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
|
675 "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
676 |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
677 (sh eval sh-append shell |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
678 "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
|
679 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
680 ;; 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
|
681 (shell "break" "case" "continue" "exec" "exit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
682 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
683 (zsh eval sh-append bash |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
684 "select")) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
685 "*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
|
686 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
687 :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
|
688 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
689 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
690 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
691 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
692 :group 'sh-script) |
6463 | 693 |
694 | |
695 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
696 (defvar sh-variables |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
697 '((bash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
698 "allow_null_glob_expansion" "auto_resume" "BASH" "BASH_VERSION" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
699 "cdable_vars" "ENV" "EUID" "FCEDIT" "FIGNORE" "glob_dot_filenames" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
700 "histchars" "HISTFILE" "HISTFILESIZE" "history_control" "HISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
701 "hostname_completion_file" "HOSTTYPE" "IGNOREEOF" "ignoreeof" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
702 "LINENO" "MAIL_WARNING" "noclobber" "nolinks" "notify" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
703 "no_exit_on_failed_exec" "NO_PROMPT_VARS" "OLDPWD" "OPTERR" "PPID" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
704 "PROMPT_COMMAND" "PS4" "pushd_silent" "PWD" "RANDOM" "REPLY" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
705 "SECONDS" "SHLVL" "TMOUT" "UID") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
706 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
707 (csh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
708 "argv" "cdpath" "child" "echo" "histchars" "history" "home" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
709 "ignoreeof" "mail" "noclobber" "noglob" "nonomatch" "path" "prompt" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
710 "shell" "status" "time" "verbose") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
711 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
712 (es eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
713 "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
|
714 "pid" "prompt" "signals") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
715 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
716 (jcsh eval sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
717 "notify") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
718 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
719 (ksh88 eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
720 "ENV" "ERRNO" "FCEDIT" "FPATH" "HISTFILE" "HISTSIZE" "LINENO" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
721 "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
|
722 "TMOUT") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
723 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
724 (oash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
725 "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
|
726 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
727 (rc eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
728 "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
|
729 "prompt" "status") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
730 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
731 (sh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
732 "CDPATH" "IFS" "OPTARG" "OPTIND" "PS1" "PS2") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
733 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
734 ;; 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
|
735 (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
|
736 "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
|
737 "LINES" "LOGNAME" "MAIL" "MAILCHECK" "MAILPATH" "PAGER" "PATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
738 "SHELL" "TERM" "TERMCAP" "TERMINFO" "VISUAL") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
739 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
740 (tcsh eval sh-append csh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
741 "addsuffix" "ampm" "autocorrect" "autoexpand" "autolist" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
742 "autologout" "chase_symlinks" "correct" "dextract" "edit" "el" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
743 "fignore" "gid" "histlit" "HOST" "HOSTTYPE" "HPATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
744 "ignore_symlinks" "listjobs" "listlinks" "listmax" "matchbeep" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
745 "nobeep" "NOREBIND" "oid" "printexitvalue" "prompt2" "prompt3" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
746 "pushdsilent" "pushdtohome" "recexact" "recognize_only_executables" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
747 "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
|
748 "tperiod" "tty" "uid" "version" "visiblebell" "watch" "who" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
749 "wordchars") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
750 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
751 (zsh eval sh-append ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
752 "BAUD" "bindcmds" "cdpath" "DIRSTACKSIZE" "fignore" "FIGNORE" "fpath" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
753 "HISTCHARS" "hostcmds" "hosts" "HOSTS" "LISTMAX" "LITHISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
754 "LOGCHECK" "mailpath" "manpath" "NULLCMD" "optcmds" "path" "POSTEDIT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
755 "prompt" "PROMPT" "PROMPT2" "PROMPT3" "PROMPT4" "psvar" "PSVAR" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
756 "READNULLCMD" "REPORTTIME" "RPROMPT" "RPS1" "SAVEHIST" "SPROMPT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
757 "STTY" "TIMEFMT" "TMOUT" "TMPPREFIX" "varcmds" "watch" "WATCH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
758 "WATCHFMT" "WORDCHARS" "ZDOTDIR")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
759 "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
|
760 See `sh-feature'.") |
6463 | 761 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
762 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
763 ;; Font-Lock support |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
764 |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
765 (defface sh-heredoc-face |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
766 '((((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
767 (background dark)) |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
768 (:foreground "yellow" :weight bold)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
769 (((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
770 (background light)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
771 (:foreground "tan" )) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
772 (t |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
773 (:weight bold))) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
774 "Face to show a here-document" |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
775 :group 'sh-indentation) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
776 (defvar sh-heredoc-face 'sh-heredoc-face) |
6463 | 777 |
778 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
779 (defvar sh-font-lock-keywords |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
780 '((csh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
781 '("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1 |
12863 | 782 font-lock-variable-name-face)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
783 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
784 (es eval sh-append executable-font-lock-keywords |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
785 '("\\$#?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\)" 1 |
12863 | 786 font-lock-variable-name-face)) |
6463 | 787 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
788 (rc eval identity es) |
6463 | 789 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
790 (sh eval 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
|
791 ;; Variable names. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
792 '("\\$\\({#?\\)?\\([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
|
793 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
|
794 ;; Function names. |
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
795 '("^\\(\\sw+\\)[ \t]*(" 1 font-lock-function-name-face) |
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
796 '("\\<\\(function\\)\\>[ \t]*\\(\\sw+\\)?" |
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
797 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))) |
6463 | 798 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
799 ;; 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
|
800 (shell eval sh-append executable-font-lock-keywords |
14849
e36c046e28b1
(sh-font-lock-keywords): Highlight \ only with non-alphanumeric char.
Richard M. Stallman <rms@gnu.org>
parents:
14418
diff
changeset
|
801 '("\\\\[^A-Za-z0-9]" 0 font-lock-string-face) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
802 '("\\${?\\([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
|
803 font-lock-variable-name-face)) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
804 (rpm eval sh-append rpm2 |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
805 '("%{?\\(\\sw+\\)" 1 font-lock-keyword-face)) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
806 (rpm2 eval sh-append shell |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
807 '("^\\(\\sw+\\):" 1 font-lock-variable-name-face))) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
808 "Default expressions to highlight in Shell Script modes. See `sh-feature'.") |
6463 | 809 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
810 (defvar sh-font-lock-keywords-1 |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
811 '((sh "[ \t]in\\>")) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
812 "Subdued level highlighting for Shell Script modes.") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
813 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
814 (defvar sh-font-lock-keywords-2 () |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
815 "Gaudy level highlighting for Shell Script modes.") |
6463 | 816 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
817 ;; 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
|
818 ;; 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
|
819 (defconst sh-st-punc (string-to-syntax ".")) |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
820 (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
|
821 (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
|
822 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
823 (defconst sh-here-doc-open-re "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|\\s_\\)+\\).*\\(\n\\)") |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
824 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
825 (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
|
826 (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
|
827 (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
|
828 (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
|
829 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
830 (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
|
831 "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
|
832 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
|
833 (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
|
834 ;; 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
|
835 (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
836 ;; Use \s| to cheaply check it's an open-heredoc. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
837 eof-re "['\"]?\\([ \t|;&)<>].*\\)?\\s|")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
838 ;; 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
|
839 (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
|
840 (start (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
841 (goto-char bol) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
842 (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
|
843 ;; 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
|
844 ;; 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
|
845 (cond |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
846 ((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
|
847 (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
|
848 (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
|
849 ;; 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
|
850 (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
851 (goto-char start) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
852 (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
|
853 (while |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
854 (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
855 (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
|
856 (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
|
857 (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
|
858 (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
|
859 ;; 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
|
860 (= (point) start))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
861 sh-here-doc-syntax) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
862 ((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
|
863 ;; 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
|
864 ;; 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
|
865 (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
|
866 (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
|
867 (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
|
868 (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
|
869 nil)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
870 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
871 (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
|
872 "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
|
873 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
|
874 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
|
875 INDENTED is non-nil if the here document's content (and the EOF mark) can |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
876 be indented (i.e. a <<- was used rather than just <<)." |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
877 (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
|
878 (sh-in-comment-or-string start)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
879 ;; 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
|
880 ;; 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
|
881 (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
|
882 (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
|
883 (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
|
884 (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
|
885 (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
|
886 (regexp-opt sh-here-doc-markers t) "\\(\n\\)")))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
887 sh-here-doc-syntax)) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
888 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
889 (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
|
890 "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
|
891 ;; 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
|
892 (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
|
893 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
894 (defun sh-font-lock-paren (start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
895 (save-excursion |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
896 (goto-char start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
897 ;; Skip through all patterns |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
898 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
899 (progn |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
900 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
901 ;; Skip through one pattern |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
902 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
903 (or (/= 0 (skip-syntax-backward "w_")) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
904 (/= 0 (skip-chars-backward "?*/")) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
905 (when (memq (char-before) '(?\" ?\')) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
906 (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
|
907 (error nil))))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
908 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
909 (when (eq (char-before) ?|) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
910 (backward-char 1) t))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
911 (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
|
912 sh-st-punc))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
913 |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
914 (defconst sh-font-lock-syntactic-keywords |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
915 ;; 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
|
916 ;; 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
|
917 ;; 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
|
918 ;; 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
|
919 `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
920 ;; 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
|
921 (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
|
922 (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
|
923 (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
|
924 (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
|
925 (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
|
926 (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
|
927 nil t)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
928 ;; Distinguish the special close-paren in `case'. |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
929 (")" 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
|
930 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
931 (defun sh-font-lock-syntactic-face-function (state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
932 (if (nth 3 state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
933 (if (char-valid-p (nth 3 state)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
934 font-lock-string-face |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
935 sh-heredoc-face) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
936 font-lock-comment-face)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
937 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
938 (defgroup sh-indentation nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
939 "Variables controlling indentation in shell scripts. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
940 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
941 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
|
942 `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
|
943 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
|
944 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
|
945 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
946 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
947 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
948 (defcustom sh-set-shell-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
949 "*Hook run by `sh-set-shell'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
950 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
951 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
952 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
953 (defcustom sh-mode-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
954 "*Hook run by `sh-mode'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
955 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
956 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
957 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
958 (defcustom sh-learn-basic-offset nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
959 "*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
|
960 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
961 nil mean: never. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
962 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
|
963 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
|
964 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
965 (const :tag "Never" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
966 (const :tag "Only if sure" t) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
967 (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
|
968 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
969 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
970 (defcustom sh-popup-occur-buffer nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
971 "*Controls when `sh-learn-buffer-indent' pops the *indent* buffer. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
972 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
|
973 are conflicts." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
974 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
975 (const :tag "Only when there are conflicts." nil) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
976 (const :tag "Always" t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
977 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
978 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
979 (defcustom sh-blink t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
980 "*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
|
981 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
|
982 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
|
983 always the case." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
984 :type 'boolean |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
985 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
986 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
987 (defcustom sh-first-lines-indent 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
988 "*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
|
989 Usually 0 meaning first column. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
990 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
|
991 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
992 (const :tag "Leave as is" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
993 (integer :tag "Column number" |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
994 :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
|
995 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
996 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
997 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
998 (defcustom sh-basic-offset 4 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
999 "*The default indentation increment. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1000 This value is used for the + and - symbols in an indentation variable." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1001 :type 'integer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1002 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1003 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1004 (defcustom sh-indent-comment nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1005 "*How a comment line is to be indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1006 nil means leave it as it is; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1007 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
|
1008 non-comment line; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1009 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
|
1010 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1011 (const :tag "Leave as is." nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1012 (const :tag "Indent as a normal line." t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1013 (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
|
1014 :tag "Indent to column number.") ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1015 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1016 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1017 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1018 (defvar sh-debug nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1019 "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
|
1020 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1021 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1022 ;; 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
|
1023 ;; (defun sh-debug (&rest args) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1024 ;; "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
|
1025 ;; (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1026 ;; (apply 'message args))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1027 (defmacro sh-debug (&rest args)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1028 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1029 (defconst sh-symbol-list |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1030 '((const :tag "+ " :value + |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1031 :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
|
1032 (const :tag "- " :value - |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1033 :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
|
1034 (const :tag "++" :value ++ |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1035 :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
|
1036 (const :tag "--" :value -- |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1037 :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
|
1038 (const :tag "* " :value * |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1039 :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
|
1040 (const :tag "/ " :value / |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1041 :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
|
1042 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1043 (defcustom sh-indent-for-else 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1044 "*How much to indent an else relative to an if. Usually 0." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1045 :type `(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1046 (integer :menu-tag "A number (positive=>indent right)" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1047 :tag "A number") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1048 (const :tag "--") ;; separator! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1049 ,@ sh-symbol-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1050 ) |
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 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1053 (defconst sh-number-or-symbol-list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1054 (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
|
1055 :tag "A number") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1056 (const :tag "--")) ; separator |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1057 sh-symbol-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1058 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1059 (defcustom sh-indent-for-fi 0 |
47264
05606bafb8f5
(sh-indent-for-fi, sh-indent-for-done): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents:
45900
diff
changeset
|
1060 "*How much to indent a fi relative to an if. Usually 0." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1061 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1062 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1063 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1064 (defcustom sh-indent-for-done '0 |
47264
05606bafb8f5
(sh-indent-for-fi, sh-indent-for-done): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents:
45900
diff
changeset
|
1065 "*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
|
1066 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1067 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1068 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1069 (defcustom sh-indent-after-else '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1070 "*How much to indent a statement after an else statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1071 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1072 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1073 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1074 (defcustom sh-indent-after-if '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1075 "*How much to indent a statement after an if statement. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1076 This includes lines after else and elif statements, too, but |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1077 does not affect then else elif or fi statements themselves." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1078 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1079 :group 'sh-indentation) |
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-indent-for-then '+ |
47931
177c45c2e130
(sh-indent-for-then): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
47732
diff
changeset
|
1082 "*How much to indent a then relative to an if." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1083 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1084 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1085 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1086 (defcustom sh-indent-for-do '* |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1087 "*How much to indent a do statement. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1088 This is relative to the statement before the do, i.e. the |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1089 while until or for statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1090 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1091 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1092 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1093 (defcustom sh-indent-after-do '* |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1094 "*How much to indent a line after a do statement. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1095 This is used when the do is the first word of the line. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1096 This is relative to the statement before the do, e.g. a |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1097 while for repeat or select statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1098 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1099 :group 'sh-indentation) |
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 (defcustom sh-indent-after-loop-construct '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1102 "*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
|
1103 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1104 This variable is used when the keyword \"do\" is on the same line as the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1105 loop statement (e.g. \"until\", \"while\" or \"for\"). |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1106 If the do is on a line by itself, then `sh-indent-after-do' is used instead." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1107 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1108 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1109 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1110 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1111 (defcustom sh-indent-after-done 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1112 "*How much to indent a statement after a \"done\" keyword. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1113 Normally this is 0, which aligns the \"done\" to the matching |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1114 looping construct line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1115 Setting it non-zero allows you to have the \"do\" statement on a line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1116 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
|
1117 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1118 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1119 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1120 (defcustom sh-indent-for-case-label '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1121 "*How much to indent a case label statement. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1122 This is relative to the line containing the case statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1123 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1124 :group 'sh-indentation) |
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-case-alt '++ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1127 "*How much to indent statements after the case label. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1128 This is relative to the line containing the case statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1129 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1130 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1131 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1132 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1133 (defcustom sh-indent-for-continuation '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1134 "*How much to indent for a continuation statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1135 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1136 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1137 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1138 (defcustom sh-indent-after-open '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1139 "*How much to indent after a line with an opening parenthesis or brace. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1140 For an open paren after a function `sh-indent-after-function' is used." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1141 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1142 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1143 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1144 (defcustom sh-indent-after-function '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1145 "*How much to indent after a function line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1146 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1147 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1148 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1149 ;; These 2 are for the rc shell: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1150 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1151 (defcustom sh-indent-after-switch '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1152 "*How much to indent a case statement relative to the switch statement. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1153 This is for the rc shell." |
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-case '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1158 "*How much to indent a statement relative to the case statement. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1159 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1160 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1161 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1162 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1163 ;; 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
|
1164 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1165 (defun sh-mkword-regexpr (word) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1166 "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
|
1167 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
|
1168 punctuation characters like '-'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1169 (concat word "\\([^-a-z0-9_]\\|$\\)")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1170 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1171 (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
|
1172 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1173 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1174 (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
|
1175 '((sh . ( "while" "until" "for" ) ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1176 (bash . ( "while" "until" "for" "select" ) ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1177 (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
|
1178 (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
|
1179 "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
|
1180 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1181 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1182 (defconst sh-indent-supported |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1183 '((sh . t) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1184 (csh . nil) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1185 (rc . t)) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1186 "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
|
1187 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1188 (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
|
1189 "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
|
1190 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1191 (defconst sh-var-list |
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 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
|
1194 sh-indent-after-do sh-indent-after-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1195 sh-indent-after-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1196 sh-indent-after-if |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1197 sh-indent-after-loop-construct |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1198 sh-indent-after-open |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1199 sh-indent-comment |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1200 sh-indent-for-case-alt |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1201 sh-indent-for-case-label |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1202 sh-indent-for-continuation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1203 sh-indent-for-do |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1204 sh-indent-for-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1205 sh-indent-for-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1206 sh-indent-for-fi |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1207 sh-indent-for-then |
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 "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
|
1210 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
|
1211 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
|
1212 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1213 (defvar sh-make-vars-local t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1214 "*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
|
1215 If non-nil, indentation variables are made local initially. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1216 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
|
1217 command `sh-make-vars-local'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1218 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
|
1219 frequently editing existing scripts with different styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1220 |
6463 | 1221 |
1222 ;; mode-command and utility functions | |
1223 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1224 ;;;###autoload |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1225 (put 'sh-mode 'mode-class 'special) |
14221
cd28284abca4
(sh-mode): Add autoload cookie.
Erik Naggum <erik@naggum.no>
parents:
14211
diff
changeset
|
1226 |
cd28284abca4
(sh-mode): Add autoload cookie.
Erik Naggum <erik@naggum.no>
parents:
14211
diff
changeset
|
1227 ;;;###autoload |
41348
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1228 (defun sh-mode () |
6463 | 1229 "Major mode for editing shell scripts. |
1230 This mode works for many shells, since they all have roughly the same syntax, | |
1231 as far as commands, arguments, variables, pipes, comments etc. are concerned. | |
1232 Unless the file's magic number indicates the shell, your usual shell is | |
1233 assumed. Since filenames rarely give a clue, they are not further analyzed. | |
1234 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1235 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
|
1236 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
|
1237 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
|
1238 shell-specific features. |
6463 | 1239 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1240 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
|
1241 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
|
1242 following commands are available, based on the current shell's syntax: |
6463 | 1243 |
1244 \\[sh-case] case statement | |
1245 \\[sh-for] for loop | |
1246 \\[sh-function] function definition | |
1247 \\[sh-if] if statement | |
1248 \\[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
|
1249 \\[sh-while-getopts] while getopts loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1250 \\[sh-repeat] repeat loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1251 \\[sh-select] select loop |
6463 | 1252 \\[sh-until] until loop |
1253 \\[sh-while] while loop | |
1254 | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1255 For sh and rc shells indentation commands are: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1256 \\[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
|
1257 \\[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
|
1258 \\[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
|
1259 would indent to the way it currently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1260 \\[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
|
1261 buffer indents as it currently is indented. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1262 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1263 |
6463 | 1264 \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. |
1265 \\[sh-newline-and-indent] Delete unquoted space and indent new line same as this one. | |
1266 \\[sh-end-of-command] Go to end of successive commands. | |
1267 \\[sh-beginning-of-command] Go to beginning of successive commands. | |
1268 \\[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
|
1269 \\[sh-execute-region] Have optional header and region be executed in a subshell. |
6463 | 1270 |
1271 \\[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
|
1272 \{, (, [, ', \", ` |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1273 Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1274 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1275 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
|
1276 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
|
1277 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
|
1278 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1279 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
|
1280 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
|
1281 (interactive) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1282 (kill-all-local-variables) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1283 (setq major-mode 'sh-mode |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1284 mode-name "Shell-script") |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1285 (use-local-map sh-mode-map) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1286 (make-local-variable 'skeleton-end-hook) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1287 (make-local-variable 'paragraph-start) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1288 (make-local-variable 'paragraph-separate) |
6463 | 1289 (make-local-variable 'comment-start) |
1290 (make-local-variable 'comment-start-skip) | |
1291 (make-local-variable 'require-final-newline) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1292 (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
|
1293 (make-local-variable 'sh-shell-file) |
6463 | 1294 (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
|
1295 (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
|
1296 (make-local-variable 'skeleton-pair-filter) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1297 (make-local-variable 'comint-dynamic-complete-functions) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1298 (make-local-variable 'comint-prompt-regexp) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1299 (make-local-variable 'font-lock-defaults) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1300 (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
|
1301 (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
|
1302 (make-local-variable 'sh-shell-variables) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1303 (make-local-variable 'sh-shell-variables-initialized) |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1304 (make-local-variable 'imenu-generic-expression) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1305 (make-local-variable 'sh-indent-supported-here) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1306 (setq skeleton-end-hook (lambda () |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1307 (or (eolp) (newline) (indent-relative))) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
1308 paragraph-start (concat page-delimiter "\\|$") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1309 paragraph-separate paragraph-start |
6463 | 1310 comment-start "# " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1311 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
|
1312 ;; 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
|
1313 comint-prompt-regexp "^[ \t]*" |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1314 font-lock-defaults |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1315 `((sh-font-lock-keywords |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1316 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
|
1317 nil nil |
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1318 ((?/ . "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
|
1319 (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
|
1320 (font-lock-syntactic-face-function |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1321 . 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
|
1322 skeleton-pair-alist '((?` _ ?`)) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1323 skeleton-pair-filter 'sh-quoted-p |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1324 skeleton-further-elements '((< '(- (min sh-indentation |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1325 (current-column))))) |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
1326 skeleton-filter 'sh-feature |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1327 skeleton-newline-indent-rigidly t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1328 sh-indent-supported-here nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1329 (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
|
1330 ;; 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
|
1331 ;; on the shell thus determined. |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1332 (let ((interpreter |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1333 (save-excursion |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1334 (goto-char (point-min)) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
1335 (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
|
1336 (match-string 2)) |
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1337 ((and buffer-file-name |
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1338 (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
|
1339 "rpm"))))) |
42075
a39583392219
(sh-mode): Run sh-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents:
41349
diff
changeset
|
1340 (sh-set-shell (or interpreter sh-shell-file) nil nil)) |
a39583392219
(sh-mode): Run sh-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents:
41349
diff
changeset
|
1341 (run-hooks 'sh-mode-hook)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1342 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1343 ;;;###autoload |
6463 | 1344 (defalias 'shell-script-mode 'sh-mode) |
1345 | |
1346 | |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1347 (defun sh-font-lock-keywords (&optional keywords) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1348 "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
|
1349 This adds rules for comments and assignments." |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1350 (sh-feature sh-font-lock-keywords |
23511
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1351 (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
|
1352 (lambda (list) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1353 `((,(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
|
1354 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
|
1355 ,@keywords |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1356 ,@list))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1357 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1358 (defun sh-font-lock-keywords-1 (&optional builtins) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1359 "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
|
1360 (let ((keywords (concat "\\([;(){}`|&]\\|^\\)[ \t]*\\(\\(" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1361 (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
|
1362 "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1363 (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
|
1364 (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
|
1365 t)))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1366 (sh-font-lock-keywords |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1367 `(,@(if builtins |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1368 `((,(concat keywords "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1369 (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
|
1370 "\\>") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1371 (2 font-lock-keyword-face nil t) |
16478 | 1372 (6 font-lock-builtin-face)) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1373 ,@(sh-feature sh-font-lock-keywords-2))) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1374 (,(concat keywords "\\)\\>") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1375 2 font-lock-keyword-face) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1376 ,@(sh-feature sh-font-lock-keywords-1))))) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1377 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1378 (defun sh-font-lock-keywords-2 () |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1379 "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
|
1380 (sh-font-lock-keywords-1 t)) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1381 |
6463 | 1382 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1383 (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
|
1384 "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
|
1385 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1386 (defvar sh-kw-alist nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1387 "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
|
1388 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1389 ;; ( 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
|
1390 ;; 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
|
1391 ;; having 3 elements: |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1392 ;; a keyword |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1393 ;; 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
|
1394 ;; 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
|
1395 ;; 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
|
1396 ;; 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
|
1397 ;; 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
|
1398 ;; 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
|
1399 ;; 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
|
1400 ;; 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
|
1401 ;; 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
|
1402 ;; 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
|
1403 ;; `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
|
1404 ;; 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
|
1405 ;; 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
|
1406 ;; 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
|
1407 ;; for both. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1408 ;; |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1409 (defconst sh-kw |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1410 '((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1411 ("if" nil sh-handle-prev-if) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1412 ("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
|
1413 ("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
|
1414 ("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
|
1415 ("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
|
1416 ("(" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1417 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1418 ("[" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1419 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1420 (")" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1421 ("]" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1422 ("case" nil sh-handle-prev-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1423 ("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
|
1424 (case-label nil sh-handle-after-case-label) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1425 (";;" nil sh-handle-prev-case-alt-end) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1426 ("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
|
1427 ("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
|
1428 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1429 ;; 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
|
1430 ;; 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
|
1431 ;; these shells use. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1432 (rc |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1433 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1434 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1435 ("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
|
1436 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1437 |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1438 (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
|
1439 "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
|
1440 When used interactively, insert the proper starting #!-line, |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1441 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
|
1442 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
|
1443 |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1444 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
|
1445 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
|
1446 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
|
1447 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
|
1448 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1449 Calls the value of `sh-set-shell-hook' if set." |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1450 (interactive (list (completing-read "Name or path of shell: " |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1451 interpreter-mode-alist |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1452 (lambda (x) (eq (cdr x) 'sh-mode))) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1453 (eq executable-query 'function) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1454 t)) |
23589
660727693bf6
(sh-canonicalize-shell): Fix regexp.
Andreas Schwab <schwab@suse.de>
parents:
23511
diff
changeset
|
1455 (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
|
1456 (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
|
1457 (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
|
1458 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
|
1459 sh-shell)) |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1460 (if insert-flag |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1461 (setq sh-shell-file |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1462 (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
|
1463 no-query-flag insert-flag))) |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1464 (setq require-final-newline (sh-feature sh-require-final-newline) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1465 ;;; local-abbrev-table (sh-feature sh-abbrevs) |
16535
d5eeca7cdaf2
(sh-mode-syntax-table): Turn on comment syntax for #,
Richard M. Stallman <rms@gnu.org>
parents:
16533
diff
changeset
|
1466 comment-start-skip "#+[\t ]*" |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1467 mode-line-process (format "[%s]" sh-shell) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1468 sh-shell-variables nil |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1469 sh-shell-variables-initialized nil |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1470 imenu-generic-expression (sh-feature sh-imenu-generic-expression) |
23341
d29b6b51866f
(sh-set-shell): Remove .exe suffix from shell name.
Richard M. Stallman <rms@gnu.org>
parents:
22783
diff
changeset
|
1471 imenu-case-fold-search nil) |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1472 (set-syntax-table (or (sh-feature sh-mode-syntax-table) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1473 (standard-syntax-table))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1474 (dolist (var (sh-feature sh-variables)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1475 (sh-remember-variable var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1476 (make-local-variable 'indent-line-function) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1477 (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
|
1478 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1479 (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
|
1480 (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
|
1481 (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
|
1482 (let ((regexp (sh-feature sh-kws-for-done))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1483 (if regexp |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1484 (set (make-local-variable 'sh-regexp-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1485 (sh-mkword-regexpr (regexp-opt regexp t))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1486 (message "setting up indent stuff") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1487 ;; 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
|
1488 ;; 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
|
1489 (setq indent-line-function 'sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1490 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1491 (sh-make-vars-local)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1492 (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
|
1493 (message "No indentation for this shell type.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1494 (setq indent-line-function 'sh-basic-indent-line)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1495 (run-hooks 'sh-set-shell-hook)) |
6463 | 1496 |
1497 | |
1498 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1499 (defun sh-feature (list &optional function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1500 "Index ALIST by the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1501 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
|
1502 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
|
1503 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1504 - 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
|
1505 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
|
1506 The ultimate default is always `sh'. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1507 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1508 - If the value thus looked up is a list starting with `eval' its `cdr' is |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1509 first evaluated. If that is also a list and the first argument is a |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1510 symbol in ALIST it is not evaluated, but rather recursively looked up in |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1511 ALIST to allow the function called to define the value for one shell to be |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1512 derived from another shell. While calling the function, is the car of the |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1513 alist element is the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1514 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
|
1515 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1516 Optional FUNCTION is applied to the determined value and the result is cached |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1517 in ALIST." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1518 (or (if (consp list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1519 (let ((l list)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1520 (while (and l (consp (car l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1521 (setq l (cdr l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1522 (if l list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1523 (if function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1524 (cdr (assoc (setq function (cons sh-shell function)) list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1525 (let ((sh-shell sh-shell) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1526 elt val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1527 (while (and sh-shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1528 (not (setq elt (assq sh-shell list)))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1529 (setq sh-shell (cdr (assq sh-shell sh-ancestor-alist)))) |
24906
01882044b37a
(sh-feature): If nothing is known about the given shell, use the
Richard M. Stallman <rms@gnu.org>
parents:
24899
diff
changeset
|
1530 ;; If the shell is not known, treat it as sh. |
01882044b37a
(sh-feature): If nothing is known about the given shell, use the
Richard M. Stallman <rms@gnu.org>
parents:
24899
diff
changeset
|
1531 (unless elt |
01882044b37a
(sh-feature): If nothing is known about the given shell, use the
Richard M. Stallman <rms@gnu.org>
parents:
24899
diff
changeset
|
1532 (setq elt (assq 'sh list))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1533 (if (and (consp (setq val (cdr elt))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1534 (eq (car val) 'eval)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1535 (setcdr elt |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1536 (setq val |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1537 (eval (if (consp (setq val (cdr val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1538 (let ((sh-shell (car (cdr val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1539 function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1540 (if (assq sh-shell list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1541 (setcar (cdr val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1542 (list 'quote |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1543 (sh-feature list)))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1544 val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1545 val))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1546 (if function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1547 (nconc list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1548 (list (cons function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1549 (setq sh-shell (car function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1550 val (funcall (cdr function) val)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1551 val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1552 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1553 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1554 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1555 ;; 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
|
1556 ;;(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
|
1557 ;; "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
|
1558 ;;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
|
1559 ;;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
|
1560 ;;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
|
1561 ;;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
|
1562 ;; (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
|
1563 ;; (symbol-value sh-shell)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1564 ;; (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1565 ;; (if (listp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1566 ;; (nconc list ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1567 ;; (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
|
1568 ;; (if (vectorp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1569 ;; (mapatoms (lambda (atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1570 ;; (or (eq atom 0) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1571 ;; (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
|
1572 ;; (symbol-name atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1573 ;; (symbol-value atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1574 ;; (symbol-function atom)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1575 ;; ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1576 ;; (while list |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1577 ;; (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
|
1578 ;; (car list) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1579 ;; (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
|
1580 ;; (car (cdr list)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1581 ;; "") |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1582 ;; (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
|
1583 ;; (car (cdr list)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1584 ;; (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
|
1585 ;; (symbol-value sh-shell))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1586 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1587 |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1588 (defun sh-mode-syntax-table (table &rest list) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1589 "Copy TABLE and set syntax for successive CHARs according to strings S." |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1590 (setq table (copy-syntax-table table)) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1591 (while list |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1592 (modify-syntax-entry (pop list) (pop list) table)) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1593 table) |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
1594 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1595 (defun sh-append (ancestor &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1596 "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
|
1597 (nconc list ancestor)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1598 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1599 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1600 (defun sh-modify (skeleton &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1601 "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
|
1602 (setq skeleton (copy-sequence skeleton)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1603 (while list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1604 (setcar (or (nthcdr (car list) skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1605 (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
|
1606 (car (cdr list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1607 (setq list (nthcdr 2 list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1608 skeleton) |
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 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1611 (defun sh-basic-indent-line () |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1612 "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
|
1613 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
|
1614 Lines containing only comments are considered empty." |
6463 | 1615 (interactive) |
1616 (let ((previous (save-excursion | |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1617 (while (and (progn (beginning-of-line) |
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1618 (not (bobp))) |
14211
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1619 (progn |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1620 (forward-line -1) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1621 (back-to-indentation) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1622 (or (eolp) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1623 (eq (following-char) ?#))))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1624 (current-column))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1625 current) |
6463 | 1626 (save-excursion |
1627 (indent-to (if (eq this-command 'newline-and-indent) | |
1628 previous | |
1629 (if (< (current-column) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1630 (setq current (progn (back-to-indentation) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1631 (current-column)))) |
6463 | 1632 (if (eolp) previous 0) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1633 (delete-region (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1634 (progn (beginning-of-line) (point))) |
6463 | 1635 (if (eolp) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1636 (max previous (* (1+ (/ current sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1637 sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1638 (* (1+ (/ current sh-indentation)) sh-indentation)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1639 (if (< (current-column) (current-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1640 (skip-chars-forward " \t")))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1641 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1642 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1643 (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
|
1644 "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
|
1645 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
|
1646 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
|
1647 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1648 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
|
1649 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
|
1650 region, clear header." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1651 (interactive "r\nP") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1652 (if flag |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1653 (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
|
1654 (point-marker))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1655 (if sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1656 (save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1657 (let (buffer-undo-list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1658 (goto-char sh-header-marker) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1659 (append-to-buffer (current-buffer) start end) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1660 (shell-command-on-region (point-min) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1661 (setq end (+ sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1662 (- end start))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1663 sh-shell-file) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1664 (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
|
1665 (shell-command-on-region start end (concat sh-shell-file " -"))))) |
6463 | 1666 |
1667 | |
1668 (defun sh-remember-variable (var) | |
1669 "Make VARIABLE available for future completing reads in this buffer." | |
1670 (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
|
1671 (getenv var) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1672 (assoc var sh-shell-variables) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1673 (push (cons var var) sh-shell-variables)) |
6463 | 1674 var) |
1675 | |
1676 | |
1677 | |
1678 (defun sh-quoted-p () | |
1679 "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
|
1680 (eq -1 (% (save-excursion (skip-chars-backward "\\\\")) 2))) |
6463 | 1681 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1682 ;; Indentation stuff. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1683 (defun sh-must-support-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1684 "*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
|
1685 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
|
1686 (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
|
1687 (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
|
1688 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1689 (defun sh-make-vars-local () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1690 "Make the indentation variables local to this buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1691 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
|
1692 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
|
1693 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1694 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
|
1695 command `sh-reset-indent-vars-to-global-values'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1696 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1697 (mapcar 'make-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1698 (message "Indentation variable are now local.")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1699 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1700 (defun sh-reset-indent-vars-to-global-values () |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1701 "Reset local indentation variables to the global values. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1702 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
|
1703 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1704 (mapcar 'kill-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1705 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1706 (mapcar 'make-local-variable sh-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1707 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1708 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1709 ;; 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
|
1710 ;; 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
|
1711 (defconst sh-special-keywords "then\\|do") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1712 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1713 (defun sh-help-string-for-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1714 "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
|
1715 (let ((msg (documentation-property var 'variable-documentation)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1716 (msg2 "")) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1717 (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
|
1718 (setq msg2 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1719 (format "\n |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1720 You can enter a number (positive to increase indentation, |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1721 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
|
1722 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1723 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
|
1724 the value of variable `sh-basic-offset' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1725 which in this buffer is currently %s. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1726 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1727 \t%s." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1728 sh-basic-offset |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1729 (mapconcat (lambda (x) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1730 (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
|
1731 sh-symbol-list "\n\t")))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1732 (concat |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1733 ;; 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
|
1734 ;; (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
|
1735 msg msg2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1736 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1737 (defun sh-read-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1738 "Read a new value for indentation variable VAR." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1739 (interactive "*variable? ") ;; to test |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1740 (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
|
1741 (quote ,var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1742 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1743 (setq val (read-from-minibuffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1744 (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
|
1745 var (single-key-description help-char)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1746 (format "%s" (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1747 nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1748 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1749 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1750 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1751 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1752 (defun sh-in-comment-or-string (start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1753 "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
|
1754 (save-excursion |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1755 (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
|
1756 (or (nth 3 state) (nth 4 state))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1757 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1758 (defun sh-goto-matching-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1759 "Go to the matching if for a fi. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1760 This handles nested if..fi pairs." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1761 (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
|
1762 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1763 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1764 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1765 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1766 ;; 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
|
1767 ;; line whose indentation is being handled contain XXX; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1768 ;; 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
|
1769 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1770 (defun sh-handle-prev-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1771 (list '(+ sh-indent-after-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1772 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1773 (defun sh-handle-this-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1774 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1775 ;; (list "aligned to if") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1776 (list "aligned to if" '(+ sh-indent-for-else)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1777 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1778 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1779 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1780 (defun sh-handle-prev-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1781 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1782 (list '(+ sh-indent-after-if)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1785 (defun sh-handle-this-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1786 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1787 (list "aligned to if" '(+ sh-indent-for-fi)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1788 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1789 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1790 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1791 (defun sh-handle-prev-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1792 ;; 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
|
1793 ;; 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
|
1794 ;; 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
|
1795 ;; 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
|
1796 ;; 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
|
1797 (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1798 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1799 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1800 (defun sh-handle-this-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1801 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1802 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1803 (list '(+ sh-indent-for-then)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1804 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1805 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1806 (defun sh-handle-prev-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1807 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1808 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1809 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1810 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1811 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1812 (defun sh-handle-prev-open () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1813 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1814 (let ((x (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1815 (if (and x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1816 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1817 (goto-char x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1818 (or |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1819 (looking-at "function\\b") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1820 (looking-at "\\s-*\\S-+\\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 (list '(+ sh-indent-after-function)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1823 (list '(+ sh-indent-after-open))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1824 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1825 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1826 (defun sh-handle-this-close () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1827 (forward-char 1) ;; move over ")" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1828 (if (sh-safe-forward-sexp -1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1829 (list "aligned to opening paren"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1830 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1831 (defun sh-goto-matching-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1832 (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
|
1833 (if found (goto-char found)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1834 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1835 (defun sh-handle-prev-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1836 ;; 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
|
1837 ;; 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
|
1838 (if (looking-at ".*\\<case\\>") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1839 (list '(+ sh-indent-for-case-label)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1840 (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
|
1841 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1842 (defun sh-handle-this-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1843 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1844 (list "aligned to matching case"))) |
25986
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 (defun sh-handle-prev-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1847 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1848 (list "matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1849 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1850 (defun sh-handle-after-case-label () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1851 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1852 (list '(+ sh-indent-for-case-alt)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1853 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1854 (defun sh-handle-prev-case-alt-end () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1855 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1856 (list '(+ sh-indent-for-case-label)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1857 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1858 (defun sh-safe-forward-sexp (&optional arg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1859 "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
|
1860 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
|
1861 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1862 (progn |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1863 (forward-sexp (or arg 1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1864 (point)) ;; return point if successful |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1865 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1866 (sh-debug "oops!(1) %d" (point)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1867 nil))) ;; return nil if fail |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1868 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1869 (defun sh-goto-match-for-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1870 (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
|
1871 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1872 (goto-char found)))) |
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 (defun sh-handle-this-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1875 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1876 (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
|
1877 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1878 (defun sh-handle-prev-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1879 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1880 (list "previous done"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1881 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1882 (defun sh-handle-this-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1883 (if (sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1884 (list '(+ sh-indent-for-do)))) |
25986
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-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1887 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1888 ((save-restriction |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1889 (narrow-to-region |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1890 (point) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1891 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1892 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1893 (point))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1894 (sh-goto-match-for-done)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1895 (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
|
1896 (list '(+ sh-indent-after-loop-construct))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1897 ((sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1898 (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
|
1899 (list '(+ sh-indent-after-do))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1900 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1901 (message "match for done NOT found") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1902 nil))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1903 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1904 ;; for rc: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1905 (defun sh-find-prev-switch () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1906 "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
|
1907 (re-search-backward "\\<switch\\>" nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1908 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1909 (defun sh-handle-this-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1910 (if (sh-find-prev-switch) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1911 (list '(+ sh-indent-after-switch)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1912 ;; (list '(+ sh-indent-for-case-label)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1913 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1914 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1915 (defun sh-handle-prev-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1916 (list '(+ sh-indent-after-case))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1917 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1918 (defun sh-check-rule (n thing) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1919 (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
|
1920 (val nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1921 (if rule |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1922 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1923 (setq val (funcall rule)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1924 (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
|
1925 n thing (point) rule val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1926 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1927 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1928 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1929 (defun sh-get-indent-info () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1930 "Return indent-info for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1931 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
|
1932 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
|
1933 \(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
|
1934 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
|
1935 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
|
1936 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
|
1937 modified by subsequent sublists. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1938 \(+ VAR\) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1939 \(- 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
|
1940 the indentation calculated so far. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1941 \(= 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
|
1942 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
|
1943 special variables such as `sh-indent-comment'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1944 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
|
1945 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
|
1946 what the indentation is based on." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1947 ;; See comments before `sh-kw'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1948 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1949 (let ((prev-kw nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1950 (prev-stmt nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1951 (have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1952 depth-bol depth-eol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1953 this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1954 (state nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1955 state-bol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1956 (depth-prev-bol nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1957 start |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1958 func val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1959 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1960 prev-lines-indent |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1961 (prev-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1962 (this-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1963 (align-point nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1964 prev-line-end x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1965 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1966 ;; 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
|
1967 ;;(This function never returns just t.) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1968 (cond |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
1969 ((or (and (boundp 'font-lock-string-face) |
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
1970 (eq (get-text-property (point) 'face) font-lock-string-face)) |
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
1971 (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
|
1972 (setq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1973 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1974 ((looking-at "\\s-*#") ; was (equal this-kw "#") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1975 (if (bobp) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1976 (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
|
1977 (setq result (list '(= sh-indent-comment))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1978 ;; 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
|
1979 ;; 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
|
1980 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1981 (setq have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1982 )) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1983 ) ;; cond |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
1984 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1985 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1986 ;; Continuation lines are handled specially |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1987 (if (sh-this-is-a-continuation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1988 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1989 ;; We assume the line being continued is already |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1990 ;; properly indented... |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1991 ;; (setq prev-line-end (sh-prev-line)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1992 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1993 (setq result (list '(+ sh-indent-for-continuation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1994 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1995 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1996 (skip-chars-forward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1997 (setq this-kw (sh-get-kw))) |
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 ;; 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
|
2000 ;; calculating indentation info for. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2001 (if this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2002 (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
|
2003 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2004 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2005 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2006 "this - setting align-point to %d" align-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2007 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2008 (setq have-result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2009 ;; set prev-line to continue processing remainder |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2010 ;; of this line as a previous line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2011 (setq prev-line-end (point)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2014 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2015 (setq prev-line-end (sh-prev-line 'end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2016 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2017 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2018 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2019 ;; We start off at beginning of this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2020 ;; Scan previous statements while this is <= |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2021 ;; start of previous line. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2022 (setq start (point)) ;; for debug only |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2023 (goto-char prev-line-end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2024 (setq x t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2025 (while (and x (setq x (sh-prev-thing))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2026 (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
|
2027 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2028 ((and (equal x ")") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2029 (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
|
2030 sh-st-punc)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2031 (sh-debug "Case label) here") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2032 (setq x 'case-label) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2033 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2034 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2035 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2036 (setq align-point (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2037 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2038 (skip-chars-forward "[a-z0-9]*?") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2039 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2040 ((string-match "[])}]" x) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2041 (setq x (sh-safe-forward-sexp -1)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2042 (if x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2043 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2044 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2045 (setq result (append result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2046 (list "aligned to opening paren"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2047 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2048 ((string-match "[[({]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2049 (sh-debug "Checking special thing: %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2050 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2051 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2052 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2053 (setq align-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2054 ((string-match "[\"'`]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2055 (sh-debug "Skipping back for %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2056 ;; this was oops-2 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2057 (setq x (sh-safe-forward-sexp -1))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2058 ((stringp x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2059 (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
|
2060 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2061 ;; (or (eq t (car val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2062 ;; (eq t (car (car val)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2063 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2064 ;; 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
|
2065 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2066 (unless (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2067 (forward-char -1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2068 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2069 (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
|
2070 ) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2071 ) ;; while |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2072 (sh-debug "result is %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2073 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2074 (sh-debug "No prev line!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2075 (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
|
2076 ) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2077 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2078 (if align-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2079 ;; 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
|
2080 (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
|
2081 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2082 (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
|
2083 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2084 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2085 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2086 (setq result (list (list t prev-line-end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2087 (setq result (list (list '= 'sh-first-lines-indent))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2088 )) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2089 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2090 (if (eq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2091 (setq result nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2092 (sh-debug "result is: %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2093 result |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2094 ) ;; let |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2095 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2096 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2097 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2098 (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
|
2099 "Return the variable controlling indentation for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2100 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
|
2101 indicating the problem. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2102 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
|
2103 (let ((var nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2104 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2105 (reason nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2106 sym elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2107 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2108 (setq info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2109 (if (null info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2110 (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
|
2111 (while (and info (null result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2112 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2113 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2114 ((stringp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2115 (setq reason elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2116 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2117 ((not (listp elt)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2118 (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
|
2119 ;; so it is a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2120 ((eq t (car elt)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2121 ) ;; nothing |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2122 ((symbolp (setq sym (nth 1 elt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2123 ;; 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
|
2124 ;; ignore other variables. Otherwise it is tricky to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2125 ;; "learn" the comment indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2126 (if (eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2127 (setq result var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2128 (if var |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2129 (setq result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2130 "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
|
2131 (setq var sym)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2132 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2133 (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
|
2134 (setq info (cdr info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2135 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2136 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2137 (setq result var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2138 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2139 (setq result reason)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2140 (if (null result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2141 ;; e.g. just had (t POS) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2142 (setq result "line has default indentation")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2143 result)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2146 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2147 ;; Finding the previous line isn't trivial. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2148 ;; 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
|
2149 ;; 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
|
2150 ;; we are going to! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2151 ;; 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
|
2152 ;; 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
|
2153 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2154 ;; What we do: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2155 ;; - go back to previous non-empty line |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2156 ;; - 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
|
2157 ;; - 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
|
2158 (defun sh-prev-line (&optional end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2159 "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
|
2160 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
|
2161 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
|
2162 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2163 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2164 (forward-comment (- (point-max))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2165 (unless end (beginning-of-line)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2166 (when (and (not (bobp)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2167 (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
|
2168 sh-heredoc-face)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2169 (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
|
2170 (when p1 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2171 (goto-char p1) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2172 (if end |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2173 (end-of-line) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2174 (beginning-of-line))))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2175 (unless end |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2176 ;; 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
|
2177 ;; 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
|
2178 (while (and (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2179 (>= 0 (forward-line -1)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2180 (beginning-of-line) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2181 (skip-chars-forward " \t")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2182 (point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2183 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2184 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2185 (defun sh-prev-stmt () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2186 "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
|
2187 ;; 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
|
2188 ;; 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
|
2189 ;; 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
|
2190 ;; 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
|
2191 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2192 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2193 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2194 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2195 (found nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2196 (prev nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2197 (skip-chars-backward " \t;|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2198 (while (and (not found) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2199 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2200 going) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2201 ;; 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
|
2202 (if (sh-safe-forward-sexp -1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2203 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2204 (if (looking-at sh-special-keywords) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2205 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2206 (setq found prev)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2207 (setq prev (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2208 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2209 ;; backward-sexp failed |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2210 (if (zerop (skip-chars-backward " \t()[\]{};`'")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2211 (forward-char -1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2212 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2213 (let ((back (sh-prev-line nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2214 (if back |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2215 (goto-char back) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2216 (setq going nil))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2217 (unless found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2218 (skip-chars-backward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2219 (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
|
2220 (eq (char-before) ?\;) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2221 (looking-at "\\s-*[|&]")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2222 (setq found (point))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2223 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2224 (goto-char found)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2225 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2226 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2227 (skip-chars-forward " \t|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2228 (setq found (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2229 (if (>= (point) start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2230 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2231 (debug "We didn't move!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2232 (setq found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2233 (or found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2234 (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
|
2235 found))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2236 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2237 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2238 (defun sh-get-word () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2239 "Get a shell word skipping whitespace from point." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2240 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2241 (skip-chars-forward "\t ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2242 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2243 (while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2244 (if (looking-at "[\"'`]") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2245 (sh-safe-forward-sexp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2246 ;; (> (skip-chars-forward "^ \t\n\"'`") 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2247 (> (skip-chars-forward "-_a-zA-Z\$0-9") 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2248 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2249 (buffer-substring start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2250 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2251 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2252 (defun sh-prev-thing () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2253 "Return the previous thing this logical line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2254 ;; 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
|
2255 ;; 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
|
2256 ;; 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
|
2257 ;; 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
|
2258 ;; line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2259 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2260 ;; Added a kludge for ";;" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2261 ;; Possible return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2262 ;; nil - nothing |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2263 ;; 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
|
2264 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2265 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2266 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2267 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2268 c n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2269 min-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2270 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2271 (found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2272 (save-restriction |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2273 (narrow-to-region |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2274 (if (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2275 (setq min-point (sh-prev-line nil)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2276 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2277 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2278 (setq min-point (point)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2279 (point)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2280 (skip-chars-backward " \t;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2281 (unless (looking-at "\\s-*;;") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2282 (skip-chars-backward "^)}];\"'`({[") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2283 (setq c (char-before)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2284 (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
|
2285 (point) c start min-point) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2286 (if (< (point) min-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2287 (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
|
2288 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2289 ((looking-at "\\s-*;;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2290 ;; (message "Found ;; !") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2291 ";;") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2292 ((or (eq c ?\n) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2293 (eq c nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2294 (eq c ?\;)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2295 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2296 ;; 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
|
2297 (skip-chars-forward " \t\n\\\\") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2298 (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
|
2299 (if (>= (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2300 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2301 (sh-debug "point: %d >= start: %d" (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2302 nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2303 (sh-get-word)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2304 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2305 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2306 ;; c -- return a string |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2307 (char-to-string c) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2308 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2309 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2310 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2311 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2312 (defun sh-this-is-a-continuation () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2313 "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
|
2314 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2315 (and (zerop (forward-line -1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2316 (looking-at ".*\\\\$") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2317 (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
|
2318 nil nil nil t)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2319 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2320 (defun sh-get-kw (&optional where and-move) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2321 "Return first word of line from WHERE. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2322 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
|
2323 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2324 (if where |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2325 (goto-char where)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2326 (prog1 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2327 (buffer-substring (point) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2328 (progn (skip-chars-forward "^ \t\n;")(point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2329 (unless and-move |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2330 (goto-char start))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2331 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2332 (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
|
2333 "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
|
2334 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
|
2335 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
|
2336 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
|
2337 (let ((parse-sexp-ignore-comments t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2338 prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2339 (setq depth (or depth 1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2340 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2341 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2342 (while (and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2343 (/= 0 depth) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2344 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2345 (setq prev (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2346 (goto-char prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2347 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2348 (if (looking-at "\\\\\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2349 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2350 (forward-char 2) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2351 (skip-chars-forward " \t"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2352 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2353 ((looking-at open) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2354 (setq depth (1- depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2355 (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
|
2356 ((looking-at close) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2357 (setq depth (1+ depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2358 (sh-debug "found close - depth = %d" depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2359 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2360 )))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2361 (error nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2362 (if (eq depth 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2363 prev ;; (point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2364 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2365 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2366 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2367 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2368 (defun sh-var-value (var &optional ignore-error) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2369 "Return the value of variable VAR, interpreting symbols. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2370 It can also return t or nil. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2371 If an illegal 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
|
2372 IGNORE-ERROR is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2373 (let ((val (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2374 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2375 ((numberp val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2376 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2377 ((eq val t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2378 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2379 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2380 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2381 ((eq val '+) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2382 sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2383 ((eq val '-) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2384 (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2385 ((eq val '++) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2386 (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2387 ((eq val '--) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2388 (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2389 ((eq val '*) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2390 (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2391 ((eq val '/) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2392 (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2393 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2394 (if ignore-error |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2395 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2396 (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
|
2397 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2398 (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
|
2399 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2400 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2401 (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
|
2402 "Set variable VAR to VALUE. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2403 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
|
2404 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
|
2405 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2406 (no-symbol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2407 (set var value)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2408 ((= value sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2409 (set var '+)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2410 ((= value (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2411 (set var '-)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2412 ((eq value (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2413 (set var '++)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2414 ((eq value (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2415 (set var '--)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2416 ((eq value (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2417 (set var '*)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2418 ((eq value (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2419 (set var '/)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2420 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2421 (set var value))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2422 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2423 |
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-calculate-indent (&optional info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2426 "Return the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2427 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
|
2428 (let ((ofs 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2429 (base-value 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2430 elt a b var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2431 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2432 (setq info (sh-get-indent-info))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2433 (when info |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2434 (while info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2435 (sh-debug "info: %s ofs=%s" info ofs) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2436 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2437 (cond |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2438 ((stringp elt)) ;; do nothing? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2439 ((listp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2440 (setq a (car (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2441 (setq b (nth 1 (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2442 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2443 ((eq a t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2444 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2445 (goto-char b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2446 (setq val (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2447 (setq base-value val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2448 ((symbolp b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2449 (setq val (sh-var-value b)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2450 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2451 ((eq a '=) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2452 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2453 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2454 ;; no indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2455 ;; set info to nil so we stop immediately |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2456 (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
|
2457 ((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
|
2458 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2459 ;; The following assume the (t POS) come first! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2460 (setq ofs val base-value 0) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2461 (setq info nil)))) ;; ? stop now |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2462 ((eq a '+) (setq ofs (+ ofs val))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2463 ((eq a '-) (setq ofs (- ofs val))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2464 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2465 (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
|
2466 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2467 (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
|
2468 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2469 (error "sh-calculate-indent invalid elt %s" elt))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2470 (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
|
2471 a b val base-value ofs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2472 (setq info (cdr info))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2473 ;; return value: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2474 (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
|
2475 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2476 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2477 ((or (null base-value)(null ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2478 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2479 ((and (numberp base-value)(numberp ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2480 (sh-debug "base (%d) + ofs (%d) = %d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2481 base-value ofs (+ base-value ofs)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2482 (+ base-value ofs)) ;; return value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2483 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2484 (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
|
2485 base-value ofs) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2486 nil))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2487 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2488 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
2489 (defun sh-indent-line () |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2490 "Indent the current line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2491 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2492 (let ((indent (sh-calculate-indent)) shift-amt beg end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2493 (pos (- (point-max) (point)))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2494 (when indent |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2495 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2496 (setq beg (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2497 (skip-chars-forward " \t") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2498 (setq shift-amt (- indent (current-column))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2499 (unless (zerop shift-amt) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2500 (delete-region beg (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2501 (indent-to indent)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2502 ;; If initial point was within line's indentation, |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2503 ;; 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
|
2504 (if (> (- (point-max) pos) (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2505 (goto-char (- (point-max) pos)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2506 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2507 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2508 (defun sh-blink (blinkpos &optional msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2509 "Move cursor momentarily to BLINKPOS and display MSG." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2510 ;; 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
|
2511 (if (numberp blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2512 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2513 (goto-char blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2514 (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2515 (sit-for blink-matching-delay)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2516 (message msg))) |
25986
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-show-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2519 "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
|
2520 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
|
2521 this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2522 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
|
2523 a pop up window describes this variable. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2524 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
|
2525 we are indenting relative to, if applicable." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2526 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2527 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2528 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2529 (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
|
2530 (curr-indent (current-indentation)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2531 val msg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2532 (if (stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2533 (message (setq msg var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2534 (setq val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2535 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2536 (if (eq curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2537 (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
|
2538 (setq msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2539 (if val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2540 (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
|
2541 var (symbol-value var) curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2542 (format "%s (%s) would leave line as is" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2543 var (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2544 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2545 (if (and arg var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2546 (describe-variable var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2547 (if sh-blink |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2548 (let ((info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2549 (if (and info (listp (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2550 (eq (car (car info)) t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2551 (sh-blink (nth 1 (car info)) msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2552 (message msg))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2553 (message msg)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2554 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2555 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2556 (defun sh-set-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2557 "Set the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2558 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
|
2559 for a new value for it." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2560 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2561 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2562 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2563 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2564 val val0 new-val old-val indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2565 (if (stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2566 (message (format "Cannot set indent - %s" var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2567 (setq old-val (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2568 (setq val (sh-read-variable var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2569 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2570 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2571 (set var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2572 (setq indent-val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2573 (if indent-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2574 (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
|
2575 var (symbol-value var) indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2576 (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
|
2577 var (symbol-value var))) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2578 ;; 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
|
2579 ;; 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
|
2580 ;; 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
|
2581 ;; (sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2582 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2583 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2584 (set var old-val) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2585 (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
|
2586 var old-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2587 (sit-for 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2588 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2589 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2590 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2591 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2592 (defun sh-learn-line-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2593 "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
|
2594 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2595 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
|
2596 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
|
2597 presently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2598 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2599 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
|
2600 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
|
2601 (interactive "*P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2602 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2603 ;; 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
|
2604 ;; 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
|
2605 ;; would just be confusing. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2606 (if (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2607 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2608 (looking-at "\\s-*$")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2609 (message "sh-learn-line-indent ignores empty lines.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2610 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2611 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2612 ival sval diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2613 (no-symbol arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2614 (curr-indent (current-indentation))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2615 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2616 ((stringp var) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2617 (message (format "Cannot learn line - %s" var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2618 ((eq var 'sh-indent-comment) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2619 ;; This is arbitrary... |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2620 ;; - 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
|
2621 ;; - 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
|
2622 ;; then set to t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2623 ;; - else set to curr-indent. |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2624 (setq sh-indent-comment |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2625 (if (= curr-indent 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2626 0 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2627 (let* ((sh-indent-comment t) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2628 (val2 (sh-calculate-indent info))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2629 (if (= val2 curr-indent) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2630 t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2631 curr-indent)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2632 (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
|
2633 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2634 ((numberp (setq sval (sh-var-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2635 (setq ival (sh-calculate-indent info)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2636 (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
|
2637 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2638 (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
|
2639 curr-indent ival diff var sval) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2640 (setq new-val (+ sval diff)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2641 ;;; 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
|
2642 ;;; 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
|
2643 ;;; or vice-versa. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2644 ;;; (if (= 0 diff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2645 ;;; (message "No change needed!") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2646 (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
|
2647 (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
|
2648 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2649 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2650 (debug) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2651 (message "Cannot change %s" var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2652 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2653 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2654 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2655 (defun sh-mark-init (buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2656 "Initialize a BUFFER to be used by `sh-mark-line'." |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2657 (save-excursion |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2658 (set-buffer (get-buffer-create buffer)) |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2659 (erase-buffer) |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2660 (occur-mode) |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2661 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2662 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2663 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2664 (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
|
2665 "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
|
2666 Buffer BUFFER is in `occur-mode'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2667 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
|
2668 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
|
2669 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
|
2670 (let ((m1 (make-marker)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2671 start |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2672 (line "")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2673 (when point |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2674 (set-marker m1 point (current-buffer)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2675 (if add-linenum |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2676 (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
|
2677 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2678 (if (get-buffer buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2679 (set-buffer (get-buffer buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2680 (set-buffer (get-buffer-create buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2681 (occur-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2682 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2683 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2684 (setq start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2685 (insert line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2686 (if occur-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2687 (setq occur-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2688 (insert message) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2689 (if point |
38079
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2690 (add-text-properties |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2691 start (point) |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2692 '(mouse-face highlight |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2693 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
|
2694 (insert "\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2695 (if point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2696 (progn |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2697 (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
|
2698 (if occur-point |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2699 (put-text-property start occur-point |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2700 'occur-match t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2701 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2702 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2703 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2704 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2705 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2706 ;; Is this really worth having? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2707 (defvar sh-learned-buffer-hook nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2708 "*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
|
2709 ;; 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
|
2710 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2711 ;; (defun what-i-learned (list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2712 ;; (let ((p list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2713 ;; (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2714 ;; (set-buffer "*scratch*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2715 ;; (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2716 ;; (insert "(setq\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2717 ;; (while p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2718 ;; (insert (format " %s %s \n" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2719 ;; (nth 0 (car p)) (nth 1 (car p)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2720 ;; (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2721 ;; (insert ")\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2722 ;; ))) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2723 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2724 ;; (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
|
2725 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2726 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2727 ;; 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
|
2728 ;; 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
|
2729 ;; use the whole buffer. Use narrowing if needbe. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2730 (defun sh-learn-buffer-indent (&optional arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2731 "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
|
2732 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2733 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
|
2734 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
|
2735 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
|
2736 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2737 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
|
2738 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
|
2739 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
|
2740 basic indent. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2741 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
|
2742 is set to the prefix's numerical value. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2743 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
|
2744 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
|
2745 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2746 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
|
2747 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
|
2748 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
|
2749 removed in the future. |
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 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
|
2752 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2753 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2754 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2755 (goto-char (point-min)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2756 (let ((learned-var-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2757 (out-buffer "*indent*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2758 (num-diffs 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2759 last-pos |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2760 previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2761 (max 17) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2762 vec |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2763 msg |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2764 (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
|
2765 (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
|
2766 initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2767 (specified-basic-offset (and arg (numberp arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2768 (> arg 0))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2769 (linenum 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2770 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2771 (setq vec (make-vector max 0)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2772 (sh-mark-init out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2773 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2774 (if specified-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2775 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2776 (setq sh-basic-offset arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2777 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2778 (format "Using specified sh-basic-offset of %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2779 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2780 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2781 (format "Initial value of sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2782 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2783 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2784 (while (< (point) (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2785 (setq linenum (1+ linenum)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2786 ;; (if (zerop (% linenum 10)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2787 (message "line %d" linenum) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2788 ;; ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2789 (unless (looking-at "\\s-*$") ;; ignore empty lines! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2790 (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
|
2791 (info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2792 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2793 sval ival diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2794 (curr-indent (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2795 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2796 ((null var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2797 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2798 ((stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2799 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2800 ((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
|
2801 ;; 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
|
2802 (setq ival (sh-calculate-indent)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2803 (setq diff (- curr-indent ival)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2804 (setq new-val (+ sval diff)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2805 (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
|
2806 (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
|
2807 (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
|
2808 (progn |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2809 ;; 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
|
2810 (unless (eq (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2811 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2812 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2813 (format "Variable %s was set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2814 var (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2815 (point) out-buffer t t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2816 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2817 (format " but was previously set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2818 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2819 (nth 2 previous-set-info) out-buffer t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2820 (setq num-diffs (1+ num-diffs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2821 ;; (delete previous-set-info learned-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2822 (setcdr previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2823 (list (symbol-value var) (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2824 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2825 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2826 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2827 (append (list (list var (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2828 (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2829 learned-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2830 (if (numberp new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2831 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2832 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2833 "This line's indent value: %d" new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2834 (if (< new-val 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2835 (setq new-val (- new-val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2836 (if (< new-val max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2837 (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
|
2838 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2839 ((eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2840 (unless (= curr-indent (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2841 ;; this is not the default indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2842 (setq comments-always-default nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2843 (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
|
2844 (or (eq comment-col curr-indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2845 (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
|
2846 (setq comment-col curr-indent)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2847 )) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2848 (t |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2849 (sh-debug "Cannot learn this line!!!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2850 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2851 (sh-debug |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2852 "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
|
2853 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2854 (forward-line 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2855 ) ;; while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2856 (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2857 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2858 (setq msg (format |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2859 "comment-col = %s comments-always-default = %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2860 comment-col comments-always-default)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2861 ;; (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2862 (sh-mark-line msg nil out-buffer))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2863 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2864 ((eq comment-col 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2865 (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
|
2866 (comments-always-default |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2867 (setq msg "\nComments follow default indentation.\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2868 (setq comment-col t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2869 ((numberp comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2870 (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
|
2871 (t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2872 (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
|
2873 (setq comment-col nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2874 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2875 (sh-debug msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2876 (sh-mark-line msg nil out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2877 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2878 (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
|
2879 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2880 (setq suggested (sh-guess-basic-offset vec)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2881 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2882 (if (and suggested (not specified-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2883 (let ((new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2884 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2885 ;; 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
|
2886 ((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
|
2887 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2888 ;; 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
|
2889 (sh-learn-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2890 (if (numberp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2891 suggested |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2892 (if (= (length suggested) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2893 (car suggested)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2894 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2895 nil)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2896 (if new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2897 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2898 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2899 (append (list (list 'sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2900 (setq sh-basic-offset new-value) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2901 (point-max))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2902 learned-var-list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2903 ;; 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
|
2904 ;; it will appear in the "Learned variable settings". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2905 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2906 (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
|
2907 nil out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2908 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2909 (if (listp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2910 (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
|
2911 (mapconcat 'int-to-string suggested " ")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2912 (format "Suggested sh-basic-offset: %d" suggested)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2913 nil out-buffer)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2914 |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2915 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2916 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2917 (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
|
2918 learned-var-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2919 (setq sh-indent-comment comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2920 (let ((name (buffer-name)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2921 (lines (if (and (eq (point-min) 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2922 (eq (point-max) (1+ (buffer-size)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2923 "" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2924 (format "lines %d to %d of " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2925 (1+ (count-lines 1 (point-min))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2926 (1+ (count-lines 1 (point-max)))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2927 ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2928 (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
|
2929 (if arg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2930 ;; Set learned variables to symbolic rather than numeric |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2931 ;; values where possible. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2932 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2933 (let ((var (car learned-var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2934 (val (nth 1 learned-var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2935 (when (and (not (eq var 'sh-basic-offset)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2936 (numberp val)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2937 (sh-set-var-value var val))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2938 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2939 (let ((var (car learned-var))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2940 (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
|
2941 (nth 2 learned-var) out-buffer))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2942 (save-excursion |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2943 (set-buffer out-buffer) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2944 (goto-char (point-min)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2945 (insert |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2946 (format "Indentation values for buffer %s.\n" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2947 (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
|
2948 num-diffs |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2949 (if (= num-diffs 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2950 " has" "s have") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2951 (if (zerop num-diffs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2952 "." ":")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2953 ))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2954 ;; Are abnormal hooks considered bad form? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2955 (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
|
2956 (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
|
2957 (pop-to-buffer out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2958 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2959 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2960 (defun sh-guess-basic-offset (vec) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2961 "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
|
2962 This is experimental, heuristic and arbitrary! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2963 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
|
2964 `sh-learn-buffer-indent'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2965 Return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2966 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
|
2967 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
|
2968 reasonable choices |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2969 nil - we couldn't find a reasonable one." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2970 (let* ((max (1- (length vec))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2971 (i 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2972 (totals (make-vector max 0)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2973 (return nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2974 j) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2975 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2976 (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
|
2977 (setq j (/ i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2978 (if (zerop (% i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2979 (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
|
2980 (if (< (* i 2) max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2981 (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
|
2982 (setq i (1+ i))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2983 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2984 (let ((x nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2985 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2986 tot sum p) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2987 (setq i 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2988 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2989 (if (/= (aref totals i) 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2990 (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
|
2991 (setq i (1+ i))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2992 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2993 (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
|
2994 (setq tot (apply '+ (append totals nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2995 (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
|
2996 vec totals tot)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2997 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2998 ((zerop (length x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2999 (message "no values!")) ;; we return nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3000 ((= (length x) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3001 (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
|
3002 (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
|
3003 ((> (cdr (car x)) (/ tot 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3004 ;; 1st is > 50% |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3005 (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
|
3006 (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
|
3007 ((>= (cdr (car x)) (* 2 (cdr (car (cdr x))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3008 ;; 1st is >= 2 * 2nd |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3009 (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
|
3010 (setq result (car (car x)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3011 ((>= (+ (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
|
3012 ;; 1st & 2nd together >= 50% - return a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3013 (setq p x sum 0 result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3014 (while (and p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3015 (<= (setq sum (+ sum (cdr (car p)))) (/ tot 2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3016 (setq result (append result (list (car (car p))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3017 (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3018 (message "Possible choices for sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3019 (mapconcat 'int-to-string result " "))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3020 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3021 (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
|
3022 (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3023 ;; result is nil here |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3024 )) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
3025 result))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3026 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3027 ;; ======================================================================== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3028 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3029 ;; 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
|
3030 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3031 (defvar sh-styles-alist nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3032 "A list of all known shell indentation styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3033 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3034 (defun sh-name-style (name &optional confirm-overwrite) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3035 "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
|
3036 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
|
3037 overwritten if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3038 - - 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
|
3039 - - 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
|
3040 ;; (interactive "sName for this style: ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3041 (interactive |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3042 (list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3043 (read-from-minibuffer "Name for this style? " ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3044 (not current-prefix-arg))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3045 (let ((slist (cons name |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3046 (mapcar (lambda (var) (cons var (symbol-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3047 sh-var-list))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3048 (style (assoc name sh-styles-alist))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3049 (if style |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3050 (if (and confirm-overwrite |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3051 (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
|
3052 (message "Not changing style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3053 (message "Updating style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3054 (setcdr style (cdr slist))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3055 (message "Creating new style %s" name) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3056 (push slist sh-styles-alist)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3057 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3058 (defun sh-load-style (name) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3059 "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
|
3060 (interactive (list (completing-read |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3061 "Which style to use for this buffer? " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3062 sh-styles-alist nil t))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3063 (let ((sl (assoc name sh-styles-alist))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3064 (if (null sl) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3065 (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
|
3066 (dolist (var (cdr sl)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3067 (set (car var) (cdr var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3068 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3069 (defun sh-save-styles-to-buffer (buff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3070 "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
|
3071 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
|
3072 (interactive (list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3073 (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
|
3074 (with-current-buffer (get-buffer-create buff) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3075 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3076 (insert "\n") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3077 (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
|
3078 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3079 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3080 |
6463 | 3081 ;; statement syntax-commands for various shells |
3082 | |
3083 ;; You are welcome to add the syntax or even completely new statements as | |
3084 ;; appropriate for your favorite shell. | |
3085 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3086 (define-skeleton sh-case |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3087 "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
|
3088 (csh "expression: " |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3089 "switch( " str " )" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3090 > "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
|
3091 > _ \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3092 "breaksw" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3093 ( "other pattern, %s: " |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3094 < "case " str ?: \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3095 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3096 "breaksw" \n) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3097 < "default:" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3098 > _ \n |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3099 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3100 < < "endsw" \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3101 (es) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3102 (rc "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3103 > "switch( " str " ) {" \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3104 > "case " (read-string "pattern: ") \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3105 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3106 ( "other pattern, %s: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3107 "case " str > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3108 > _ \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3109 "case *" > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3110 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3111 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3112 ?\} > \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3113 (sh "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3114 > "case " str " in" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3115 > (read-string "pattern: ") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3116 (propertize ")" 'syntax-table sh-st-punc) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3117 \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3118 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3119 ";;" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3120 ( "other pattern, %s: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3121 > str (propertize ")" 'syntax-table sh-st-punc) \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3122 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3123 ";;" \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3124 > "*" (propertize ")" 'syntax-table sh-st-punc) \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3125 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3126 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3127 "esac" > \n)) |
6463 | 3128 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3129 (define-skeleton sh-for |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3130 "Insert a for loop. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3131 (csh eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3132 1 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3133 2 "foreach " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3134 4 " ( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3135 6 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3136 15 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3137 16 "end") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3138 (es eval sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3139 4 " = ") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3140 (rc eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3141 2 "for( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3142 6 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3143 15 ?\} ) |
6463 | 3144 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3145 > "for " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3146 > _ | ?$ & (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
|
3147 "done" > \n)) |
6463 | 3148 |
3149 | |
3150 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3151 (define-skeleton sh-indexed-loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3152 "Insert an indexed loop from 1 to n. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3153 (bash eval identity posix) |
6463 | 3154 (csh "Index variable: " |
3155 "@ " str " = 1" \n | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3156 "while( $" str " <= " (read-string "upper limit: ") " )" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3157 > _ ?$ str \n |
6463 | 3158 "@ " str "++" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3159 < "end" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3160 (es eval sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3161 4 " =") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3162 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3163 > "integer " str "=0" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3164 > "while (( ( " str " += 1 ) <= " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3165 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3166 " )); do" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3167 > _ ?$ (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
|
3168 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3169 (posix "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3170 > str "=1" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3171 "while [ $" str " -le " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3172 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3173 " ]; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3174 > _ ?$ str \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3175 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
|
3176 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3177 (rc "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3178 > "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
|
3179 (read-string "upper limit: ") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3180 "; i++ ) print i }'`}) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3181 > _ ?$ (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
|
3182 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3183 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3184 > "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
|
3185 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3186 "; i++ ) print i }'`; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3187 > _ ?$ (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
|
3188 "done" > \n)) |
6463 | 3189 |
3190 | |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3191 (defun sh-shell-initialize-variables () |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3192 "Scan the buffer for variable assignments. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3193 Add these variables to `sh-shell-variables'." |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3194 (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
|
3195 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3196 (goto-char (point-min)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3197 (setq sh-shell-variables-initialized t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3198 (while (search-forward "=" nil t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3199 (sh-assignment 0))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3200 (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
|
3201 (buffer-name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3202 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3203 (defvar sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3204 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3205 (defun sh-add-completer (string predicate code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3206 "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
|
3207 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
|
3208 so it takes three arguments: |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3209 STRING, the current buffer contents; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3210 PREDICATE, the predicate for filtering possible matches; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3211 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
|
3212 CODE can be nil, t or `lambda'. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3213 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
|
3214 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
|
3215 `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
|
3216 (let ((sh-shell-variables |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3217 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3218 (set-buffer sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3219 (or sh-shell-variables-initialized |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3220 (sh-shell-initialize-variables)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3221 (nconc (mapcar (lambda (var) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3222 (let ((name |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3223 (substring var 0 (string-match "=" var)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3224 (cons name name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3225 process-environment) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3226 sh-shell-variables)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3227 (cond ((null code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3228 (try-completion string sh-shell-variables predicate)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3229 ((eq code t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3230 (all-completions string sh-shell-variables predicate)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3231 ((eq code 'lambda) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3232 (assoc string sh-shell-variables))))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3233 |
6463 | 3234 (defun sh-add (var delta) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3235 "Insert an addition of VAR and prefix DELTA for Bourne (type) shell." |
6463 | 3236 (interactive |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3237 (let ((sh-add-buffer (current-buffer))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3238 (list (completing-read "Variable: " 'sh-add-completer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3239 (prefix-numeric-value current-prefix-arg)))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3240 (insert (sh-feature '((bash . "$[ ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3241 (ksh88 . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3242 (posix . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3243 (rc . "`{expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3244 (sh . "`expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3245 (zsh . "$[ "))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3246 (sh-remember-variable var) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3247 (if (< delta 0) " - " " + ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3248 (number-to-string (abs delta)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3249 (sh-feature '((bash . " ]") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3250 (ksh88 . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3251 (posix . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3252 (rc . "}") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3253 (sh . "`") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3254 (zsh . " ]"))))) |
6463 | 3255 |
3256 | |
3257 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3258 (define-skeleton sh-function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3259 "Insert a function definition. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3260 (bash eval sh-modify ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3261 3 "() {") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3262 (ksh88 "name: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3263 "function " str " {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3264 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3265 < "}" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3266 (rc eval sh-modify ksh88 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3267 1 "fn ") |
6463 | 3268 (sh () |
3269 "() {" \n | |
3270 > _ \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3271 < "}" \n)) |
6463 | 3272 |
3273 | |
3274 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3275 (define-skeleton sh-if |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3276 "Insert an if statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3277 (csh "condition: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3278 "if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3279 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3280 ( "other condition, %s: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3281 < "else if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3282 > _ \n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3283 < "else" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3284 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3285 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3286 < "endif" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3287 (es "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3288 > "if { " str " } {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3289 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3290 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3291 "} { " str " } {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3292 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3293 "} {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3294 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3295 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3296 ?\} > \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3297 (rc "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3298 > "if( " str " ) {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3299 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3300 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3301 "} else if( " str " ) {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3302 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3303 "} else {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3304 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3305 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3306 ?\} > \n) |
6463 | 3307 (sh "condition: " |
12863 | 3308 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3309 > "if " str "; then" \n |
6463 | 3310 > _ \n |
3311 ( "other condition, %s: " | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3312 > "elif " str "; then" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3313 > \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3314 "else" > \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3315 > \n |
6463 | 3316 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3317 "fi" > \n)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3318 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3319 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3320 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3321 (define-skeleton sh-repeat |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3322 "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
|
3323 (es nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3324 > "forever {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3325 > _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3326 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3327 (zsh "factor: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3328 > "repeat " str "; do" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3329 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3330 "done" > \n)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3331 |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3332 ;;;(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
|
3333 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3334 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3335 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3336 (define-skeleton sh-select |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3337 "Insert a select statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3338 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3339 > "select " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3340 > ?$ str \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3341 "done" > \n) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
3342 (bash eval sh-append ksh88)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3343 ;;;(put 'sh-select 'menu-enable '(sh-feature sh-select)) |
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-tmp-file |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3348 "Insert code to setup temporary file handling. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3349 (bash eval identity ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3350 (csh (file-name-nondirectory (buffer-file-name)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3351 "set tmp = /tmp/" str ".$$" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3352 "onintr exit" \n _ |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3353 (and (goto-char (point-max)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3354 (not (bolp)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3355 ?\n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3356 "exit:\n" |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3357 "rm $tmp* >&/dev/null" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3358 (es (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3359 > "local( signals = $signals sighup sigint; tmp = /tmp/" str |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3360 ".$pid ) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3361 > "catch @ e {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3362 > "rm $tmp^* >[2]/dev/null" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3363 "throw $e" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3364 "} {" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3365 _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3366 ?\} > \n |
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3367 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3368 (ksh88 eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3369 7 "EXIT") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3370 (rc (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3371 > "tmp = /tmp/" str ".$pid" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3372 "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
|
3373 (sh (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3374 > "TMP=${TMPDIR:-/tmp}/" str ".$$" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3375 "trap \"rm $TMP* 2>/dev/null\" " ?0 \n)) |
6463 | 3376 |
3377 | |
3378 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3379 (define-skeleton sh-until |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3380 "Insert an until loop. See `sh-feature'." |
6463 | 3381 (sh "condition: " |
12863 | 3382 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3383 > "until " str "; do" \n |
6463 | 3384 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3385 "done" > \n)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3386 ;;;(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
|
3387 |
6463 | 3388 |
3389 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3390 (define-skeleton sh-while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3391 "Insert a while loop. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3392 (csh eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3393 2 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3394 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3395 5 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3396 10 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3397 11 "end") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3398 (es eval sh-modify sh |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3399 3 "while { " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3400 5 " } {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3401 10 ?\} ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3402 (rc eval sh-modify sh |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3403 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3404 5 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3405 10 ?\} ) |
6463 | 3406 (sh "condition: " |
12863 | 3407 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3408 > "while " str "; do" \n |
6463 | 3409 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3410 "done" > \n)) |
6463 | 3411 |
3412 | |
3413 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3414 (define-skeleton sh-while-getopts |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3415 "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
|
3416 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
|
3417 option followed by a colon `:' if the option accepts an argument." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3418 (bash eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3419 18 "${0##*/}") |
12863 | 3420 (csh nil |
3421 "while( 1 )" \n | |
3422 > "switch( \"$1\" )" \n | |
3423 '(setq input '("- x" . 2)) | |
3424 > > | |
3425 ( "option, %s: " | |
3426 < "case " '(eval str) | |
3427 '(if (string-match " +" str) | |
3428 (setq v1 (substring str (match-end 0)) | |
3429 str (substring str 0 (match-beginning 0))) | |
3430 (setq v1 nil)) | |
3431 str ?: \n | |
3432 > "set " v1 & " = $2" | -4 & _ \n | |
3433 (if v1 "shift") & \n | |
3434 "breaksw" \n) | |
3435 < "case --:" \n | |
3436 > "shift" \n | |
3437 < "default:" \n | |
3438 > "break" \n | |
3439 resume: | |
3440 < < "endsw" \n | |
3441 "shift" \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3442 < "end" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3443 (ksh88 eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3444 16 "print" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3445 18 "${0##*/}" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3446 36 "OPTIND-1") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3447 (posix eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3448 18 "$(basename $0)") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3449 (sh "optstring: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3450 > "while getopts :" str " OPT; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3451 > "case $OPT in" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3452 '(setq v1 (append (vconcat str) nil)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3453 ( (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
|
3454 (if (eq (nth 1 v1) ?:) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3455 (setq v1 (nthcdr 2 v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3456 v2 "\"$OPTARG\"") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3457 (setq v1 (cdr v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3458 v2 nil))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3459 > str "|+" str (propertize ")" 'syntax-table sh-st-punc) \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3460 > _ v2 \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3461 > ";;" \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3462 > "*" (propertize ")" 'syntax-table sh-st-punc) \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3463 > "echo" " \"usage: " "`basename $0`" |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3464 " [+-" '(setq v1 (point)) str |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3465 '(save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3466 (while (search-backward ":" v1 t) |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3467 (replace-match " ARG] [+-" t t))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3468 (if (eq (preceding-char) ?-) -5) |
29844
093c79809c9e
(sh-while-getopts): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
29422
diff
changeset
|
3469 (if (and (sequencep v1) (length v1)) "] " "} ") |
28923
dcafe3c9cd6c
(sh-while-getopts) <sh>: Handle case that
Gerd Moellmann <gerd@gnu.org>
parents:
26967
diff
changeset
|
3470 "[--] ARGS...\"" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3471 "exit 2" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3472 "esac" > |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3473 \n "done" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3474 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3475 "shift " (sh-add "OPTIND" -1) \n)) |
6463 | 3476 |
3477 | |
3478 | |
3479 (defun sh-assignment (arg) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3480 "Remember preceding identifier for future completion and do self-insert." |
6463 | 3481 (interactive "p") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3482 (self-insert-command arg) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3483 (if (<= arg 1) |
6463 | 3484 (sh-remember-variable |
3485 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3486 (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
|
3487 (prog1 (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3488 (beginning-of-line 1)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3489 t) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
3490 (match-string 1)))))) |
6463 | 3491 |
3492 | |
3493 | |
3494 (defun sh-maybe-here-document (arg) | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3495 "Insert self. Without prefix, following unquoted `<' inserts here document. |
6463 | 3496 The document is bounded by `sh-here-document-word'." |
3497 (interactive "*P") | |
3498 (self-insert-command (prefix-numeric-value arg)) | |
3499 (or arg | |
3500 (not (eq (char-after (- (point) 2)) last-command-char)) | |
3501 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3502 (backward-char 2) |
6463 | 3503 (sh-quoted-p)) |
3504 (progn | |
3505 (insert sh-here-document-word) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3506 (or (eolp) (looking-at "[ \t]") (insert ? )) |
6463 | 3507 (end-of-line 1) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3508 (while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3509 (sh-quoted-p) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3510 (end-of-line 2)) |
6463 | 3511 (newline) |
3512 (save-excursion (insert ?\n sh-here-document-word))))) | |
3513 | |
3514 | |
3515 ;; various other commands | |
3516 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3517 (autoload 'comint-dynamic-complete "comint" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3518 "Dynamically perform completion at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3519 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3520 (autoload 'shell-dynamic-complete-command "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3521 "Dynamically complete the command at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3522 |
6463 | 3523 (autoload 'comint-dynamic-complete-filename "comint" |
3524 "Dynamically complete the filename at point." t) | |
3525 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3526 (autoload 'shell-dynamic-complete-environment-variable "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3527 "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
|
3528 |
6463 | 3529 |
3530 | |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3531 (defun sh-newline-and-indent () |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3532 "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
|
3533 (interactive "*") |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3534 (indent-to (prog1 (current-indentation) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3535 (delete-region (point) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3536 (progn |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3537 (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
|
3538 (if (sh-quoted-p) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3539 (forward-char))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3540 (point))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3541 (newline)))) |
6463 | 3542 |
3543 (defun sh-beginning-of-command () | |
3544 "Move point to successive beginnings of commands." | |
3545 (interactive) | |
3546 (if (re-search-backward sh-beginning-of-command nil t) | |
3547 (goto-char (match-beginning 2)))) | |
3548 | |
3549 (defun sh-end-of-command () | |
3550 "Move point to successive ends of commands." | |
3551 (interactive) | |
3552 (if (re-search-forward sh-end-of-command nil t) | |
3553 (goto-char (match-end 1)))) | |
3554 | |
13707 | 3555 (provide 'sh-script) |
18382 | 3556 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3557 ;;; sh-script.el ends here |