Mercurial > emacs
annotate lisp/progmodes/sh-script.el @ 40171:91eda91380cb
New scaling algorithm for vc-annotate.
From JD Smith <jdsmith@astro.cornell.edu>.
(vc-cvs-annotate-difference): Removed to generic
version in vc.el, with
(vc-cvs-annotate-current-time): Added, as override of default.
(vc-cvs-annotate-time) Added. Taken mostly from the (now removed)
`vc-cvs-annotate-difference'.
author | André Spiegel <spiegel@gnu.org> |
---|---|
date | Mon, 22 Oct 2001 07:57:00 +0000 |
parents | bc9296467c86 |
children | 96186171af6d |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
46 ;; |
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, ...). |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
49 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
56 ;; |
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: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
61 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
68 ;; |
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: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
70 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
74 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
82 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
88 ;; |
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'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
101 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
109 ;; |
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) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
118 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
122 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
125 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
133 ;; |
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! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
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'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
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'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
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. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
152 ;; |
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: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
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 "$#"! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
168 ;; |
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'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
178 ;; |
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. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
183 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
184 ;; - `sh-learn-buffer-indent' is extremely slow. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
185 ;; |
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 |
15950
c4ae4ea7fa7a
(sh-alias-alist): Use gnu/linux, not lignux.
Richard M. Stallman <rms@gnu.org>
parents:
15677
diff
changeset
|
261 (nconc (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 | |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
395 (easy-mmode-defsyntax sh-mode-syntax-table |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
396 '((?\# . "<") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
397 (?\^l . ">#") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
398 (?\n . ">#") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
399 (?\" . "\"\"") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
400 (?\' . "\"'") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
401 (?\` . "\"`") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
402 (?! . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
403 (?% . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
404 (?: . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
405 (?. . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
406 (?^ . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
407 (?~ . "_") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
408 (?< . ".") |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
409 (?> . ".")) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
410 "Syntax-table used in Shell-Script mode.") |
6463 | 411 |
412 | |
413 (defvar sh-mode-map | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
414 (let ((map (make-sparse-keymap)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
415 (menu-map (make-sparse-keymap "Insert"))) |
6463 | 416 (define-key map "\C-c(" 'sh-function) |
417 (define-key map "\C-c\C-w" 'sh-while) | |
418 (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
|
419 (define-key map "\C-c\C-t" 'sh-tmp-file) |
6463 | 420 (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
|
421 (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
|
422 (define-key map "\C-c\C-o" 'sh-while-getopts) |
6463 | 423 (define-key map "\C-c\C-l" 'sh-indexed-loop) |
424 (define-key map "\C-c\C-i" 'sh-if) | |
425 (define-key map "\C-c\C-f" 'sh-for) | |
426 (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
|
427 (define-key map "\C-c?" 'sh-show-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
428 (define-key map "\C-c=" 'sh-set-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
429 (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
|
430 (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
|
431 |
6463 | 432 (define-key map "=" 'sh-assignment) |
433 (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
|
434 (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
|
435 (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
|
436 (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
|
437 (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
|
438 (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
|
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) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
443 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
444 (substitute-key-definition 'complete-tag 'comint-dynamic-complete |
6463 | 445 map (current-global-map)) |
446 (substitute-key-definition 'newline-and-indent 'sh-newline-and-indent | |
447 map (current-global-map)) | |
448 (substitute-key-definition 'delete-backward-char | |
449 'backward-delete-char-untabify | |
450 map (current-global-map)) | |
451 (define-key map "\C-c:" 'sh-set-shell) | |
452 (substitute-key-definition 'beginning-of-defun | |
453 'sh-beginning-of-compound-command | |
454 map (current-global-map)) | |
455 (substitute-key-definition 'backward-sentence 'sh-beginning-of-command | |
456 map (current-global-map)) | |
457 (substitute-key-definition 'forward-sentence 'sh-end-of-command | |
458 map (current-global-map)) | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
459 (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
|
460 (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
|
461 (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
|
462 (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
|
463 (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
|
464 (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
|
465 (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
|
466 (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
|
467 (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
|
468 (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
|
469 (define-key menu-map [sh-case] '("Case Statement" . sh-case)) |
6463 | 470 map) |
471 "Keymap used in Shell-Script mode.") | |
472 | |
473 | |
474 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
475 (defcustom sh-dynamic-complete-functions |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
476 '(shell-dynamic-complete-environment-variable |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
477 shell-dynamic-complete-command |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
478 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
|
479 "*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
|
480 :type '(repeat function) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
481 :group 'sh-script) |
6463 | 482 |
483 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
484 (defcustom sh-require-final-newline |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
485 '((csh . t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
486 (pdksh . t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
487 (rc eval . require-final-newline) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
488 (sh eval . require-final-newline)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
489 "*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
|
490 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
491 :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
|
492 (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
|
493 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
494 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
495 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
496 :group 'sh-script) |
6463 | 497 |
498 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
499 (defcustom sh-assignment-regexp |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
500 '((csh . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
501 ;; actually spaces are only supported in let/(( ... )) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
502 (ksh88 . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
503 (rc . "\\<\\([a-zA-Z0-9_*]+\\)[ \t]*=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
504 (sh . "\\<\\([a-zA-Z0-9_]+\\)=")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
505 "*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
|
506 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
|
507 sign. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
508 :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
|
509 (choice regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
510 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
511 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
512 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
513 :group 'sh-script) |
6463 | 514 |
515 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
516 (defcustom sh-indentation 4 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
517 "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
|
518 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
519 :group 'sh-script) |
6463 | 520 |
521 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
522 (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
|
523 "*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
|
524 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
525 :group 'sh-script) |
6463 | 526 |
527 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
528 (defvar sh-header-marker nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
529 "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
|
530 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
|
531 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
532 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
533 (defcustom sh-beginning-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
534 "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~a-zA-Z0-9:]\\)" |
6463 | 535 "*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
|
536 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
|
537 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
538 :group 'sh-script) |
6463 | 539 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
540 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
541 (defcustom sh-end-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
542 "\\([/~a-zA-Z0-9:]\\)[ \t]*\\([;#)}`|&]\\|$\\)" |
6463 | 543 "*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
|
544 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
|
545 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
546 :group 'sh-script) |
6463 | 547 |
548 | |
549 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
550 (defvar sh-here-document-word "EOF" |
6463 | 551 "Word to delimit here documents.") |
552 | |
12863 | 553 (defvar sh-test |
554 '((sh "[ ]" . 3) | |
555 (ksh88 "[[ ]]" . 4)) | |
556 "Initial input in Bourne if, while and until skeletons. See `sh-feature'.") | |
557 | |
6463 | 558 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
559 ;; 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
|
560 ;; 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
|
561 (defcustom sh-builtins |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
562 '((bash eval sh-append posix |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
563 "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
|
564 "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
|
565 "suspend" "typeset" "unalias") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
566 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
567 ;; 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
|
568 (bourne eval sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
569 "eval" "export" "getopts" "newgrp" "pwd" "read" "readonly" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
570 "times" "ulimit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
571 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
572 (csh eval sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
573 "alias" "chdir" "glob" "history" "limit" "nice" "nohup" "rehash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
574 "setenv" "source" "time" "unalias" "unhash") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
575 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
576 (dtksh eval identity wksh) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
577 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
578 (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
|
579 "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
|
580 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
581 (jsh eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
582 "bg" "fg" "jobs" "kill" "stop" "suspend") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
583 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
584 (jcsh eval sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
585 "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
|
586 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
587 (ksh88 eval sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
588 "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
|
589 "typeset" "unalias" "whence") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
590 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
591 (oash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
592 "checkwin" "dateline" "error" "form" "menu" "newwin" "oadeinit" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
593 "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
|
594 "wclear" "werase" "win" "wmclose" "wmmessage" "wmopen" "wmove" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
595 "wmtitle" "wrefresh") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
596 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
597 (pdksh eval sh-append ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
598 "bind") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
599 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
600 (posix eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
601 "command") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
602 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
603 (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
|
604 "whatis") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
605 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
606 (sh eval sh-append bourne |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
607 "hash" "test" "type") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
608 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
609 ;; 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
|
610 (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
|
611 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
612 (wksh eval sh-append ksh88 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
613 "Xt[A-Z][A-Za-z]*") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
614 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
615 (zsh eval sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
616 "autoload" "bindkey" "builtin" "chdir" "compctl" "declare" "dirs" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
617 "disable" "disown" "echotc" "enable" "functions" "getln" "hash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
618 "history" "integer" "limit" "local" "log" "popd" "pushd" "r" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
619 "readonly" "rehash" "sched" "setopt" "source" "suspend" "true" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
620 "ttyctl" "type" "unfunction" "unhash" "unlimit" "unsetopt" "vared" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
621 "which")) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
622 "*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
|
623 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
|
624 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
|
625 :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
|
626 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
627 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
628 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
629 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
630 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
631 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
632 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
633 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
634 (defcustom sh-leading-keywords |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
635 '((csh "else") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
636 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
637 (es "true" "unwind-protect" "whatis") |
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 (rc "else") |
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 (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
|
642 "*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
|
643 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
|
644 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
|
645 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
|
646 :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
|
647 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
648 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
649 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
650 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
651 :group 'sh-script) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
652 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
653 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
654 (defcustom sh-other-keywords |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
655 '((bash eval sh-append bourne |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
656 "bye" "logout") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
657 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
658 ;; 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
|
659 (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
|
660 "function") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
661 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
662 (csh eval sh-append shell |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
663 "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
664 "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
|
665 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
666 (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
|
667 "return" "throw" "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
668 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
669 (ksh88 eval sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
670 "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
671 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
672 (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
|
673 "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
674 |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
675 (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
|
676 "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
|
677 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
678 ;; 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
|
679 (shell "break" "case" "continue" "exec" "exit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
680 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
681 (zsh eval sh-append bash |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
682 "select")) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
683 "*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
|
684 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
685 :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
|
686 (choice (repeat string) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
687 (cons :format "Evaluate: %v" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
688 (const :format "" eval) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
689 sexp)))) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
690 :group 'sh-script) |
6463 | 691 |
692 | |
693 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
694 (defvar sh-variables |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
695 '((bash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
696 "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
|
697 "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
|
698 "histchars" "HISTFILE" "HISTFILESIZE" "history_control" "HISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
699 "hostname_completion_file" "HOSTTYPE" "IGNOREEOF" "ignoreeof" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
700 "LINENO" "MAIL_WARNING" "noclobber" "nolinks" "notify" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
701 "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
|
702 "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
|
703 "SECONDS" "SHLVL" "TMOUT" "UID") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
704 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
705 (csh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
706 "argv" "cdpath" "child" "echo" "histchars" "history" "home" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
707 "ignoreeof" "mail" "noclobber" "noglob" "nonomatch" "path" "prompt" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
708 "shell" "status" "time" "verbose") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
709 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
710 (es eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
711 "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
|
712 "pid" "prompt" "signals") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
713 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
714 (jcsh eval sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
715 "notify") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
716 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
717 (ksh88 eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
718 "ENV" "ERRNO" "FCEDIT" "FPATH" "HISTFILE" "HISTSIZE" "LINENO" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
719 "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
|
720 "TMOUT") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
721 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
722 (oash eval sh-append sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
723 "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
|
724 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
725 (rc eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
726 "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
|
727 "prompt" "status") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
728 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
729 (sh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
730 "CDPATH" "IFS" "OPTARG" "OPTIND" "PS1" "PS2") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
731 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
732 ;; 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
|
733 (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
|
734 "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
|
735 "LINES" "LOGNAME" "MAIL" "MAILCHECK" "MAILPATH" "PAGER" "PATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
736 "SHELL" "TERM" "TERMCAP" "TERMINFO" "VISUAL") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
737 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
738 (tcsh eval sh-append csh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
739 "addsuffix" "ampm" "autocorrect" "autoexpand" "autolist" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
740 "autologout" "chase_symlinks" "correct" "dextract" "edit" "el" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
741 "fignore" "gid" "histlit" "HOST" "HOSTTYPE" "HPATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
742 "ignore_symlinks" "listjobs" "listlinks" "listmax" "matchbeep" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
743 "nobeep" "NOREBIND" "oid" "printexitvalue" "prompt2" "prompt3" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
744 "pushdsilent" "pushdtohome" "recexact" "recognize_only_executables" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
745 "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
|
746 "tperiod" "tty" "uid" "version" "visiblebell" "watch" "who" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
747 "wordchars") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
748 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
749 (zsh eval sh-append ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
750 "BAUD" "bindcmds" "cdpath" "DIRSTACKSIZE" "fignore" "FIGNORE" "fpath" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
751 "HISTCHARS" "hostcmds" "hosts" "HOSTS" "LISTMAX" "LITHISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
752 "LOGCHECK" "mailpath" "manpath" "NULLCMD" "optcmds" "path" "POSTEDIT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
753 "prompt" "PROMPT" "PROMPT2" "PROMPT3" "PROMPT4" "psvar" "PSVAR" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
754 "READNULLCMD" "REPORTTIME" "RPROMPT" "RPS1" "SAVEHIST" "SPROMPT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
755 "STTY" "TIMEFMT" "TMOUT" "TMPPREFIX" "varcmds" "watch" "WATCH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
756 "WATCHFMT" "WORDCHARS" "ZDOTDIR")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
757 "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
|
758 See `sh-feature'.") |
6463 | 759 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
760 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
761 ;; Font-Lock support |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
762 |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
763 (defface sh-heredoc-face |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
764 '((((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
765 (background dark)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
766 (:foreground "yellow" :bold t)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
767 (((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
768 (background light)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
769 (:foreground "tan" )) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
770 (t |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
771 (:bold t))) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
772 "Face to show a here-document" |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
773 :group 'sh-indentation) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
774 (defvar sh-heredoc-face 'sh-heredoc-face) |
6463 | 775 |
776 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
777 (defvar sh-font-lock-keywords |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
778 '((csh eval sh-append shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
779 '("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1 |
12863 | 780 font-lock-variable-name-face)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
781 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
782 (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
|
783 '("\\$#?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\)" 1 |
12863 | 784 font-lock-variable-name-face)) |
6463 | 785 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
786 (rc eval identity es) |
6463 | 787 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
788 (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
|
789 ;; Variable names. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
790 '("\\$\\({#?\\)?\\([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
|
791 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
|
792 ;; Function names. |
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
793 '("^\\(\\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
|
794 '("\\<\\(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
|
795 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))) |
6463 | 796 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
797 ;; 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
|
798 (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
|
799 '("\\\\[^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
|
800 '("\\${?\\([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
|
801 font-lock-variable-name-face)) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
802 (rpm eval sh-append rpm2 |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
803 '("%{?\\(\\sw+\\)" 1 font-lock-keyword-face)) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
804 (rpm2 eval sh-append shell |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
805 '("^\\(\\sw+\\):" 1 font-lock-variable-name-face))) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
806 "Default expressions to highlight in Shell Script modes. See `sh-feature'.") |
6463 | 807 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
808 (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
|
809 '((sh "[ \t]in\\>")) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
810 "Subdued level highlighting for Shell Script modes.") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
811 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
812 (defvar sh-font-lock-keywords-2 () |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
813 "Gaudy level highlighting for Shell Script modes.") |
6463 | 814 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
815 ;; 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
|
816 ;; 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
|
817 (defconst sh-st-punc (string-to-syntax ".")) |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
818 (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
|
819 (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
|
820 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
821 (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
|
822 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
823 (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
|
824 (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
|
825 (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
|
826 (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
|
827 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
828 (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
|
829 "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
|
830 If non-nil INDENTED indicates that the EOF was indented." |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
831 (let* (;; A rough regexp that should find the opening <<EOF back. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
832 (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
833 ;; Use \s| to cheaply check it's an open-heredoc. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
834 (regexp-quote eof) "['\"]?\\([ \t|;&)<>].*\\)?\\s|")) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
835 ;; A regexp that will find other EOFs. |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
836 (ere (concat "^" (if indented "[ \t]*") (regexp-quote eof) "\n")) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
837 (start (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
838 (goto-char bol) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
839 (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
|
840 ;; 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
|
841 ;; 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
|
842 (cond |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
843 ((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
|
844 (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
|
845 (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
|
846 ;; 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
|
847 (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
848 (goto-char start) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
849 (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
|
850 (while |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
851 (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
852 (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
|
853 (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
|
854 (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
|
855 (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
|
856 ;; 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
|
857 (= (point) start))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
858 sh-here-doc-syntax) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
859 ((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
|
860 ;; 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
|
861 ;; 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
|
862 (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
|
863 (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
|
864 (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
|
865 (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
|
866 nil)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
867 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
868 (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
|
869 "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
|
870 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
|
871 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
|
872 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
|
873 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
|
874 (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
|
875 (sh-in-comment-or-string start)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
876 ;; 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
|
877 ;; 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
|
878 (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
|
879 (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
|
880 (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
|
881 (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
|
882 (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
|
883 (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
|
884 sh-here-doc-syntax)) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
885 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
886 (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
|
887 "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
|
888 ;; 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
|
889 (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
|
890 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
891 (defun sh-font-lock-paren (start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
892 (save-excursion |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
893 (goto-char start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
894 ;; Skip through all patterns |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
895 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
896 (progn |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
897 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
898 ;; Skip through one pattern |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
899 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
900 (or (/= 0 (skip-syntax-backward "w_")) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
901 (/= 0 (skip-chars-backward "?*/")) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
902 (when (memq (char-before) '(?\" ?\')) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
903 (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
|
904 (error nil))))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
905 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
906 (when (eq (char-before) ?|) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
907 (backward-char 1) t))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
908 (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
|
909 sh-st-punc))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
910 |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
911 (defconst sh-font-lock-syntactic-keywords |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
912 ;; 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
|
913 ;; 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
|
914 ;; 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
|
915 ;; 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
|
916 `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
917 ;; 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
|
918 (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
|
919 (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
|
920 (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
|
921 (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
|
922 (match-beginning 0) (match-string 4) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
923 (/= (match-beginning 3) (match-end 3))) nil t)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
924 ;; Distinguish the special close-paren in `case'. |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
925 (")" 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
|
926 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
927 (defun sh-font-lock-syntactic-face-function (state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
928 (if (nth 3 state) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
929 (if (char-valid-p (nth 3 state)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
930 font-lock-string-face |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
931 sh-heredoc-face) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
932 font-lock-comment-face)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
933 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
934 (defgroup sh-indentation nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
935 "Variables controlling indentation in shell scripts. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
936 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
937 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
|
938 `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
|
939 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
|
940 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
|
941 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
942 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
943 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
944 (defcustom sh-set-shell-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
945 "*Hook run by `sh-set-shell'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
946 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
947 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
948 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
949 (defcustom sh-mode-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
950 "*Hook run by `sh-mode'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
951 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
952 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
953 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
954 (defcustom sh-learn-basic-offset nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
955 "*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
|
956 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
957 nil mean: never. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
958 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
|
959 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
|
960 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
961 (const :tag "Never" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
962 (const :tag "Only if sure" t) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
963 (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
|
964 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
965 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
966 (defcustom sh-popup-occur-buffer nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
967 "*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
|
968 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
|
969 are conflicts." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
970 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
971 (const :tag "Only when there are conflicts." nil) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
972 (const :tag "Always" t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
973 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
974 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
975 (defcustom sh-blink t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
976 "*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
|
977 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
|
978 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
|
979 always the case." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
980 :type 'boolean |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
981 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
982 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
983 (defcustom sh-first-lines-indent 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
984 "*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
|
985 Usually 0 meaning first column. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
986 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
|
987 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
988 (const :tag "Leave as is" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
989 (integer :tag "Column number" |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
990 :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
|
991 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
992 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
993 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
994 (defcustom sh-basic-offset 4 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
995 "*The default indentation increment. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
996 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
|
997 :type 'integer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
998 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
999 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1000 (defcustom sh-indent-comment nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1001 "*How a comment line is to be indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1002 nil means leave it as it is; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1003 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
|
1004 non-comment line; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1005 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
|
1006 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1007 (const :tag "Leave as is." nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1008 (const :tag "Indent as a normal line." t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1009 (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
|
1010 :tag "Indent to column number.") ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1011 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1012 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1013 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1014 (defvar sh-debug nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1015 "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
|
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 ;; 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
|
1019 ;; (defun sh-debug (&rest args) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1020 ;; "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
|
1021 ;; (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1022 ;; (apply 'message args))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1023 (defmacro sh-debug (&rest args)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1024 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1025 (defconst sh-symbol-list |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1026 '((const :tag "+ " :value + |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1027 :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
|
1028 (const :tag "- " :value - |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1029 :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
|
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 twice 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 twice 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 half 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 half sh-basic-offset"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1038 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1039 (defcustom sh-indent-for-else 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1040 "*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
|
1041 :type `(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1042 (integer :menu-tag "A number (positive=>indent right)" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1043 :tag "A number") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1044 (const :tag "--") ;; separator! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1045 ,@ sh-symbol-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1046 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1047 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1048 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1049 (defconst sh-number-or-symbol-list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1050 (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
|
1051 :tag "A number") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1052 (const :tag "--")) ; separator |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1053 sh-symbol-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1054 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1055 (defcustom sh-indent-for-fi 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1056 "*How much to indent a fi relative to an if. Usually 0." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1057 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1058 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1059 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1060 (defcustom sh-indent-for-done '0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1061 "*How much to indent a done relative to its matching stmt. Usually 0." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1062 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1063 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1064 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1065 (defcustom sh-indent-after-else '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1066 "*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
|
1067 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1068 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1069 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1070 (defcustom sh-indent-after-if '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1071 "*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
|
1072 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
|
1073 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
|
1074 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1075 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1076 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1077 (defcustom sh-indent-for-then '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1078 "*How much to indent an then relative to an if." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1079 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1080 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1081 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1082 (defcustom sh-indent-for-do '* |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1083 "*How much to indent a do statement. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1084 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
|
1085 while until or for statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1086 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1087 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1088 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1089 (defcustom sh-indent-after-do '* |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1090 "*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
|
1091 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
|
1092 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
|
1093 while for repeat or select statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1094 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1095 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1096 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1097 (defcustom sh-indent-after-loop-construct '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1098 "*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
|
1099 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1100 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
|
1101 loop statement (e.g. \"until\", \"while\" or \"for\"). |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1102 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
|
1103 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1104 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1105 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1106 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1107 (defcustom sh-indent-after-done 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1108 "*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
|
1109 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
|
1110 looping construct line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1111 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
|
1112 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
|
1113 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1114 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1115 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1116 (defcustom sh-indent-for-case-label '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1117 "*How much to indent a case label statement. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1118 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
|
1119 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1120 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1121 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1122 (defcustom sh-indent-for-case-alt '++ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1123 "*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
|
1124 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
|
1125 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1126 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1127 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1128 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1129 (defcustom sh-indent-for-continuation '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1130 "*How much to indent for a continuation statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1131 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1132 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1133 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1134 (defcustom sh-indent-after-open '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1135 "*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
|
1136 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
|
1137 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1138 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1139 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1140 (defcustom sh-indent-after-function '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1141 "*How much to indent after a function line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1142 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1143 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1144 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1145 ;; These 2 are for the rc shell: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1146 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1147 (defcustom sh-indent-after-switch '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1148 "*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
|
1149 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1150 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1151 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1152 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1153 (defcustom sh-indent-after-case '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1154 "*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
|
1155 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1156 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1157 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1158 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1159 ;; 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
|
1160 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1161 (defun sh-mkword-regexpr (word) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1162 "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
|
1163 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
|
1164 punctuation characters like '-'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1165 (concat word "\\([^-a-z0-9_]\\|$\\)")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1166 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1167 (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
|
1168 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1169 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1170 (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
|
1171 '((sh . ( "while" "until" "for" ) ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1172 (bash . ( "while" "until" "for" "select" ) ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1173 (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
|
1174 (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
|
1175 "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
|
1176 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1177 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1178 (defconst sh-indent-supported |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1179 '((sh . t) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1180 (csh . nil) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1181 (rc . t)) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1182 "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
|
1183 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1184 (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
|
1185 "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
|
1186 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1187 (defconst sh-electric-rparen-needed |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1188 '((sh . t)) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1189 "Non-nil if the shell type needs an electric handling of case alternatives.") |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1190 |
25986
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 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1228 (define-derived-mode sh-mode nil "Shell-script" |
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. | |
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." |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1281 (make-local-variable 'skeleton-end-hook) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1282 (make-local-variable 'paragraph-start) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1283 (make-local-variable 'paragraph-separate) |
6463 | 1284 (make-local-variable 'comment-start) |
1285 (make-local-variable 'comment-start-skip) | |
1286 (make-local-variable 'require-final-newline) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1287 (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
|
1288 (make-local-variable 'sh-shell-file) |
6463 | 1289 (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
|
1290 (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
|
1291 (make-local-variable 'skeleton-pair-filter) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1292 (make-local-variable 'comint-dynamic-complete-functions) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1293 (make-local-variable 'comint-prompt-regexp) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1294 (make-local-variable 'font-lock-defaults) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1295 (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
|
1296 (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
|
1297 (make-local-variable 'sh-shell-variables) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1298 (make-local-variable 'sh-shell-variables-initialized) |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1299 (make-local-variable 'imenu-generic-expression) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1300 (make-local-variable 'sh-indent-supported-here) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1301 (setq skeleton-end-hook (lambda () |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1302 (or (eolp) (newline) (indent-relative))) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
1303 paragraph-start (concat page-delimiter "\\|$") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1304 paragraph-separate paragraph-start |
6463 | 1305 comment-start "# " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1306 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
|
1307 ;; 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
|
1308 comint-prompt-regexp "^[ \t]*" |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1309 font-lock-defaults |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1310 `((sh-font-lock-keywords |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1311 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
|
1312 nil nil |
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1313 ((?/ . "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
|
1314 (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
|
1315 (font-lock-syntactic-face-function |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1316 . 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
|
1317 skeleton-pair-alist '((?` _ ?`)) |
3b9dcd964c66
(sh-mode-map): Use new name skeleton-pair-insert-maybe.
Karl Heuer <kwzh@gnu.org>
parents:
12863
diff
changeset
|
1318 skeleton-pair-filter 'sh-quoted-p |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1319 skeleton-further-elements '((< '(- (min sh-indentation |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1320 (current-column))))) |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
1321 skeleton-filter 'sh-feature |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1322 skeleton-newline-indent-rigidly t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1323 sh-indent-supported-here nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1324 (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
|
1325 ;; 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
|
1326 ;; on the shell thus determined. |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1327 (let ((interpreter |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1328 (save-excursion |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1329 (goto-char (point-min)) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
1330 (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
|
1331 (match-string 2)) |
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1332 ((and buffer-file-name |
e1cb8de8ffb2
(sh-mode): Do not fail if buffer has no
Karl Heuer <kwzh@gnu.org>
parents:
23869
diff
changeset
|
1333 (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
|
1334 "rpm"))))) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1335 (sh-set-shell (or interpreter sh-shell-file) nil nil))) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1336 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1337 ;;;###autoload |
6463 | 1338 (defalias 'shell-script-mode 'sh-mode) |
1339 | |
1340 | |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1341 (defun sh-font-lock-keywords (&optional keywords) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1342 "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
|
1343 This adds rules for comments and assignments." |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1344 (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
|
1345 (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
|
1346 (lambda (list) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1347 `((,(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
|
1348 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
|
1349 ,@keywords |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1350 ,@list))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1351 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1352 (defun sh-font-lock-keywords-1 (&optional builtins) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1353 "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
|
1354 (let ((keywords (concat "\\([;(){}`|&]\\|^\\)[ \t]*\\(\\(" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1355 (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
|
1356 "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1357 (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
|
1358 (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
|
1359 t)))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1360 (sh-font-lock-keywords |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1361 `(,@(if builtins |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1362 `((,(concat keywords "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1363 (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
|
1364 "\\>") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1365 (2 font-lock-keyword-face nil t) |
16478 | 1366 (6 font-lock-builtin-face)) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1367 ,@(sh-feature sh-font-lock-keywords-2))) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1368 (,(concat keywords "\\)\\>") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1369 2 font-lock-keyword-face) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1370 ,@(sh-feature sh-font-lock-keywords-1))))) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1371 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1372 (defun sh-font-lock-keywords-2 () |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1373 "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
|
1374 (sh-font-lock-keywords-1 t)) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1375 |
6463 | 1376 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1377 (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
|
1378 "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
|
1379 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1380 (defvar sh-kw-alist nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1381 "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
|
1382 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1383 ;; ( 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
|
1384 ;; 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
|
1385 ;; having 3 elements: |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1386 ;; a keyword |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1387 ;; 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
|
1388 ;; 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
|
1389 ;; 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
|
1390 ;; 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
|
1391 ;; 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
|
1392 ;; 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
|
1393 ;; 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
|
1394 ;; 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
|
1395 ;; 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
|
1396 ;; 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
|
1397 ;; `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
|
1398 ;; 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
|
1399 ;; 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
|
1400 ;; 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
|
1401 ;; for both. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1402 ;; |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1403 (defconst sh-kw |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1404 '((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1405 ("if" nil sh-handle-prev-if) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1406 ("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
|
1407 ("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
|
1408 ("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
|
1409 ("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
|
1410 ("(" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1411 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1412 ("[" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1413 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1414 (")" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1415 ("]" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1416 ("case" nil sh-handle-prev-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1417 ("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
|
1418 (case-label nil sh-handle-after-case-label) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1419 (";;" nil sh-handle-prev-case-alt-end) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1420 ("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
|
1421 ("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
|
1422 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1423 ;; 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
|
1424 ;; 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
|
1425 ;; these shells use. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1426 (rc |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1427 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1428 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1429 ("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
|
1430 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1431 |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1432 (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
|
1433 "Set this buffer's shell to SHELL (a string). |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1434 Makes this script executable via `executable-set-magic', and sets up the |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1435 proper starting #!-line, if INSERT-FLAG is non-nil. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1436 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
|
1437 (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
|
1438 interpreter-mode-alist |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1439 (lambda (x) (eq (cdr x) 'sh-mode))) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1440 (eq executable-query 'function) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1441 t)) |
23589
660727693bf6
(sh-canonicalize-shell): Fix regexp.
Andreas Schwab <schwab@suse.de>
parents:
23511
diff
changeset
|
1442 (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
|
1443 (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
|
1444 (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
|
1445 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
|
1446 sh-shell)) |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1447 (if insert-flag |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1448 (setq sh-shell-file |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1449 (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
|
1450 no-query-flag insert-flag))) |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1451 (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
|
1452 ;;; 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
|
1453 comment-start-skip "#+[\t ]*" |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1454 mode-line-process (format "[%s]" sh-shell) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1455 sh-shell-variables nil |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1456 sh-shell-variables-initialized nil |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1457 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
|
1458 imenu-case-fold-search nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1459 (dolist (var (sh-feature sh-variables)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1460 (sh-remember-variable var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1461 (make-local-variable 'indent-line-function) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1462 (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
|
1463 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1464 (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
|
1465 (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
|
1466 (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
|
1467 (let ((regexp (sh-feature sh-kws-for-done))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1468 (if regexp |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1469 (set (make-local-variable 'sh-regexp-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1470 (sh-mkword-regexpr (regexp-opt regexp t))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1471 (message "setting up indent stuff") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1472 ;; 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
|
1473 ;; 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
|
1474 (setq indent-line-function 'sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1475 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1476 (sh-make-vars-local)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1477 (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
|
1478 (message "No indentation for this shell type.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1479 (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
|
1480 (run-hooks 'sh-set-shell-hook)) |
6463 | 1481 |
1482 | |
1483 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1484 (defun sh-feature (list &optional function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1485 "Index ALIST by the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1486 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
|
1487 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
|
1488 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1489 - 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
|
1490 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
|
1491 The ultimate default is always `sh'. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1492 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1493 - 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
|
1494 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
|
1495 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
|
1496 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
|
1497 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
|
1498 alist element is the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1499 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
|
1500 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1501 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
|
1502 in ALIST." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1503 (or (if (consp list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1504 (let ((l list)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1505 (while (and l (consp (car l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1506 (setq l (cdr l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1507 (if l list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1508 (if function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1509 (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
|
1510 (let ((sh-shell sh-shell) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1511 elt val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1512 (while (and sh-shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1513 (not (setq elt (assq sh-shell list)))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1514 (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
|
1515 ;; 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
|
1516 (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
|
1517 (setq elt (assq 'sh list))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1518 (if (and (consp (setq val (cdr elt))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1519 (eq (car val) 'eval)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1520 (setcdr elt |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1521 (setq val |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1522 (eval (if (consp (setq val (cdr val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1523 (let ((sh-shell (car (cdr val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1524 function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1525 (if (assq sh-shell list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1526 (setcar (cdr val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1527 (list 'quote |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1528 (sh-feature list)))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1529 val) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1530 val))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1531 (if function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1532 (nconc list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1533 (list (cons function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1534 (setq sh-shell (car function) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1535 val (funcall (cdr function) val)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1536 val))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1537 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1538 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1539 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1540 ;; 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
|
1541 ;;(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
|
1542 ;; "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
|
1543 ;;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
|
1544 ;;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
|
1545 ;;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
|
1546 ;;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
|
1547 ;; (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
|
1548 ;; (symbol-value sh-shell)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1549 ;; (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1550 ;; (if (listp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1551 ;; (nconc list ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1552 ;; (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
|
1553 ;; (if (vectorp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1554 ;; (mapatoms (lambda (atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1555 ;; (or (eq atom 0) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1556 ;; (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
|
1557 ;; (symbol-name atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1558 ;; (symbol-value atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1559 ;; (symbol-function atom)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1560 ;; ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1561 ;; (while list |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1562 ;; (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
|
1563 ;; (car list) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1564 ;; (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
|
1565 ;; (car (cdr list)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1566 ;; "") |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1567 ;; (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
|
1568 ;; (car (cdr list)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1569 ;; (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
|
1570 ;; (symbol-value sh-shell))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1571 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1572 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1573 (defun sh-append (ancestor &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1574 "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
|
1575 (nconc list ancestor)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1576 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1577 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1578 (defun sh-modify (skeleton &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1579 "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
|
1580 (setq skeleton (copy-sequence skeleton)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1581 (while list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1582 (setcar (or (nthcdr (car list) skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1583 (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
|
1584 (car (cdr list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1585 (setq list (nthcdr 2 list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1586 skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1587 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1588 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1589 (defun sh-basic-indent-line () |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1590 "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
|
1591 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
|
1592 Lines containing only comments are considered empty." |
6463 | 1593 (interactive) |
1594 (let ((previous (save-excursion | |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1595 (while (and (progn (beginning-of-line) |
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1596 (not (bobp))) |
14211
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1597 (progn |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1598 (forward-line -1) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1599 (back-to-indentation) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1600 (or (eolp) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1601 (eq (following-char) ?#))))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1602 (current-column))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1603 current) |
6463 | 1604 (save-excursion |
1605 (indent-to (if (eq this-command 'newline-and-indent) | |
1606 previous | |
1607 (if (< (current-column) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1608 (setq current (progn (back-to-indentation) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1609 (current-column)))) |
6463 | 1610 (if (eolp) previous 0) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1611 (delete-region (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1612 (progn (beginning-of-line) (point))) |
6463 | 1613 (if (eolp) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1614 (max previous (* (1+ (/ current sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1615 sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1616 (* (1+ (/ current sh-indentation)) sh-indentation)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1617 (if (< (current-column) (current-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1618 (skip-chars-forward " \t")))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1619 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1620 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1621 (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
|
1622 "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
|
1623 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
|
1624 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
|
1625 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1626 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
|
1627 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
|
1628 region, clear header." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1629 (interactive "r\nP") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1630 (if flag |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1631 (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
|
1632 (point-marker))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1633 (if sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1634 (save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1635 (let (buffer-undo-list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1636 (goto-char sh-header-marker) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1637 (append-to-buffer (current-buffer) start end) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1638 (shell-command-on-region (point-min) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1639 (setq end (+ sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1640 (- end start))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1641 sh-shell-file) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1642 (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
|
1643 (shell-command-on-region start end (concat sh-shell-file " -"))))) |
6463 | 1644 |
1645 | |
1646 (defun sh-remember-variable (var) | |
1647 "Make VARIABLE available for future completing reads in this buffer." | |
1648 (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
|
1649 (getenv var) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1650 (assoc var sh-shell-variables) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1651 (push (cons var var) sh-shell-variables)) |
6463 | 1652 var) |
1653 | |
1654 | |
1655 | |
1656 (defun sh-quoted-p () | |
1657 "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
|
1658 (eq -1 (% (save-excursion (skip-chars-backward "\\\\")) 2))) |
6463 | 1659 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1660 ;; Indentation stuff. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1661 (defun sh-must-be-shell-mode () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1662 "Signal an error if not in Shell-script mode." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1663 (unless (eq major-mode 'sh-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1664 (error "This buffer is not in Shell-script mode"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1665 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1666 (defun sh-must-support-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1667 "*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
|
1668 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
|
1669 (sh-must-be-shell-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1670 (unless sh-indent-supported-here |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1671 (error "This buffer's shell type is not supported for this command"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1672 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1673 (defun sh-make-vars-local () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1674 "Make the indentation variables local to this buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1675 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
|
1676 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
|
1677 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1678 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
|
1679 command `sh-reset-indent-vars-to-global-values'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1680 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1681 (sh-must-be-shell-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1682 (mapcar 'make-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1683 (message "Indentation variable are now local.")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1684 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1685 (defun sh-reset-indent-vars-to-global-values () |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1686 "Reset local indentation variables to the global values. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1687 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
|
1688 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1689 (sh-must-be-shell-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1690 (mapcar 'kill-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1691 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1692 (mapcar 'make-local-variable sh-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1693 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1694 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1695 ;; 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
|
1696 ;; 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
|
1697 (defconst sh-special-keywords "then\\|do") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1698 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1699 (defun sh-help-string-for-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1700 "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
|
1701 (let ((msg (documentation-property var 'variable-documentation)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1702 (msg2 "")) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1703 (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
|
1704 (setq msg2 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1705 (format "\n |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1706 You can enter a number (positive to increase indentation, |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1707 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
|
1708 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1709 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
|
1710 the value of variable `sh-basic-offset' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1711 which in this buffer is currently %s. |
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 \t%s." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1714 sh-basic-offset |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1715 (mapconcat (lambda (x) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1716 (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
|
1717 sh-symbol-list "\n\t")))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1718 (concat |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1719 ;; 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
|
1720 ;; (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
|
1721 msg msg2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1722 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1723 (defun sh-read-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1724 "Read a new value for indentation variable VAR." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1725 (interactive "*variable? ") ;; to test |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1726 (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
|
1727 (quote ,var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1728 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1729 (setq val (read-from-minibuffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1730 (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
|
1731 var (single-key-description help-char)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1732 (format "%s" (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1733 nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1734 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1735 |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1738 (defun sh-in-comment-or-string (start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1739 "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
|
1740 (save-excursion |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1741 (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
|
1742 (or (nth 3 state) (nth 4 state))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1743 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1744 (defun sh-goto-matching-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1745 "Go to the matching if for a fi. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1746 This handles nested if..fi pairs." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1747 (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
|
1748 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1749 (goto-char found)))) |
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 ;; 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
|
1753 ;; line whose indentation is being handled contain XXX; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1754 ;; 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
|
1755 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1756 (defun sh-handle-prev-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1757 (list '(+ sh-indent-after-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1758 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1759 (defun sh-handle-this-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1760 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1761 ;; (list "aligned to if") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1762 (list "aligned to if" '(+ sh-indent-for-else)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1763 nil |
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 (defun sh-handle-prev-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1767 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1768 (list '(+ sh-indent-after-if)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1771 (defun sh-handle-this-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1772 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1773 (list "aligned to if" '(+ sh-indent-for-fi)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1774 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1775 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1776 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1777 (defun sh-handle-prev-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1778 ;; 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
|
1779 ;; 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
|
1780 ;; 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
|
1781 ;; 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
|
1782 ;; 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
|
1783 (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1784 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1785 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1786 (defun sh-handle-this-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1787 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1788 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1789 (list '(+ sh-indent-for-then)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1792 (defun sh-handle-prev-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1793 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1794 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1795 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1796 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1797 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1798 (defun sh-handle-prev-open () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1799 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1800 (let ((x (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1801 (if (and x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1802 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1803 (goto-char x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1804 (or |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1805 (looking-at "function\\b") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1806 (looking-at "\\s-*\\S-+\\s-*()") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1807 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1808 (list '(+ sh-indent-after-function)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1809 (list '(+ sh-indent-after-open))) |
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-this-close () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1813 (forward-char 1) ;; move over ")" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1814 (if (sh-safe-forward-sexp -1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1815 (list "aligned to opening paren"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1816 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1817 (defun sh-goto-matching-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1818 (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
|
1819 (if found (goto-char found)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1820 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1821 (defun sh-handle-prev-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1822 ;; 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
|
1823 ;; 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
|
1824 (if (looking-at ".*\\<case\\>") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1825 (list '(+ sh-indent-for-case-label)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1826 (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
|
1827 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1828 (defun sh-handle-this-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1829 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1830 (list "aligned to matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1831 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1832 (defun sh-handle-prev-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1833 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1834 (list "matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1835 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1836 (defun sh-handle-after-case-label () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1837 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1838 (list '(+ sh-indent-for-case-alt)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1839 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1840 (defun sh-handle-prev-case-alt-end () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1841 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1842 (list '(+ sh-indent-for-case-label)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1843 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1844 (defun sh-safe-forward-sexp (&optional arg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1845 "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
|
1846 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
|
1847 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1848 (progn |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1849 (forward-sexp (or arg 1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1850 (point)) ;; return point if successful |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1851 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1852 (sh-debug "oops!(1) %d" (point)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1853 nil))) ;; return nil if fail |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1854 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1855 (defun sh-goto-match-for-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1856 (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
|
1857 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1858 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1859 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1860 (defun sh-handle-this-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1861 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1862 (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
|
1863 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1864 (defun sh-handle-prev-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1865 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1866 (list "previous done"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1867 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1868 (defun sh-handle-this-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1869 (if (sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1870 (list '(+ sh-indent-for-do)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1871 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1872 (defun sh-handle-prev-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1873 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1874 ((save-restriction |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1875 (narrow-to-region |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1876 (point) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1877 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1878 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1879 (point))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1880 (sh-goto-match-for-done)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1881 (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
|
1882 (list '(+ sh-indent-after-loop-construct))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1883 ((sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1884 (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
|
1885 (list '(+ sh-indent-after-do))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1886 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1887 (message "match for done NOT found") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1888 nil))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1889 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1890 ;; for rc: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1891 (defun sh-find-prev-switch () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1892 "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
|
1893 (re-search-backward "\\<switch\\>" nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1894 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1895 (defun sh-handle-this-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1896 (if (sh-find-prev-switch) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1897 (list '(+ sh-indent-after-switch)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1898 ;; (list '(+ sh-indent-for-case-label)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1899 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1900 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1901 (defun sh-handle-prev-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1902 (list '(+ sh-indent-after-case))) |
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 (defun sh-check-rule (n thing) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1905 (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
|
1906 (val nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1907 (if rule |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1908 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1909 (setq val (funcall rule)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1910 (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
|
1911 n thing (point) rule val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1912 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1913 |
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-get-indent-info () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1916 "Return indent-info for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1917 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
|
1918 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
|
1919 \(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
|
1920 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
|
1921 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
|
1922 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
|
1923 modified by subsequent sublists. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1924 \(+ VAR\) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1925 \(- 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
|
1926 the indentation calculated so far. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1927 \(= 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
|
1928 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
|
1929 special variables such as `sh-indent-comment'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1930 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
|
1931 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
|
1932 what the indentation is based on." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1933 ;; See comments before `sh-kw'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1934 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1935 (let ((prev-kw nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1936 (prev-stmt nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1937 (have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1938 depth-bol depth-eol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1939 this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1940 (state nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1941 state-bol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1942 (depth-prev-bol nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1943 start |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1944 func val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1945 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1946 prev-lines-indent |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1947 (prev-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1948 (this-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1949 (align-point nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1950 prev-line-end x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1951 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1952 ;; 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
|
1953 ;;(This function never returns just t.) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1954 (cond |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
1955 ((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
|
1956 (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
|
1957 (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
|
1958 (setq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1959 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1960 ((looking-at "\\s-*#") ; was (equal this-kw "#") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1961 (if (bobp) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1962 (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
|
1963 (setq result (list '(= sh-indent-comment))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1964 ;; 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
|
1965 ;; 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
|
1966 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1967 (setq have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1968 )) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1969 ) ;; cond |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1970 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1971 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1972 ;; Continuation lines are handled specially |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1973 (if (sh-this-is-a-continuation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1974 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1975 ;; We assume the line being continued is already |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1976 ;; properly indented... |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1977 ;; (setq prev-line-end (sh-prev-line)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1978 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1979 (setq result (list '(+ sh-indent-for-continuation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1980 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1981 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1982 (skip-chars-forward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1983 (setq this-kw (sh-get-kw))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1984 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1985 ;; 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
|
1986 ;; calculating indentation info for. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1987 (if this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1988 (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
|
1989 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1990 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1991 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1992 "this - setting align-point to %d" align-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1993 (setq result (append result val)) |
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 ;; set prev-line to continue processing remainder |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1996 ;; of this line as a previous line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1997 (setq prev-line-end (point)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2000 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2001 (setq prev-line-end (sh-prev-line 'end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2002 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2003 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2004 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2005 ;; We start off at beginning of this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2006 ;; Scan previous statements while this is <= |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2007 ;; start of previous line. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2008 (setq start (point)) ;; for debug only |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2009 (goto-char prev-line-end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2010 (setq x t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2011 (while (and x (setq x (sh-prev-thing))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2012 (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
|
2013 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2014 ((and (equal x ")") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2015 (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
|
2016 sh-st-punc)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2017 (sh-debug "Case label) here") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2018 (setq x 'case-label) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2019 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2020 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2021 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2022 (setq align-point (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2023 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2024 (skip-chars-forward "[a-z0-9]*?") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2025 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2026 ((string-match "[])}]" x) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2027 (setq x (sh-safe-forward-sexp -1)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2028 (if x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2029 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2030 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2031 (setq result (append result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2032 (list "aligned to opening paren"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2033 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2034 ((string-match "[[({]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2035 (sh-debug "Checking special thing: %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2036 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2037 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2038 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2039 (setq align-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2040 ((string-match "[\"'`]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2041 (sh-debug "Skipping back for %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2042 ;; this was oops-2 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2043 (setq x (sh-safe-forward-sexp -1))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2044 ((stringp x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2045 (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
|
2046 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2047 ;; (or (eq t (car val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2048 ;; (eq t (car (car val)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2049 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2050 ;; 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
|
2051 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2052 (unless (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2053 (forward-char -1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2054 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2055 (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
|
2056 ) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2057 ) ;; while |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2058 (sh-debug "result is %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2059 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2060 (sh-debug "No prev line!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2061 (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
|
2062 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2063 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2064 (if align-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2065 ;; 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
|
2066 (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
|
2067 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2068 (sh-debug "result is now: %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2069 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2070 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2071 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2072 (setq result (list (list t prev-line-end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2073 (setq result (list (list '= 'sh-first-lines-indent))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2074 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2075 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2076 (if (eq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2077 (setq result nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2078 (sh-debug "result is: %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2079 result |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2080 ) ;; let |
25986
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2083 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2084 (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
|
2085 "Return the variable controlling indentation for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2086 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
|
2087 indicating the problem. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2088 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
|
2089 (let ((var nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2090 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2091 (reason nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2092 sym elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2093 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2094 (setq info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2095 (if (null info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2096 (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
|
2097 (while (and info (null result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2098 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2099 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2100 ((stringp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2101 (setq reason elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2102 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2103 ((not (listp elt)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2104 (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
|
2105 ;; so it is a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2106 ((eq t (car elt)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2107 ) ;; nothing |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2108 ((symbolp (setq sym (nth 1 elt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2109 ;; 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
|
2110 ;; ignore other variables. Otherwise it is tricky to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2111 ;; "learn" the comment indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2112 (if (eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2113 (setq result var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2114 (if var |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2115 (setq result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2116 "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
|
2117 (setq var sym)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2118 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2119 (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
|
2120 (setq info (cdr info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2121 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2122 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2123 (setq result var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2124 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2125 (setq result reason)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2126 (if (null result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2127 ;; e.g. just had (t POS) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2128 (setq result "line has default indentation")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2129 result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2130 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2131 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2132 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2133 ;; Finding the previous line isn't trivial. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2134 ;; 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
|
2135 ;; 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
|
2136 ;; we are going to! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2137 ;; 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
|
2138 ;; 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
|
2139 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2140 ;; What we do: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2141 ;; - go back to previous non-empty line |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2142 ;; - 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
|
2143 ;; - 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
|
2144 (defun sh-prev-line (&optional end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2145 "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
|
2146 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
|
2147 we go to the end of the previous line and do not check for continuations." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2148 (sh-must-be-shell-mode) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2149 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2150 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2151 (forward-comment (- (point-max))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2152 (unless end (beginning-of-line)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2153 (when (and (not (bobp)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2154 (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
|
2155 sh-heredoc-face)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2156 (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
|
2157 (when p1 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2158 (goto-char p1) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2159 (if end |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2160 (end-of-line) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2161 (beginning-of-line))))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2162 (unless end |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2163 ;; 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
|
2164 ;; 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
|
2165 (while (and (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2166 (>= 0 (forward-line -1)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2167 (beginning-of-line) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2168 (skip-chars-forward " \t")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2169 (point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2170 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2171 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2172 (defun sh-prev-stmt () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2173 "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
|
2174 ;; 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
|
2175 ;; 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
|
2176 ;; 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
|
2177 ;; 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
|
2178 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2179 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2180 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2181 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2182 (found nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2183 (prev nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2184 (skip-chars-backward " \t;|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2185 (while (and (not found) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2186 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2187 going) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2188 ;; 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
|
2189 (if (sh-safe-forward-sexp -1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2190 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2191 (if (looking-at sh-special-keywords) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2192 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2193 (setq found prev)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2194 (setq prev (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2195 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2196 ;; backward-sexp failed |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2197 (if (zerop (skip-chars-backward " \t()[\]{};`'")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2198 (forward-char -1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2199 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2200 (let ((back (sh-prev-line nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2201 (if back |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2202 (goto-char back) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2203 (setq going nil))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2204 (unless found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2205 (skip-chars-backward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2206 (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
|
2207 (eq (char-before) ?\;) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2208 (looking-at "\\s-*[|&]")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2209 (setq found (point))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2210 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2211 (goto-char found)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2212 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2213 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2214 (skip-chars-forward " \t|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2215 (setq found (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2216 (if (>= (point) start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2217 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2218 (debug "We didn't move!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2219 (setq found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2220 (or found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2221 (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
|
2222 found))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2223 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2224 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2225 (defun sh-get-word () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2226 "Get a shell word skipping whitespace from point." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2227 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2228 (skip-chars-forward "\t ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2229 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2230 (while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2231 (if (looking-at "[\"'`]") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2232 (sh-safe-forward-sexp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2233 ;; (> (skip-chars-forward "^ \t\n\"'`") 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2234 (> (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
|
2235 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2236 (buffer-substring start (point)) |
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 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2239 (defun sh-prev-thing () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2240 "Return the previous thing this logical line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2241 ;; 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
|
2242 ;; 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
|
2243 ;; 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
|
2244 ;; 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
|
2245 ;; line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2246 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2247 ;; Added a kludge for ";;" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2248 ;; Possible return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2249 ;; nil - nothing |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2250 ;; a string - possibly a keyword |
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 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2253 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2254 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2255 c n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2256 min-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2257 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2258 (found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2259 (save-restriction |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2260 (narrow-to-region |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2261 (if (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2262 (setq min-point (sh-prev-line nil)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2263 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2264 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2265 (setq min-point (point)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2266 (point)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2267 (skip-chars-backward " \t;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2268 (unless (looking-at "\\s-*;;") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2269 (skip-chars-backward "^)}];\"'`({[") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2270 (setq c (char-before)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2271 (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
|
2272 (point) c start min-point) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2273 (if (< (point) min-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2274 (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
|
2275 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2276 ((looking-at "\\s-*;;") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2277 ;; (message "Found ;; !") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2278 ";;") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2279 ((or (eq c ?\n) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2280 (eq c nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2281 (eq c ?\;)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2282 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2283 ;; 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
|
2284 (skip-chars-forward " \t\n\\\\") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2285 (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
|
2286 (if (>= (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2287 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2288 (sh-debug "point: %d >= start: %d" (point) start) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2289 nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2290 (sh-get-word)) |
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 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2293 ;; c -- return a string |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2294 (char-to-string c) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2295 )) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2296 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2297 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2298 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2299 (defun sh-this-is-a-continuation () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2300 "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
|
2301 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2302 (and (zerop (forward-line -1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2303 (looking-at ".*\\\\$") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2304 (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
|
2305 nil nil nil t)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2306 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2307 (defun sh-get-kw (&optional where and-move) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2308 "Return first word of line from WHERE. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2309 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
|
2310 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2311 (if where |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2312 (goto-char where)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2313 (prog1 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2314 (buffer-substring (point) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2315 (progn (skip-chars-forward "^ \t\n;")(point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2316 (unless and-move |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2317 (goto-char start))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2318 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2319 (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
|
2320 "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
|
2321 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
|
2322 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
|
2323 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
|
2324 (let ((parse-sexp-ignore-comments t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2325 prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2326 (setq depth (or depth 1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2327 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2328 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2329 (while (and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2330 (/= 0 depth) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2331 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2332 (setq prev (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2333 (goto-char prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2334 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2335 (if (looking-at "\\\\\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2336 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2337 (forward-char 2) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2338 (skip-chars-forward " \t"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2339 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2340 ((looking-at open) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2341 (setq depth (1- depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2342 (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
|
2343 ((looking-at close) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2344 (setq depth (1+ depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2345 (sh-debug "found close - depth = %d" depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2346 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2347 )))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2348 (error nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2349 (if (eq depth 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2350 prev ;; (point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2351 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2352 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2353 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2354 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2355 (defun sh-var-value (var &optional ignore-error) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2356 "Return the value of variable VAR, interpreting symbols. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2357 It can also return t or nil. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2358 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
|
2359 IGNORE-ERROR is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2360 (let ((val (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2361 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2362 ((numberp val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2363 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2364 ((eq val t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2365 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2366 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2367 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2368 ((eq val '+) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2369 sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2370 ((eq val '-) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2371 (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2372 ((eq val '++) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2373 (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2374 ((eq val '--) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2375 (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2376 ((eq val '*) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2377 (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2378 ((eq val '/) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2379 (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2380 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2381 (if ignore-error |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2382 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2383 (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
|
2384 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2385 (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
|
2386 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2387 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2388 (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
|
2389 "Set variable VAR to VALUE. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2390 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
|
2391 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
|
2392 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2393 (no-symbol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2394 (set var value)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2395 ((= value sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2396 (set var '+)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2397 ((= value (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2398 (set var '-)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2399 ((eq value (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2400 (set var '++)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2401 ((eq value (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2402 (set var '--)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2403 ((eq value (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2404 (set var '*)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2405 ((eq value (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2406 (set var '/)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2407 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2408 (set var value))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2409 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2410 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2411 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2412 (defun sh-calculate-indent (&optional info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2413 "Return the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2414 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
|
2415 (let ((ofs 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2416 (base-value 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2417 elt a b var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2418 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2419 (setq info (sh-get-indent-info))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2420 (when info |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2421 (while info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2422 (sh-debug "info: %s ofs=%s" info ofs) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2423 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2424 (cond |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2425 ((stringp elt)) ;; do nothing? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2426 ((listp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2427 (setq a (car (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2428 (setq b (nth 1 (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2429 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2430 ((eq a t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2431 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2432 (goto-char b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2433 (setq val (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2434 (setq base-value val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2435 ((symbolp b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2436 (setq val (sh-var-value b)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2437 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2438 ((eq a '=) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2439 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2440 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2441 ;; no indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2442 ;; set info to nil so we stop immediately |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2443 (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
|
2444 ((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
|
2445 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2446 ;; The following assume the (t POS) come first! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2447 (setq ofs val base-value 0) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2448 (setq info nil)))) ;; ? stop now |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2449 ((eq a '+) (setq ofs (+ ofs val))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2450 ((eq a '-) (setq ofs (- ofs val))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2451 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2452 (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
|
2453 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2454 (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
|
2455 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2456 (error "sh-calculate-indent invalid elt %s" elt))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2457 (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
|
2458 a b val base-value ofs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2459 (setq info (cdr info))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2460 ;; return value: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2461 (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
|
2462 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2463 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2464 ((or (null base-value)(null ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2465 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2466 ((and (numberp base-value)(numberp ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2467 (sh-debug "base (%d) + ofs (%d) = %d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2468 base-value ofs (+ base-value ofs)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2469 (+ base-value ofs)) ;; return value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2470 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2471 (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
|
2472 base-value ofs) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2473 nil))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2474 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2475 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
2476 (defun sh-indent-line () |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2477 "Indent the current line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2478 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2479 (sh-must-be-shell-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2480 (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
|
2481 (pos (- (point-max) (point)))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2482 (when indent |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2483 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2484 (setq beg (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2485 (skip-chars-forward " \t") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2486 (setq shift-amt (- indent (current-column))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2487 (unless (zerop shift-amt) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2488 (delete-region beg (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2489 (indent-to indent)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2490 ;; If initial point was within line's indentation, |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2491 ;; 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
|
2492 (if (> (- (point-max) pos) (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2493 (goto-char (- (point-max) pos)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2494 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2495 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2496 (defun sh-blink (blinkpos &optional msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2497 "Move cursor momentarily to BLINKPOS and display MSG." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2498 ;; 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
|
2499 (if (numberp blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2500 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2501 (goto-char blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2502 (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2503 (sit-for blink-matching-delay)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2504 (message msg))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2505 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2506 (defun sh-show-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2507 "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
|
2508 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
|
2509 this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2510 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
|
2511 a pop up window describes this variable. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2512 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
|
2513 we are indenting relative to, if applicable." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2514 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2515 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2516 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2517 (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
|
2518 (curr-indent (current-indentation)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2519 val msg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2520 (if (stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2521 (message (setq msg var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2522 (setq val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2523 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2524 (if (eq curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2525 (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
|
2526 (setq msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2527 (if val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2528 (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
|
2529 var (symbol-value var) curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2530 (format "%s (%s) would leave line as is" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2531 var (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2532 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2533 (if (and arg var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2534 (describe-variable var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2535 (if sh-blink |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2536 (let ((info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2537 (if (and info (listp (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2538 (eq (car (car info)) t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2539 (sh-blink (nth 1 (car info)) msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2540 (message msg))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2541 (message msg)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2542 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2543 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2544 (defun sh-set-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2545 "Set the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2546 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
|
2547 for a new value for it." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2548 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2549 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2550 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2551 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2552 val val0 new-val old-val indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2553 (if (stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2554 (message (format "Cannot set indent - %s" var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2555 (setq old-val (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2556 (setq val (sh-read-variable var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2557 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2558 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2559 (set var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2560 (setq indent-val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2561 (if indent-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2562 (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
|
2563 var (symbol-value var) indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2564 (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
|
2565 var (symbol-value var))) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2566 ;; 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
|
2567 ;; 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
|
2568 ;; 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
|
2569 ;; (sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2570 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2571 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2572 (set var old-val) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2573 (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
|
2574 var old-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2575 (sit-for 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2576 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2577 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2578 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2579 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2580 (defun sh-learn-line-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2581 "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
|
2582 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2583 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
|
2584 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
|
2585 presently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2586 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2587 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
|
2588 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
|
2589 (interactive "*P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2590 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2591 ;; 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
|
2592 ;; 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
|
2593 ;; would just be confusing. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2594 (if (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2595 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2596 (looking-at "\\s-*$")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2597 (message "sh-learn-line-indent ignores empty lines.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2598 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2599 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2600 ival sval diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2601 (no-symbol arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2602 (curr-indent (current-indentation))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2603 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2604 ((stringp var) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2605 (message (format "Cannot learn line - %s" var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2606 ((eq var 'sh-indent-comment) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2607 ;; This is arbitrary... |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2608 ;; - 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
|
2609 ;; - 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
|
2610 ;; then set to t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2611 ;; - else set to curr-indent. |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2612 (setq sh-indent-comment |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2613 (if (= curr-indent 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2614 0 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2615 (let* ((sh-indent-comment t) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2616 (val2 (sh-calculate-indent info))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2617 (if (= val2 curr-indent) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2618 t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2619 curr-indent)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2620 (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
|
2621 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2622 ((numberp (setq sval (sh-var-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2623 (setq ival (sh-calculate-indent info)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2624 (setq diff (- curr-indent ival)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2625 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2626 (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
|
2627 curr-indent ival diff var sval) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2628 (setq new-val (+ sval diff)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2629 ;;; 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
|
2630 ;;; 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
|
2631 ;;; or vice-versa. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2632 ;;; (if (= 0 diff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2633 ;;; (message "No change needed!") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2634 (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
|
2635 (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
|
2636 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2637 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2638 (debug) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2639 (message "Cannot change %s" var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2640 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2641 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2642 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2643 (defun sh-mark-init (buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2644 "Initialize a BUFFER to be used by `sh-mark-line'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2645 (let ((main-buffer (current-buffer))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2646 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2647 (set-buffer (get-buffer-create buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2648 (erase-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2649 (occur-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2650 (setq occur-buffer main-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2651 ))) |
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 (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
|
2655 "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
|
2656 Buffer BUFFER is in `occur-mode'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2657 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
|
2658 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
|
2659 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
|
2660 (let ((m1 (make-marker)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2661 (main-buffer (current-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2662 start |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2663 (line "")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2664 (when point |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2665 (set-marker m1 point (current-buffer)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2666 (if add-linenum |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2667 (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
|
2668 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2669 (if (get-buffer buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2670 (set-buffer (get-buffer buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2671 (set-buffer (get-buffer-create buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2672 (occur-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2673 (setq occur-buffer main-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2674 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2675 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2676 (setq start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2677 (insert line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2678 (if occur-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2679 (setq occur-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2680 (insert message) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2681 (if point |
38079
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2682 (add-text-properties |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2683 start (point) |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2684 '(mouse-face highlight |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2685 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
|
2686 (insert "\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2687 (if point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2688 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2689 (put-text-property start (point) 'occur m1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2690 (if occur-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2691 (put-text-property occur-point (1+ occur-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2692 'occur-point t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2693 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2694 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2695 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2696 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2697 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2698 ;; Is this really worth having? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2699 (defvar sh-learned-buffer-hook nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2700 "*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
|
2701 ;; Example of how to use sh-learned-buffer-hook |
25986
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 ;; (defun what-i-learned (list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2704 ;; (let ((p list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2705 ;; (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2706 ;; (set-buffer "*scratch*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2707 ;; (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2708 ;; (insert "(setq\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2709 ;; (while p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2710 ;; (insert (format " %s %s \n" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2711 ;; (nth 0 (car p)) (nth 1 (car p)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2712 ;; (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2713 ;; (insert ")\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2714 ;; ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2715 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2716 ;; (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
|
2717 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2718 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2719 ;; 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
|
2720 ;; 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
|
2721 ;; use the whole buffer. Use narrowing if needbe. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2722 (defun sh-learn-buffer-indent (&optional arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2723 "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
|
2724 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2725 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
|
2726 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
|
2727 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
|
2728 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2729 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
|
2730 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
|
2731 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
|
2732 basic indent. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2733 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
|
2734 is set to the prefix's numerical value. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2735 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
|
2736 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
|
2737 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2738 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
|
2739 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
|
2740 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
|
2741 removed in the future. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2742 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2743 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
|
2744 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2745 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2746 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2747 (goto-char (point-min)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2748 (let ((learned-var-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2749 (out-buffer "*indent*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2750 (num-diffs 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2751 last-pos |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2752 previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2753 (max 17) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2754 vec |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2755 msg |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2756 (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
|
2757 (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
|
2758 initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2759 (specified-basic-offset (and arg (numberp arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2760 (> arg 0))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2761 (linenum 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2762 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2763 (setq vec (make-vector max 0)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2764 (sh-mark-init out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2765 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2766 (if specified-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2767 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2768 (setq sh-basic-offset arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2769 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2770 (format "Using specified sh-basic-offset of %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2771 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2772 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2773 (format "Initial value of sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2774 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2775 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2776 (while (< (point) (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2777 (setq linenum (1+ linenum)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2778 ;; (if (zerop (% linenum 10)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2779 (message "line %d" linenum) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2780 ;; ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2781 (unless (looking-at "\\s-*$") ;; ignore empty lines! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2782 (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
|
2783 (info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2784 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2785 sval ival diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2786 (curr-indent (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2787 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2788 ((null var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2789 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2790 ((stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2791 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2792 ((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
|
2793 ;; 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
|
2794 (setq ival (sh-calculate-indent)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2795 (setq diff (- curr-indent ival)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2796 (setq new-val (+ sval diff)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2797 (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
|
2798 (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
|
2799 (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
|
2800 (progn |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2801 ;; 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
|
2802 (unless (eq (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2803 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2804 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2805 (format "Variable %s was set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2806 var (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2807 (point) out-buffer t t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2808 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2809 (format " but was previously set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2810 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2811 (nth 2 previous-set-info) out-buffer t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2812 (setq num-diffs (1+ num-diffs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2813 ;; (delete previous-set-info learned-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2814 (setcdr previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2815 (list (symbol-value var) (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2816 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2817 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2818 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2819 (append (list (list var (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2820 (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2821 learned-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2822 (if (numberp new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2823 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2824 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2825 "This line's indent value: %d" new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2826 (if (< new-val 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2827 (setq new-val (- new-val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2828 (if (< new-val max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2829 (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
|
2830 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2831 ((eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2832 (unless (= curr-indent (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2833 ;; this is not the default indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2834 (setq comments-always-default nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2835 (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
|
2836 (or (eq comment-col curr-indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2837 (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
|
2838 (setq comment-col curr-indent)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2839 )) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2840 (t |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2841 (sh-debug "Cannot learn this line!!!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2842 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2843 (sh-debug |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2844 "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
|
2845 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2846 (forward-line 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2847 ) ;; while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2848 (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2849 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2850 (setq msg (format |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2851 "comment-col = %s comments-always-default = %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2852 comment-col comments-always-default)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2853 ;; (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2854 (sh-mark-line msg nil out-buffer))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2855 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2856 ((eq comment-col 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2857 (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
|
2858 (comments-always-default |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2859 (setq msg "\nComments follow default indentation.\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2860 (setq comment-col t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2861 ((numberp comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2862 (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
|
2863 (t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2864 (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
|
2865 (setq comment-col nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2866 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2867 (sh-debug msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2868 (sh-mark-line msg nil out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2869 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2870 (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
|
2871 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2872 (setq suggested (sh-guess-basic-offset vec)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2873 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2874 (if (and suggested (not specified-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2875 (let ((new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2876 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2877 ;; 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
|
2878 ((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
|
2879 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2880 ;; 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
|
2881 (sh-learn-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2882 (if (numberp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2883 suggested |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2884 (if (= (length suggested) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2885 (car suggested)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2886 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2887 nil)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2888 (if new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2889 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2890 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2891 (append (list (list 'sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2892 (setq sh-basic-offset new-value) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2893 (point-max))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2894 learned-var-list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2895 ;; 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
|
2896 ;; it will appear in the "Learned variable settings". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2897 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2898 (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
|
2899 nil out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2900 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2901 (if (listp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2902 (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
|
2903 (mapconcat 'int-to-string suggested " ")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2904 (format "Suggested sh-basic-offset: %d" suggested)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2905 nil out-buffer)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2906 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2907 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2908 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2909 (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
|
2910 learned-var-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2911 (setq sh-indent-comment comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2912 (let ((name (buffer-name)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2913 (lines (if (and (eq (point-min) 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2914 (eq (point-max) (1+ (buffer-size)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2915 "" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2916 (format "lines %d to %d of " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2917 (1+ (count-lines 1 (point-min))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2918 (1+ (count-lines 1 (point-max)))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2919 ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2920 (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
|
2921 (if arg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2922 ;; Set learned variables to symbolic rather than numeric |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2923 ;; values where possible. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2924 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2925 (let ((var (car learned-var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2926 (val (nth 1 learned-var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2927 (when (and (not (eq var 'sh-basic-offset)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2928 (numberp val)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2929 (sh-set-var-value var val))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2930 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2931 (let ((var (car learned-var))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2932 (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
|
2933 (nth 2 learned-var) out-buffer))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2934 (save-excursion |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2935 (set-buffer out-buffer) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2936 (goto-char (point-min)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2937 (insert |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2938 (format "Indentation values for buffer %s.\n" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2939 (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
|
2940 num-diffs |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2941 (if (= num-diffs 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2942 " has" "s have") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2943 (if (zerop num-diffs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2944 "." ":")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2945 ))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2946 ;; Are abnormal hooks considered bad form? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2947 (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
|
2948 (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
|
2949 (pop-to-buffer out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2950 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2951 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2952 (defun sh-guess-basic-offset (vec) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2953 "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
|
2954 This is experimental, heuristic and arbitrary! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2955 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
|
2956 `sh-learn-buffer-indent'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2957 Return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2958 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
|
2959 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
|
2960 reasonable choices |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2961 nil - we couldn't find a reasonable one." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2962 (let* ((max (1- (length vec))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2963 (i 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2964 (totals (make-vector max 0)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2965 (return nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2966 j) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2967 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2968 (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
|
2969 (setq j (/ i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2970 (if (zerop (% i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2971 (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
|
2972 (if (< (* i 2) max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2973 (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
|
2974 (setq i (1+ i))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2975 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2976 (let ((x nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2977 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2978 tot sum p) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2979 (setq i 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2980 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2981 (if (/= (aref totals i) 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2982 (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
|
2983 (setq i (1+ i))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2984 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2985 (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
|
2986 (setq tot (apply '+ (append totals nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2987 (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
|
2988 vec totals tot)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2989 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2990 ((zerop (length x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2991 (message "no values!")) ;; we return nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2992 ((= (length x) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2993 (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
|
2994 (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
|
2995 ((> (cdr (car x)) (/ tot 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2996 ;; 1st is > 50% |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2997 (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
|
2998 (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
|
2999 ((>= (cdr (car x)) (* 2 (cdr (car (cdr x))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3000 ;; 1st is >= 2 * 2nd |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3001 (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
|
3002 (setq result (car (car x)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3003 ((>= (+ (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
|
3004 ;; 1st & 2nd together >= 50% - return a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3005 (setq p x sum 0 result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3006 (while (and p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3007 (<= (setq sum (+ sum (cdr (car p)))) (/ tot 2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3008 (setq result (append result (list (car (car p))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3009 (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3010 (message "Possible choices for sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3011 (mapconcat 'int-to-string result " "))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3012 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3013 (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
|
3014 (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3015 ;; result is nil here |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3016 )) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
3017 result))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3018 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3019 ;; ======================================================================== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3020 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3021 ;; 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
|
3022 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3023 (defvar sh-styles-alist nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3024 "A list of all known shell indentation styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3025 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3026 (defun sh-name-style (name &optional confirm-overwrite) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3027 "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
|
3028 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
|
3029 overwritten if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3030 - - 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
|
3031 - - 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
|
3032 ;; (interactive "sName for this style: ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3033 (interactive |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3034 (list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3035 (read-from-minibuffer "Name for this style? " ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3036 (not current-prefix-arg))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3037 (let ((slist (cons name |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3038 (mapcar (lambda (var) (cons var (symbol-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3039 sh-var-list))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3040 (style (assoc name sh-styles-alist))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3041 (if style |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3042 (if (and confirm-overwrite |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3043 (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
|
3044 (message "Not changing style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3045 (message "Updating style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3046 (setcdr style (cdr slist))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3047 (message "Creating new style %s" name) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3048 (push slist sh-styles-alist)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3049 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3050 (defun sh-load-style (name) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3051 "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
|
3052 (interactive (list (completing-read |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3053 "Which style to use for this buffer? " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3054 sh-styles-alist nil t))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3055 (let ((sl (assoc name sh-styles-alist))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3056 (if (null sl) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3057 (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
|
3058 (dolist (var (cdr sl)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3059 (set (car var) (cdr var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3060 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3061 (defun sh-save-styles-to-buffer (buff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3062 "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
|
3063 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
|
3064 (interactive (list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3065 (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
|
3066 (with-current-buffer (get-buffer-create buff) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3067 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3068 (insert "\n") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3069 (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
|
3070 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3071 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3072 |
6463 | 3073 ;; statement syntax-commands for various shells |
3074 | |
3075 ;; You are welcome to add the syntax or even completely new statements as | |
3076 ;; appropriate for your favorite shell. | |
3077 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3078 (define-skeleton sh-case |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3079 "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
|
3080 (csh "expression: " |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3081 "switch( " str " )" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3082 > "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
|
3083 > _ \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3084 "breaksw" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3085 ( "other pattern, %s: " |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3086 < "case " str ?: \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3087 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3088 "breaksw" \n) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3089 < "default:" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3090 > _ \n |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3091 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3092 < < "endsw" \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3093 (es) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3094 (rc "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3095 > "switch( " str " ) {" \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3096 > "case " (read-string "pattern: ") \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3097 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3098 ( "other pattern, %s: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3099 "case " str > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3100 > _ \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3101 "case *" > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3102 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3103 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3104 ?} > \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3105 (sh "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3106 > "case " str " in" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3107 > (read-string "pattern: ") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3108 (propertize ")" 'syntax-table sh-st-punc) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3109 \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 ";;" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3112 ( "other pattern, %s: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3113 > 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
|
3114 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3115 ";;" \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3116 > "*" (propertize ")" 'syntax-table sh-st-punc) \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3117 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3118 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3119 "esac" > \n)) |
6463 | 3120 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3121 (define-skeleton sh-for |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3122 "Insert a for loop. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3123 (csh eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3124 1 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3125 2 "foreach " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3126 4 " ( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3127 6 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3128 15 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3129 16 "end") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3130 (es eval sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3131 4 " = ") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3132 (rc eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3133 2 "for( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3134 6 " ) {" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3135 15 ?} ) |
6463 | 3136 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3137 > "for " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3138 > _ | ?$ & (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
|
3139 "done" > \n)) |
6463 | 3140 |
3141 | |
3142 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3143 (define-skeleton sh-indexed-loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3144 "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
|
3145 (bash eval identity posix) |
6463 | 3146 (csh "Index variable: " |
3147 "@ " str " = 1" \n | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3148 "while( $" str " <= " (read-string "upper limit: ") " )" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3149 > _ ?$ str \n |
6463 | 3150 "@ " str "++" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3151 < "end" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3152 (es eval sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3153 4 " =") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3154 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3155 > "integer " str "=0" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3156 > "while (( ( " str " += 1 ) <= " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3157 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3158 " )); do" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3159 > _ ?$ (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
|
3160 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3161 (posix "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3162 > str "=1" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3163 "while [ $" str " -le " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3164 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3165 " ]; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3166 > _ ?$ str \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3167 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
|
3168 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3169 (rc "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3170 > "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
|
3171 (read-string "upper limit: ") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3172 "; i++ ) print i }'`}) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3173 > _ ?$ (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
|
3174 ?} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3175 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3176 > "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
|
3177 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3178 "; i++ ) print i }'`; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3179 > _ ?$ (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
|
3180 "done" > \n)) |
6463 | 3181 |
3182 | |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3183 (defun sh-shell-initialize-variables () |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3184 "Scan the buffer for variable assignments. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3185 Add these variables to `sh-shell-variables'." |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3186 (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
|
3187 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3188 (goto-char (point-min)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3189 (setq sh-shell-variables-initialized t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3190 (while (search-forward "=" nil t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3191 (sh-assignment 0))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3192 (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
|
3193 (buffer-name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3194 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3195 (defvar sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3196 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3197 (defun sh-add-completer (string predicate code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3198 "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
|
3199 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
|
3200 so it takes three arguments: |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3201 STRING, the current buffer contents; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3202 PREDICATE, the predicate for filtering possible matches; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3203 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
|
3204 CODE can be nil, t or `lambda'. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3205 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
|
3206 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
|
3207 `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
|
3208 (let ((sh-shell-variables |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3209 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3210 (set-buffer sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3211 (or sh-shell-variables-initialized |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3212 (sh-shell-initialize-variables)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3213 (nconc (mapcar (lambda (var) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3214 (let ((name |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3215 (substring var 0 (string-match "=" var)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3216 (cons name name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3217 process-environment) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3218 sh-shell-variables)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3219 (cond ((null code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3220 (try-completion string sh-shell-variables predicate)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3221 ((eq code t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3222 (all-completions string sh-shell-variables predicate)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3223 ((eq code 'lambda) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3224 (assoc string sh-shell-variables))))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3225 |
6463 | 3226 (defun sh-add (var delta) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3227 "Insert an addition of VAR and prefix DELTA for Bourne (type) shell." |
6463 | 3228 (interactive |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3229 (let ((sh-add-buffer (current-buffer))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3230 (list (completing-read "Variable: " 'sh-add-completer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3231 (prefix-numeric-value current-prefix-arg)))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3232 (insert (sh-feature '((bash . "$[ ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3233 (ksh88 . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3234 (posix . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3235 (rc . "`{expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3236 (sh . "`expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3237 (zsh . "$[ "))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3238 (sh-remember-variable var) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3239 (if (< delta 0) " - " " + ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3240 (number-to-string (abs delta)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3241 (sh-feature '((bash . " ]") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3242 (ksh88 . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3243 (posix . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3244 (rc . "}") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3245 (sh . "`") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3246 (zsh . " ]"))))) |
6463 | 3247 |
3248 | |
3249 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3250 (define-skeleton sh-function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3251 "Insert a function definition. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3252 (bash eval sh-modify ksh88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3253 3 "() {") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3254 (ksh88 "name: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3255 "function " str " {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3256 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3257 < "}" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3258 (rc eval sh-modify ksh88 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3259 1 "fn ") |
6463 | 3260 (sh () |
3261 "() {" \n | |
3262 > _ \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3263 < "}" \n)) |
6463 | 3264 |
3265 | |
3266 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3267 (define-skeleton sh-if |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3268 "Insert an if statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3269 (csh "condition: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3270 "if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3271 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3272 ( "other condition, %s: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3273 < "else if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3274 > _ \n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3275 < "else" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3276 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3277 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3278 < "endif" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3279 (es "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3280 > "if { " str " } {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3281 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3282 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3283 "} { " str " } {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3284 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3285 "} {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3286 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3287 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3288 ?} > \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3289 (rc "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3290 > "if( " str " ) {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3291 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3292 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3293 "} else if( " str " ) {" > \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 "} else {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3296 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3297 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3298 ?} > \n) |
6463 | 3299 (sh "condition: " |
12863 | 3300 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3301 > "if " str "; then" \n |
6463 | 3302 > _ \n |
3303 ( "other condition, %s: " | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3304 > "elif " str "; then" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3305 > \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3306 "else" > \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3307 > \n |
6463 | 3308 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3309 "fi" > \n)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3310 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3311 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3312 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3313 (define-skeleton sh-repeat |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3314 "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
|
3315 (es nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3316 > "forever {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3317 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3318 ?} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3319 (zsh "factor: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3320 > "repeat " str "; do" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3321 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3322 "done" > \n)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3323 |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3324 ;;;(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
|
3325 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3326 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3327 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3328 (define-skeleton sh-select |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3329 "Insert a select statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3330 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3331 > "select " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3332 > ?$ str \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3333 "done" > \n) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
3334 (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
|
3335 ;;;(put 'sh-select 'menu-enable '(sh-feature sh-select)) |
6463 | 3336 |
3337 | |
3338 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3339 (define-skeleton sh-tmp-file |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3340 "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
|
3341 (bash eval identity ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3342 (csh (file-name-nondirectory (buffer-file-name)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3343 "set tmp = /tmp/" str ".$$" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3344 "onintr exit" \n _ |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3345 (and (goto-char (point-max)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3346 (not (bolp)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3347 ?\n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3348 "exit:\n" |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3349 "rm $tmp* >&/dev/null" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3350 (es (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3351 > "local( signals = $signals sighup sigint; tmp = /tmp/" str |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3352 ".$pid ) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3353 > "catch @ e {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3354 > "rm $tmp^* >[2]/dev/null" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3355 "throw $e" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3356 "} {" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3357 _ \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3358 ?} > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3359 ?} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3360 (ksh88 eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3361 7 "EXIT") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3362 (rc (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3363 > "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
|
3364 "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
|
3365 (sh (file-name-nondirectory (buffer-file-name)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3366 > "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
|
3367 "trap \"rm $TMP* 2>/dev/null\" " ?0 \n)) |
6463 | 3368 |
3369 | |
3370 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3371 (define-skeleton sh-until |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3372 "Insert an until loop. See `sh-feature'." |
6463 | 3373 (sh "condition: " |
12863 | 3374 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3375 > "until " str "; do" \n |
6463 | 3376 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3377 "done" > \n)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3378 ;;;(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
|
3379 |
6463 | 3380 |
3381 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3382 (define-skeleton sh-while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3383 "Insert a while loop. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3384 (csh eval sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3385 2 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3386 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3387 5 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3388 10 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3389 11 "end") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3390 (es eval sh-modify sh |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3391 3 "while { " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3392 5 " } {" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3393 10 ?} ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3394 (rc eval sh-modify sh |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3395 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3396 5 " ) {" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3397 10 ?} ) |
6463 | 3398 (sh "condition: " |
12863 | 3399 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3400 > "while " str "; do" \n |
6463 | 3401 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3402 "done" > \n)) |
6463 | 3403 |
3404 | |
3405 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3406 (define-skeleton sh-while-getopts |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3407 "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
|
3408 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
|
3409 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
|
3410 (bash eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3411 18 "${0##*/}") |
12863 | 3412 (csh nil |
3413 "while( 1 )" \n | |
3414 > "switch( \"$1\" )" \n | |
3415 '(setq input '("- x" . 2)) | |
3416 > > | |
3417 ( "option, %s: " | |
3418 < "case " '(eval str) | |
3419 '(if (string-match " +" str) | |
3420 (setq v1 (substring str (match-end 0)) | |
3421 str (substring str 0 (match-beginning 0))) | |
3422 (setq v1 nil)) | |
3423 str ?: \n | |
3424 > "set " v1 & " = $2" | -4 & _ \n | |
3425 (if v1 "shift") & \n | |
3426 "breaksw" \n) | |
3427 < "case --:" \n | |
3428 > "shift" \n | |
3429 < "default:" \n | |
3430 > "break" \n | |
3431 resume: | |
3432 < < "endsw" \n | |
3433 "shift" \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3434 < "end" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3435 (ksh88 eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3436 16 "print" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3437 18 "${0##*/}" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3438 36 "OPTIND-1") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3439 (posix eval sh-modify sh |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3440 18 "$(basename $0)") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3441 (sh "optstring: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3442 > "while getopts :" str " OPT; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3443 > "case $OPT in" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3444 '(setq v1 (append (vconcat str) nil)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3445 ( (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
|
3446 (if (eq (nth 1 v1) ?:) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3447 (setq v1 (nthcdr 2 v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3448 v2 "\"$OPTARG\"") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3449 (setq v1 (cdr v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3450 v2 nil))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3451 > 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
|
3452 > _ v2 \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3453 > ";;" \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3454 > "*" (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
|
3455 > "echo" " \"usage: " "`basename $0`" |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3456 " [+-" '(setq v1 (point)) str |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3457 '(save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3458 (while (search-backward ":" v1 t) |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3459 (replace-match " ARG] [+-" t t))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3460 (if (eq (preceding-char) ?-) -5) |
29844
093c79809c9e
(sh-while-getopts): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
29422
diff
changeset
|
3461 (if (and (sequencep v1) (length v1)) "] " "} ") |
28923
dcafe3c9cd6c
(sh-while-getopts) <sh>: Handle case that
Gerd Moellmann <gerd@gnu.org>
parents:
26967
diff
changeset
|
3462 "[--] ARGS...\"" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3463 "exit 2" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3464 "esac" > |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3465 \n "done" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3466 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3467 "shift " (sh-add "OPTIND" -1) \n)) |
6463 | 3468 |
3469 | |
3470 | |
3471 (defun sh-assignment (arg) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3472 "Remember preceding identifier for future completion and do self-insert." |
6463 | 3473 (interactive "p") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3474 (self-insert-command arg) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3475 (if (<= arg 1) |
6463 | 3476 (sh-remember-variable |
3477 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3478 (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
|
3479 (prog1 (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3480 (beginning-of-line 1)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3481 t) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
3482 (match-string 1)))))) |
6463 | 3483 |
3484 | |
3485 | |
3486 (defun sh-maybe-here-document (arg) | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3487 "Insert self. Without prefix, following unquoted `<' inserts here document. |
6463 | 3488 The document is bounded by `sh-here-document-word'." |
3489 (interactive "*P") | |
3490 (self-insert-command (prefix-numeric-value arg)) | |
3491 (or arg | |
3492 (not (eq (char-after (- (point) 2)) last-command-char)) | |
3493 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3494 (backward-char 2) |
6463 | 3495 (sh-quoted-p)) |
3496 (progn | |
3497 (insert sh-here-document-word) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3498 (or (eolp) (looking-at "[ \t]") (insert ? )) |
6463 | 3499 (end-of-line 1) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3500 (while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3501 (sh-quoted-p) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3502 (end-of-line 2)) |
6463 | 3503 (newline) |
3504 (save-excursion (insert ?\n sh-here-document-word))))) | |
3505 | |
3506 | |
3507 ;; various other commands | |
3508 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3509 (autoload 'comint-dynamic-complete "comint" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3510 "Dynamically perform completion at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3511 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3512 (autoload 'shell-dynamic-complete-command "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3513 "Dynamically complete the command at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3514 |
6463 | 3515 (autoload 'comint-dynamic-complete-filename "comint" |
3516 "Dynamically complete the filename at point." t) | |
3517 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3518 (autoload 'shell-dynamic-complete-environment-variable "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3519 "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
|
3520 |
6463 | 3521 |
3522 | |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3523 (defun sh-newline-and-indent () |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3524 "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
|
3525 (interactive "*") |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3526 (indent-to (prog1 (current-indentation) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3527 (delete-region (point) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3528 (progn |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3529 (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
|
3530 (if (sh-quoted-p) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3531 (forward-char))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3532 (point))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3533 (newline)))) |
6463 | 3534 |
3535 (defun sh-beginning-of-command () | |
3536 "Move point to successive beginnings of commands." | |
3537 (interactive) | |
3538 (if (re-search-backward sh-beginning-of-command nil t) | |
3539 (goto-char (match-beginning 2)))) | |
3540 | |
3541 (defun sh-end-of-command () | |
3542 "Move point to successive ends of commands." | |
3543 (interactive) | |
3544 (if (re-search-forward sh-end-of-command nil t) | |
3545 (goto-char (match-end 1)))) | |
3546 | |
13707 | 3547 (provide 'sh-script) |
18382 | 3548 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3549 ;;; sh-script.el ends here |