Mercurial > emacs
annotate lisp/progmodes/sh-script.el @ 79511:76e454b2427c
*** empty log message ***
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Fri, 30 Nov 2007 08:20:08 +0000 |
parents | c1ec1c8a8d2e |
children | f0e20a14ba94 b98604865ea0 |
rev | line source |
---|---|
6463 | 1 ;;; sh-script.el --- shell-script editing commands for Emacs |
14169 | 2 |
74547 | 3 ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2001, 2002, |
75347 | 4 ;; 2003, 2004, 2005, 2006, 2007 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 | |
78234
c1ec1c8a8d2e
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
78197
diff
changeset
|
15 ;; the Free Software Foundation; either version 3, or (at your option) |
6463 | 16 ;; any later version. |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
14169 | 24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
26 ;; Boston, MA 02110-1301, USA. | |
6463 | 27 |
28 ;;; Commentary: | |
29 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
30 ;; Major mode for editing shell scripts. Bourne, C and rc shells as well |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
31 ;; as various derivatives are supported and easily derived from. Structured |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
32 ;; statements can be inserted with one command or abbrev. Completion is |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
33 ;; available for filenames, variables known from the script, the shell and |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
34 ;; the environment as well as commands. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
35 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
36 ;;; Known Bugs: |
6463 | 37 |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
38 ;; - In Bourne the keyword `in' is not anchored to case, for, select ... |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
39 ;; - Variables in `"' strings aren't fontified because there's no way of |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
40 ;; syntactically distinguishing those from `'' strings. |
8257
bbf6304598d9
"Comment out" autoload cookies.
Richard M. Stallman <rms@gnu.org>
parents:
8121
diff
changeset
|
41 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
42 ;; Indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
43 ;; =========== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
44 ;; Indentation for rc and es modes is very limited, but for Bourne shells |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
45 ;; and its derivatives it is quite customizable. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
46 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
47 ;; The following description applies to sh and derived shells (bash, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
48 ;; zsh, ...). |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
49 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
50 ;; There are various customization variables which allow tailoring to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
51 ;; a wide variety of styles. Most of these variables are named |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
52 ;; sh-indent-for-XXX and sh-indent-after-XXX. For example. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
53 ;; sh-indent-after-if controls the indenting of a line following |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
54 ;; an if statement, and sh-indent-for-fi controls the indentation |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
55 ;; of the line containing the fi. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
56 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
57 ;; You can set each to a numeric value, but it is often more convenient |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
58 ;; to a symbol such as `+' which uses the value of variable `sh-basic-offset'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
59 ;; By changing this one variable you can increase or decrease how much |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
60 ;; indentation there is. Valid symbols: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
61 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
62 ;; + Indent right by sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
63 ;; - Indent left by sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
64 ;; ++ Indent right twice sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
65 ;; -- Indent left twice sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
66 ;; * Indent right half sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
67 ;; / Indent left half sh-basic-offset. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
68 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
69 ;; There are 4 commands to help set the indentation variables: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
70 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
71 ;; `sh-show-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
72 ;; This shows what variable controls the indentation of the current |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
73 ;; line and its value. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
74 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
75 ;; `sh-set-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
76 ;; This allows you to set the value of the variable controlling the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
77 ;; current line's indentation. You can enter a number or one of a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
78 ;; number of special symbols to denote the value of sh-basic-offset, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
79 ;; or its negative, or half it, or twice it, etc. If you've used |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
80 ;; cc-mode this should be familiar. If you forget which symbols are |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
81 ;; valid simply press C-h at the prompt. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
82 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
83 ;; `sh-learn-line-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
84 ;; Simply make the line look the way you want it, then invoke this |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
85 ;; command. It will set the variable to the value that makes the line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
86 ;; indent like that. If called with a prefix argument then it will set |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
87 ;; the value to one of the symbols if applicable. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
88 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
89 ;; `sh-learn-buffer-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
90 ;; This is the deluxe function! It "learns" the whole buffer (use |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
91 ;; narrowing if you want it to process only part). It outputs to a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
92 ;; buffer *indent* any conflicts it finds, and all the variables it has |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
93 ;; learned. This buffer is a sort of Occur mode buffer, allowing you to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
94 ;; easily find where something was set. It is popped to automatically |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
95 ;; if there are any conflicts found or if `sh-popup-occur-buffer' is |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
96 ;; non-nil. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
97 ;; `sh-indent-comment' will be set if all comments follow the same |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
98 ;; pattern; if they don't it will be set to nil. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
99 ;; Whether `sh-basic-offset' is set is determined by variable |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
100 ;; `sh-learn-basic-offset'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
101 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
102 ;; Unfortunately, `sh-learn-buffer-indent' can take a long time to run |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
103 ;; (e.g. if there are large case statements). Perhaps it does not make |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
104 ;; sense to run it on large buffers: if lots of lines have different |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
105 ;; indentation styles it will produce a lot of diagnostics in the |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
106 ;; *indent* buffer; if there is a consistent style then running |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
107 ;; `sh-learn-buffer-indent' on a small region of the buffer should |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
108 ;; suffice. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
109 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
110 ;; Saving indentation values |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
111 ;; ------------------------- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
112 ;; After you've learned the values in a buffer, how to you remember |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
113 ;; them? Originally I had hoped that `sh-learn-buffer-indent' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
114 ;; would make this unnecessary; simply learn the values when you visit |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
115 ;; the buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
116 ;; You can do this automatically like this: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
117 ;; (add-hook 'sh-set-shell-hook 'sh-learn-buffer-indent) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
118 ;; |
47264
05606bafb8f5
(sh-indent-for-fi, sh-indent-for-done): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents:
45900
diff
changeset
|
119 ;; However... `sh-learn-buffer-indent' is extremely slow, |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
120 ;; especially on large-ish buffer. Also, if there are conflicts the |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
121 ;; "last one wins" which may not produce the desired setting. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
122 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
123 ;; So...There is a minimal way of being able to save indentation values and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
124 ;; to reload them in another buffer or at another point in time. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
125 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
126 ;; Use `sh-name-style' to give a name to the indentation settings of |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
127 ;; the current buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
128 ;; Use `sh-load-style' to load indentation settings for the current |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
129 ;; buffer from a specific style. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
130 ;; Use `sh-save-styles-to-buffer' to write all the styles to a buffer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
131 ;; in lisp code. You can then store it in a file and later use |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
132 ;; `load-file' to load it. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
133 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
134 ;; Indentation variables - buffer local or global? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
135 ;; ---------------------------------------------- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
136 ;; I think that often having them buffer-local makes sense, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
137 ;; especially if one is using `sh-learn-buffer-indent'. However, if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
138 ;; a user sets values using customization, these changes won't appear |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
139 ;; to work if the variables are already local! |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
140 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
141 ;; To get round this, there is a variable `sh-make-vars-local' and 2 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
142 ;; functions: `sh-make-vars-local' and `sh-reset-indent-vars-to-global-values'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
143 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
144 ;; If `sh-make-vars-local' is non-nil, then these variables become |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
145 ;; buffer local when the mode is established. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
146 ;; If this is nil, then the variables are global. At any time you |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
147 ;; can make them local with the command `sh-make-vars-local'. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
148 ;; Conversely, to update with the global values you can use the |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
149 ;; command `sh-reset-indent-vars-to-global-values'. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
150 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
151 ;; This may be awkward, but the intent is to cover all cases. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
152 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
153 ;; Awkward things, pitfalls |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
154 ;; ------------------------ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
155 ;; Indentation for a sh script is complicated for a number of reasons: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
156 ;; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
157 ;; 1. You can't format by simply looking at symbols, you need to look |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
158 ;; at keywords. [This is not the case for rc and es shells.] |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
159 ;; 2. The character ")" is used both as a matched pair "(" ... ")" and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
160 ;; as a stand-alone symbol (in a case alternative). This makes |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
161 ;; things quite tricky! |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
162 ;; 3. Here-documents in a script should be treated "as is", and when |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
163 ;; they terminate we want to revert to the indentation of the line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
164 ;; containing the "<<" symbol. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
165 ;; 4. A line may be continued using the "\". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
166 ;; 5. The character "#" (outside a string) normally starts a comment, |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
167 ;; but it doesn't in the sequence "$#"! |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
168 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
169 ;; To try and address points 2 3 and 5 I used a feature that cperl mode |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
170 ;; uses, that of a text's syntax property. This, however, has 2 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
171 ;; disadvantages: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
172 ;; 1. We need to scan the buffer to find which ")" symbols belong to a |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
173 ;; case alternative, to find any here documents, and handle "$#". |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
174 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
175 ;; Bugs |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
176 ;; ---- |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
177 ;; - 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
|
178 ;; independently, rather than saving state information. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
179 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
180 ;; - `sh-learn-buffer-indent' is extremely slow. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
181 ;; |
78197
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
182 ;; - "case $x in y) echo ;; esac)" the last ) is mis-identified as being |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
183 ;; part of a case-pattern. You need to add a semi-colon after "esac" to |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
184 ;; coerce sh-script into doing the right thing. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
185 ;; |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
186 ;; - "echo $z in ps | head)" the last ) is mis-identified as being part of |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
187 ;; a case-pattern. You need to put the "in" between quotes to coerce |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
188 ;; sh-script into doing the right thing. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
189 ;; |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
190 ;; - A line starting with "}>foo" is not indented like "} >foo". |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
191 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
192 ;; Richard Sharman <rsharman@pobox.com> June 1999. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
193 |
6463 | 194 ;;; Code: |
195 | |
196 ;; page 1: variables and settings | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
197 ;; page 2: indentation stuff |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
198 ;; page 3: mode-command and utility functions |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
199 ;; page 4: statement syntax-commands for various shells |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
200 ;; page 5: various other commands |
6463 | 201 |
32503 | 202 (eval-when-compile |
203 (require 'skeleton) | |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
204 (require 'cl) |
32503 | 205 (require 'comint)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
206 (require 'executable) |
6463 | 207 |
65239
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
208 (defvar font-lock-comment-face) |
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
209 (defvar font-lock-set-defaults) |
a1c74fb41c2b
(font-lock-comment-face, font-lock-set-defaults, font-lock-string-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
64971
diff
changeset
|
210 (defvar font-lock-string-face) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
211 |
17068
d1391b21626f
(sh-mode-hook, sh-set-shell-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
16839
diff
changeset
|
212 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
213 (defgroup sh nil |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
214 "Shell programming utilities." |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
215 :group 'unix |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
216 :group 'languages) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
217 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
218 (defgroup sh-script nil |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
219 "Shell script mode." |
66963
a11fdee52c05
Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents:
66269
diff
changeset
|
220 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
221 :group 'sh |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
222 :prefix "sh-") |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
223 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
224 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
225 (defcustom sh-ancestor-alist |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
226 '((ash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
227 (bash . jsh) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
228 (bash2 . jsh) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
229 (dtksh . ksh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
230 (es . rc) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
231 (itcsh . tcsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
232 (jcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
233 (jsh . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
234 (ksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
235 (ksh88 . jsh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
236 (oash . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
237 (pdksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
238 (posix . sh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
239 (tcsh . csh) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
240 (wksh . ksh88) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
241 (wsh . sh) |
23501
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
242 (zsh . ksh88) |
f12ae4499ae0
(sh-mode): Handle .spec and .mspec files.
Richard M. Stallman <rms@gnu.org>
parents:
23341
diff
changeset
|
243 (rpm . sh)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
244 "*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
|
245 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
|
246 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
|
247 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
248 csh C Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
249 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
|
250 tcsh Turbo C Shell |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
251 itcsh ? Turbo C Shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
252 rc Plan 9 Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
253 es Extensible Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
254 sh Bourne Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
255 ash ? Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
256 jsh Bourne Shell with Job Control |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
257 bash GNU Bourne Again Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
258 ksh88 Korn Shell '88 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
259 ksh Korn Shell '93 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
260 dtksh CDE Desktop Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
261 pdksh Public Domain Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
262 wksh Window Korn Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
263 zsh Z Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
264 oash SCO OA (curses) Shell |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
265 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
|
266 wsh ? Shell" |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
267 :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
|
268 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
269 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
270 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
271 (defcustom sh-alias-alist |
47732
3712c799f805
(sh-alias-alist): Use append instead of nconc.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47595
diff
changeset
|
272 (append (if (eq system-type 'gnu/linux) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
273 '((csh . tcsh) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
274 (ksh . pdksh))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
275 ;; for the time being |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
276 '((ksh . ksh88) |
29109
0e45e6e90467
(sh-ancestor-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
28923
diff
changeset
|
277 (bash2 . bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
278 (sh5 . sh))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
279 "*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
|
280 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
|
281 shell it really is." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
282 :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
|
283 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
284 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
285 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
286 (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
|
287 (or |
16839
daaa2c5bb40a
(sh-shell-file): Downcase and remove extension on shells in NT.
Richard M. Stallman <rms@gnu.org>
parents:
16810
diff
changeset
|
288 ;; 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
|
289 ;; 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
|
290 ;; 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
|
291 (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
|
292 (let* ((shell (getenv "SHELL")) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
293 (shell-base |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
294 (and shell (file-name-nondirectory shell)))) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
295 ;; 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
|
296 ;; so use the default instead. |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
297 (if (or (null shell) |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
298 (member (downcase shell-base) |
21980
e73c0672d7b3
(sh-shell-file): Add cmdproxy to MS shells.
Richard M. Stallman <rms@gnu.org>
parents:
21925
diff
changeset
|
299 '("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
|
300 "cmdproxy.exe"))) |
21925
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
301 "/bin/sh" |
3e498c36ccce
(sh-shell-file): If $SHELL evaluates to
Eli Zaretskii <eliz@gnu.org>
parents:
21669
diff
changeset
|
302 (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
|
303 (getenv "SHELL") |
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
304 "/bin/sh") |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
305 "*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
|
306 :type 'string |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
307 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
308 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
309 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
310 (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
|
311 ;; 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
|
312 '((bash) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
313 (csh . "-f") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
314 (pdksh) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
315 ;; 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
|
316 (ksh88) |
14886
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
317 ;; -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
|
318 (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
|
319 ;; 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
|
320 ;; 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
|
321 (wksh) |
96423e733197
(sh-shell-arg): Add no options for bash, ksh, or wksh.
Richard M. Stallman <rms@gnu.org>
parents:
14876
diff
changeset
|
322 ;; -f means don't run .zshrc. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
323 (zsh . "-f")) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
324 "*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
|
325 :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
|
326 (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
|
327 (string :tag "Arguments") |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
328 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
329 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
330 |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
331 (defcustom sh-imenu-generic-expression |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
332 `((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
333 . ((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
|
334 "*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
|
335 See `sh-feature' and `imenu-generic-expression'." |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
336 :type '(alist :key-type (symbol :tag "Shell") |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
337 :value-type (alist :key-type (choice :tag "Title" |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
338 string |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
339 (const :tag "None" nil)) |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
340 :value-type |
f4733aab37df
(sh-imenu-generic-expression): Fix doc,
Dave Love <fx@gnu.org>
parents:
33430
diff
changeset
|
341 (repeat :tag "Regexp, index..." sexp))) |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
20900
diff
changeset
|
342 :group 'sh-script |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
343 :version "20.4") |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
344 |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
345 (defvar sh-shell-variables nil |
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
346 "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
|
347 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
|
348 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
|
349 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
|
350 |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
351 (defvar sh-shell-variables-initialized nil |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
352 "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
|
353 |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
354 (defun sh-canonicalize-shell (shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
355 "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
|
356 (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
|
357 (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
|
358 (or (symbolp shell) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
359 (setq shell (intern shell))) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
360 (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
|
361 shell)) |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
362 |
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
363 (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
|
364 "The shell being programmed. This is set by \\[sh-set-shell].") |
70144
60a94b1ec37e
(sh-shell): Mark as safe.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
69149
diff
changeset
|
365 ;;;###autoload(put 'sh-shell 'safe-local-variable 'symbolp) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
366 |
56688
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
367 (defvar sh-mode-abbrev-table nil) |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
368 |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
369 (define-abbrev-table 'sh-mode-abbrev-table ()) |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
370 |
6eee795cb9eb
(sh-set-shell): Use sh-mode-abbrev-table.
Richard M. Stallman <rms@gnu.org>
parents:
55119
diff
changeset
|
371 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
372 ;; 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
|
373 ;; 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
|
374 ;;(defvar sh-abbrevs |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
375 ;; '((csh sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
376 ;; "switch" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
377 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
378 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
379 ;; (es sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
380 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
381 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
382 ;; (ksh88 sh-abbrevs sh |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
383 ;; "select" 'sh-select) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
384 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
385 ;; (rc sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
386 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
387 ;; "function" 'sh-function) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
388 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
389 ;; (sh sh-abbrevs shell |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
390 ;; "case" 'sh-case |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
391 ;; "function" 'sh-function |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
392 ;; "until" 'sh-until |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
393 ;; "getopts" 'sh-while-getopts) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
394 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
395 ;; ;; 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
|
396 ;; (shell "for" sh-for |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
397 ;; "loop" sh-indexed-loop |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
398 ;; "if" sh-if |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
399 ;; "tmpfile" sh-tmp-file |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
400 ;; "while" sh-while) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
401 |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
402 ;; (zsh sh-abbrevs ksh88 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
403 ;; "repeat" 'sh-repeat)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
404 ;; "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
|
405 ;;;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
|
406 ;;;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
|
407 |
6463 | 408 |
409 | |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
410 (defun sh-mode-syntax-table (table &rest list) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
411 "Copy TABLE and set syntax for successive CHARs according to strings S." |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
412 (setq table (copy-syntax-table table)) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
413 (while list |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
414 (modify-syntax-entry (pop list) (pop list) table)) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
415 table) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
416 |
52682
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
417 (defvar sh-mode-syntax-table nil |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
418 "The syntax table to use for Shell-Script mode. |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
419 This is buffer-local in every such buffer.") |
a7331078ec76
(sh-mode-syntax-table): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
52619
diff
changeset
|
420 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
421 (defvar sh-mode-default-syntax-table |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
422 (sh-mode-syntax-table () |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
423 ?\# "<" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
424 ?\n ">#" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
425 ?\" "\"\"" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
426 ?\' "\"'" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
427 ?\` "\"`" |
62242
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
428 ;; ?$ might also have a ". p" syntax. Both "'" and ". p" seem |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
429 ;; to work fine. This is needed so that dabbrev-expand |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
430 ;; $VARNAME works. |
cce9501aab6e
(sh-mode-default-syntax-table): Set the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
62214
diff
changeset
|
431 ?$ "'" |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
432 ?! "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
433 ?% "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
434 ?: "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
435 ?. "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
436 ?^ "_" |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
437 ?~ "_" |
51970
be96dd81138a
(sh-mode-syntax-table): Change syntax of ?, to "_".
Andreas Schwab <schwab@suse.de>
parents:
51727
diff
changeset
|
438 ?, "_" |
57159
e00b0d40b4bc
(sh-mode-default-syntax-table): Set syntax of = to "." (punctuation).
Richard M. Stallman <rms@gnu.org>
parents:
56688
diff
changeset
|
439 ?= "." |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
440 ?< "." |
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
441 ?> ".") |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
442 "Default syntax table for shell mode.") |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
443 |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
444 (defvar sh-mode-syntax-table-input |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
445 '((sh . nil)) |
41349
8dd8d78194a1
(sh-mode-syntax-table): Function restored.
Richard M. Stallman <rms@gnu.org>
parents:
41348
diff
changeset
|
446 "Syntax-table used in Shell-Script mode. See `sh-feature'.") |
6463 | 447 |
448 (defvar sh-mode-map | |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
449 (let ((map (make-sparse-keymap)) |
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
450 (menu-map (make-sparse-keymap "Insert"))) |
6463 | 451 (define-key map "\C-c(" 'sh-function) |
452 (define-key map "\C-c\C-w" 'sh-while) | |
453 (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
|
454 (define-key map "\C-c\C-t" 'sh-tmp-file) |
6463 | 455 (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
|
456 (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
|
457 (define-key map "\C-c\C-o" 'sh-while-getopts) |
6463 | 458 (define-key map "\C-c\C-l" 'sh-indexed-loop) |
459 (define-key map "\C-c\C-i" 'sh-if) | |
460 (define-key map "\C-c\C-f" 'sh-for) | |
461 (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
|
462 (define-key map "\C-c?" 'sh-show-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
463 (define-key map "\C-c=" 'sh-set-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
464 (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
|
465 (define-key map "\C-c>" 'sh-learn-buffer-indent) |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
466 (define-key map "\C-c\C-\\" 'sh-backslash-region) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
467 |
6463 | 468 (define-key map "=" 'sh-assignment) |
469 (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
|
470 (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
|
471 (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
|
472 (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
|
473 (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
|
474 (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
|
475 (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
|
476 (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
|
477 (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
|
478 (define-key map "\"" 'skeleton-pair-insert-maybe) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
479 |
49176
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
480 (define-key map [remap complete-tag] 'comint-dynamic-complete) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
481 (define-key map [remap newline-and-indent] 'sh-newline-and-indent) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
482 (define-key map [remap delete-backward-char] |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
483 'backward-delete-char-untabify) |
6463 | 484 (define-key map "\C-c:" 'sh-set-shell) |
49176
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
485 (define-key map [remap backward-sentence] 'sh-beginning-of-command) |
56966d83f3a5
(sh-mode-map): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents:
49132
diff
changeset
|
486 (define-key map [remap forward-sentence] 'sh-end-of-command) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
487 (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
|
488 (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
|
489 (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
|
490 (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
|
491 (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
|
492 (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
|
493 (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
|
494 (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
|
495 (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
|
496 (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
|
497 (define-key menu-map [sh-case] '("Case Statement" . sh-case)) |
6463 | 498 map) |
499 "Keymap used in Shell-Script mode.") | |
500 | |
65384
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
501 (defvar sh-skeleton-pair-default-alist '((?( _ ?)) (?\)) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
502 (?[ ?\s _ ?\s ?]) (?\]) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
503 (?{ _ ?}) (?\})) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
504 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.") |
6463 | 505 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
506 (defcustom sh-dynamic-complete-functions |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
507 '(shell-dynamic-complete-environment-variable |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
508 shell-dynamic-complete-command |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
509 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
|
510 "*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
|
511 :type '(repeat function) |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
512 :group 'sh-script) |
6463 | 513 |
514 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
515 (defcustom sh-require-final-newline |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
516 '((csh . t) |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
517 (pdksh . t)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
518 "*Value of `require-final-newline' in Shell-Script mode buffers. |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
519 \(SHELL . t) means use the value of `mode-require-final-newline' for SHELL. |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
520 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
521 :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
|
522 (choice (const :tag "require" t) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
523 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
524 :group 'sh-script) |
6463 | 525 |
526 | |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
527 (defcustom sh-assignment-regexp |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
528 '((csh . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
529 ;; actually spaces are only supported in let/(( ... )) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
530 (ksh88 . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
531 (rc . "\\<\\([a-zA-Z0-9_*]+\\)[ \t]*=") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
532 (sh . "\\<\\([a-zA-Z0-9_]+\\)=")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
533 "*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
|
534 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
|
535 sign. See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
536 :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
|
537 (choice regexp |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
538 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
539 :group 'sh-script) |
6463 | 540 |
541 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
542 (defcustom sh-indentation 4 |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
543 "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
|
544 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
545 :group 'sh-script) |
6463 | 546 |
547 | |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
548 (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
|
549 "*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
|
550 :type 'integer |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
551 :group 'sh-script) |
6463 | 552 |
553 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
554 (defvar sh-header-marker nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
555 "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
|
556 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
|
557 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
558 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
559 (defcustom sh-beginning-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
560 "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~a-zA-Z0-9:]\\)" |
6463 | 561 "*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
|
562 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
|
563 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
564 :group 'sh-script) |
6463 | 565 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
566 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
567 (defcustom sh-end-of-command |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
568 "\\([/~a-zA-Z0-9:]\\)[ \t]*\\([;#)}`|&]\\|$\\)" |
6463 | 569 "*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
|
570 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
|
571 :type 'regexp |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
572 :group 'sh-script) |
6463 | 573 |
574 | |
575 | |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
576 (defcustom sh-here-document-word "EOF" |
51265
575ad90ca254
(sh-here-document-word): Document new treatment of leading "-".
Glenn Morris <rgm@gnu.org>
parents:
49743
diff
changeset
|
577 "Word to delimit here documents. |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
578 If the first character of this string is \"-\", this is taken as |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
579 part of the redirection operator, rather than part of the |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
580 word (that is, \"<<-\" instead of \"<<\"). This is a feature |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
581 used by some shells (for example Bash) to indicate that leading |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
582 tabs inside the here document should be ignored. In this case, |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
583 Emacs indents the initial body and end of the here document with |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
584 tabs, to the same level as the start (note that apart from this |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
585 there is no support for indentation of here documents). This |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
586 will only work correctly if `sh-basic-offset' is a multiple of |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
587 `tab-width'. |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
588 |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
589 Any quote characters or leading whitespace in the word are |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
590 removed when closing the here document." |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
591 :type 'string |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
592 :group 'sh-script) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
593 |
6463 | 594 |
12863 | 595 (defvar sh-test |
596 '((sh "[ ]" . 3) | |
597 (ksh88 "[[ ]]" . 4)) | |
598 "Initial input in Bourne if, while and until skeletons. See `sh-feature'.") | |
599 | |
6463 | 600 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
601 ;; 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
|
602 ;; 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
|
603 (defcustom sh-builtins |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
604 '((bash sh-append posix |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
605 "." "alias" "bg" "bind" "builtin" "caller" "compgen" "complete" |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
606 "declare" "dirs" "disown" "enable" "fc" "fg" "help" "history" |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
607 "jobs" "kill" "let" "local" "popd" "printf" "pushd" "shopt" |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
608 "source" "suspend" "typeset" "unalias") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
609 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
610 ;; The next entry is only used for defining the others |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
611 (bourne sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
612 "eval" "export" "getopts" "newgrp" "pwd" "read" "readonly" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
613 "times" "ulimit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
614 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
615 (csh sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
616 "alias" "chdir" "glob" "history" "limit" "nice" "nohup" "rehash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
617 "setenv" "source" "time" "unalias" "unhash") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
618 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
619 (dtksh sh-append wksh) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
620 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
621 (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
|
622 "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
|
623 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
624 (jsh sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
625 "bg" "fg" "jobs" "kill" "stop" "suspend") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
626 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
627 (jcsh sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
628 "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
|
629 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
630 (ksh88 sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
631 "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
|
632 "typeset" "unalias" "whence") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
633 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
634 (oash sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
635 "checkwin" "dateline" "error" "form" "menu" "newwin" "oadeinit" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
636 "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
|
637 "wclear" "werase" "win" "wmclose" "wmmessage" "wmopen" "wmove" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
638 "wmtitle" "wrefresh") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
639 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
640 (pdksh sh-append ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
641 "bind") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
642 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
643 (posix sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
644 "command") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
645 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
646 (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
|
647 "whatis") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
648 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
649 (sh sh-append bourne |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
650 "hash" "test" "type") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
651 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
652 ;; 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
|
653 (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
|
654 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
655 (wksh sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
656 "Xt[A-Z][A-Za-z]*") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
657 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
658 (zsh sh-append ksh88 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
659 "autoload" "bindkey" "builtin" "chdir" "compctl" "declare" "dirs" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
660 "disable" "disown" "echotc" "enable" "functions" "getln" "hash" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
661 "history" "integer" "limit" "local" "log" "popd" "pushd" "r" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
662 "readonly" "rehash" "sched" "setopt" "source" "suspend" "true" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
663 "ttyctl" "type" "unfunction" "unhash" "unlimit" "unsetopt" "vared" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
664 "which")) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
665 "*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
|
666 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
|
667 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
|
668 :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
|
669 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
670 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
671 :group 'sh-script) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
672 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
673 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
674 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
675 (defcustom sh-leading-keywords |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
676 '((bash sh-append sh |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
677 "time") |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
678 |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
679 (csh "else") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
680 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
681 (es "true" "unwind-protect" "whatis") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
682 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
683 (rc "else") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
684 |
55119
3a424bb24301
(sh-leading-keywords) <sh>: Add "!".
Andreas Schwab <schwab@suse.de>
parents:
54282
diff
changeset
|
685 (sh "!" "do" "elif" "else" "if" "then" "trap" "type" "until" "while")) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
686 "*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
|
687 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
|
688 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
|
689 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
|
690 :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
|
691 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
692 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
693 :group 'sh-script) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
694 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
695 |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
696 (defcustom sh-other-keywords |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
697 '((bash sh-append bourne |
51515
6d06c54cda5d
Fix bug in "Options Loop" skeleton for ksh. Add newlines to a few skeletons,
Juanma Barranquero <lekktu@gmail.com>
parents:
51379
diff
changeset
|
698 "bye" "logout" "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
699 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
700 ;; The next entry is only used for defining the others |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
701 (bourne sh-append sh |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
702 "function") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
703 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
704 (csh sh-append shell |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
705 "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
706 "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
|
707 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
708 (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
|
709 "return" "throw" "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
710 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
711 (ksh88 sh-append bourne |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
712 "select") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
713 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
714 (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
|
715 "while") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
716 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
717 (sh sh-append shell |
16810
20dc495230a0
(sh-shell-file): On MSDOS, collapse $SHELL to lower
Richard M. Stallman <rms@gnu.org>
parents:
16552
diff
changeset
|
718 "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
|
719 |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
720 ;; 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
|
721 (shell "break" "case" "continue" "exec" "exit") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
722 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
723 (zsh sh-append bash |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
724 "select")) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
725 "*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
|
726 See `sh-feature'." |
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
727 :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
|
728 (choice (repeat string) |
54158
43e09e943479
(sh-shell-arg, sh-require-final-newline, sh-assignment-regexp, sh-builtins)
Eli Zaretskii <eliz@gnu.org>
parents:
53419
diff
changeset
|
729 (sexp :format "Evaluate: %v")))) |
17407
ae0ba78d6c07
Add defgroup's; change use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17356
diff
changeset
|
730 :group 'sh-script) |
6463 | 731 |
732 | |
733 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
734 (defvar sh-variables |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
735 '((bash sh-append sh |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
736 "allow_null_glob_expansion" "auto_resume" "BASH" "BASH_ENV" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
737 "BASH_VERSINFO" "BASH_VERSION" "cdable_vars" "COMP_CWORD" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
738 "COMP_LINE" "COMP_POINT" "COMP_WORDS" "COMPREPLY" "DIRSTACK" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
739 "ENV" "EUID" "FCEDIT" "FIGNORE" "FUNCNAME" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
740 "glob_dot_filenames" "GLOBIGNORE" "GROUPS" "histchars" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
741 "HISTCMD" "HISTCONTROL" "HISTFILE" "HISTFILESIZE" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
742 "HISTIGNORE" "history_control" "HISTSIZE" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
743 "hostname_completion_file" "HOSTFILE" "HOSTTYPE" "IGNOREEOF" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
744 "ignoreeof" "INPUTRC" "LINENO" "MACHTYPE" "MAIL_WARNING" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
745 "noclobber" "nolinks" "notify" "no_exit_on_failed_exec" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
746 "NO_PROMPT_VARS" "OLDPWD" "OPTERR" "OSTYPE" "PIPESTATUS" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
747 "PPID" "POSIXLY_CORRECT" "PROMPT_COMMAND" "PS3" "PS4" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
748 "pushd_silent" "PWD" "RANDOM" "REPLY" "SECONDS" "SHELLOPTS" |
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
749 "SHLVL" "TIMEFORMAT" "TMOUT" "UID") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
750 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
751 (csh sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
752 "argv" "cdpath" "child" "echo" "histchars" "history" "home" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
753 "ignoreeof" "mail" "noclobber" "noglob" "nonomatch" "path" "prompt" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
754 "shell" "status" "time" "verbose") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
755 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
756 (es sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
757 "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
|
758 "pid" "prompt" "signals") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
759 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
760 (jcsh sh-append csh |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
761 "notify") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
762 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
763 (ksh88 sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
764 "ENV" "ERRNO" "FCEDIT" "FPATH" "HISTFILE" "HISTSIZE" "LINENO" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
765 "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
|
766 "TMOUT") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
767 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
768 (oash sh-append sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
769 "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
|
770 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
771 (rc sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
772 "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
|
773 "prompt" "status") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
774 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
775 (sh sh-append shell |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
776 "CDPATH" "IFS" "OPTARG" "OPTIND" "PS1" "PS2") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
777 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
778 ;; 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
|
779 (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
|
780 "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
|
781 "LINES" "LOGNAME" "MAIL" "MAILCHECK" "MAILPATH" "PAGER" "PATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
782 "SHELL" "TERM" "TERMCAP" "TERMINFO" "VISUAL") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
783 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
784 (tcsh sh-append csh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
785 "addsuffix" "ampm" "autocorrect" "autoexpand" "autolist" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
786 "autologout" "chase_symlinks" "correct" "dextract" "edit" "el" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
787 "fignore" "gid" "histlit" "HOST" "HOSTTYPE" "HPATH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
788 "ignore_symlinks" "listjobs" "listlinks" "listmax" "matchbeep" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
789 "nobeep" "NOREBIND" "oid" "printexitvalue" "prompt2" "prompt3" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
790 "pushdsilent" "pushdtohome" "recexact" "recognize_only_executables" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
791 "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
|
792 "tperiod" "tty" "uid" "version" "visiblebell" "watch" "who" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
793 "wordchars") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
794 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
795 (zsh sh-append ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
796 "BAUD" "bindcmds" "cdpath" "DIRSTACKSIZE" "fignore" "FIGNORE" "fpath" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
797 "HISTCHARS" "hostcmds" "hosts" "HOSTS" "LISTMAX" "LITHISTSIZE" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
798 "LOGCHECK" "mailpath" "manpath" "NULLCMD" "optcmds" "path" "POSTEDIT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
799 "prompt" "PROMPT" "PROMPT2" "PROMPT3" "PROMPT4" "psvar" "PSVAR" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
800 "READNULLCMD" "REPORTTIME" "RPROMPT" "RPS1" "SAVEHIST" "SPROMPT" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
801 "STTY" "TIMEFMT" "TMOUT" "TMPPREFIX" "varcmds" "watch" "WATCH" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
802 "WATCHFMT" "WORDCHARS" "ZDOTDIR")) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
803 "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
|
804 See `sh-feature'.") |
6463 | 805 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
806 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
807 ;; Font-Lock support |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
808 |
63455
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
809 (defface sh-heredoc |
61394
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
810 '((((min-colors 88) (class color) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
811 (background dark)) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
812 (:foreground "yellow1" :weight bold)) |
31aa9a390538
* mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents:
61316
diff
changeset
|
813 (((class color) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
814 (background dark)) |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
815 (:foreground "yellow" :weight bold)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
816 (((class color) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
817 (background light)) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
818 (:foreground "tan" )) |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
819 (t |
42456
8a4077ab418c
(various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents:
42075
diff
changeset
|
820 (:weight bold))) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
821 "Face to show a here-document" |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
822 :group 'sh-indentation) |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
823 |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
824 ;; These colours are probably icky. It's just a placeholder though. |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
825 (defface sh-quoted-exec |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
826 '((((class color) (background dark)) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
827 (:foreground "salmon")) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
828 (((class color) (background light)) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
829 (:foreground "magenta")) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
830 (t |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
831 (:weight bold))) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
832 "Face to show quoted execs like ``" |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
833 :group 'sh-indentation) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
834 |
63455
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
835 ;; backward-compatibility alias |
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
836 (put 'sh-heredoc-face 'face-alias 'sh-heredoc) |
1589bde025e5
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-414
Miles Bader <miles@gnu.org>
parents:
62772
diff
changeset
|
837 (defvar sh-heredoc-face 'sh-heredoc) |
6463 | 838 |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
839 (defface sh-escaped-newline '((t :inherit font-lock-string-face)) |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
840 "Face used for (non-escaped) backslash at end of a line in Shell-script mode." |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
841 :group 'sh-script |
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
842 :version "22.1") |
6463 | 843 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
844 (defvar sh-font-lock-keywords-var |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
845 '((csh sh-append shell |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
846 ("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1 |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
847 font-lock-variable-name-face)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
848 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
849 (es sh-append executable-font-lock-keywords |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
850 ("\\$#?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\)" 1 |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
851 font-lock-variable-name-face)) |
6463 | 852 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
853 (rc sh-append es) |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
854 (bash sh-append shell ("\\$(\\(\\sw+\\)" (1 'sh-quoted-exec t) )) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
855 (sh sh-append shell |
20900
bab0b53038ee
(sh-font-lock-keywords): Fontify sh-style function names in declarations.
Richard M. Stallman <rms@gnu.org>
parents:
20886
diff
changeset
|
856 ;; Variable names. |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
857 ("\\$\\({#?\\)?\\([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
|
858 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
|
859 ;; Function names. |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
860 ("^\\(\\sw+\\)[ \t]*(" 1 font-lock-function-name-face) |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
861 ("\\<\\(function\\)\\>[ \t]*\\(\\sw+\\)?" |
62080
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
862 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t)) |
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
863 ("\\(?:^\\s *\\|[[();&|]\\s *\\|\\(?:\\s +-[ao]\\|if\\|else\\|then\\|while\\|do\\)\\s +\\)\\(!\\)" |
2922c607db05
(sh-font-lock-keywords): Use font-lock-negation-char-face.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
61534
diff
changeset
|
864 1 font-lock-negation-char-face)) |
6463 | 865 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
866 ;; The next entry is only used for defining the others |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
867 (shell |
52411
9db479d16349
(sh-font-lock-keywords): Use something other than
Glenn Morris <rgm@gnu.org>
parents:
52401
diff
changeset
|
868 ;; Using font-lock-string-face here confuses sh-get-indent-info. |
61316
283f977b41fb
(sh-builtins) <bash>: Add `caller'.
Glenn Morris <rgm@gnu.org>
parents:
60917
diff
changeset
|
869 ("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'sh-escaped-newline) |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
870 ("\\\\[^A-Za-z0-9]" 0 font-lock-string-face) |
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
871 ("\\${?\\([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
|
872 font-lock-variable-name-face)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
873 (rpm sh-append rpm2 |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
874 ("%{?\\(\\sw+\\)" 1 font-lock-keyword-face)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
875 (rpm2 sh-append shell |
52619
50338995d37f
(sh-builtins): Add bash `shopt' builtin.
Glenn Morris <rgm@gnu.org>
parents:
52571
diff
changeset
|
876 ("^\\(\\sw+\\):" 1 font-lock-variable-name-face))) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
877 "Default expressions to highlight in Shell Script modes. See `sh-feature'.") |
6463 | 878 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
879 (defvar sh-font-lock-keywords-var-1 |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
880 '((sh "[ \t]in\\>")) |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
881 "Subdued level highlighting for Shell Script modes.") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
882 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
883 (defvar sh-font-lock-keywords-var-2 () |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
884 "Gaudy level highlighting for Shell Script modes.") |
6463 | 885 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
886 ;; 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
|
887 ;; 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
|
888 (defconst sh-st-punc (string-to-syntax ".")) |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
889 (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
|
890 (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
|
891 |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
892 (defconst sh-escaped-line-re |
78197
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
893 ;; Should match until the real end-of-continued-line, but if that is not |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
894 ;; possible (because we bump into EOB or the search bound), then we should |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
895 ;; match until the search bound. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
896 "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*") |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
897 |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
898 (defconst sh-here-doc-open-re |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
899 (concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\)+\\)" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
900 sh-escaped-line-re "\\(\n\\)")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
901 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
902 (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
|
903 (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
|
904 (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
|
905 (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
|
906 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
907 (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
|
908 "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
|
909 If non-nil INDENTED indicates that the EOF was indented." |
40336
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
910 (let* ((eof-re (if eof (regexp-quote eof) "")) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
911 ;; A rough regexp that should find the opening <<EOF back. |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
912 (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
913 ;; Use \s| to cheaply check it's an open-heredoc. |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
914 eof-re "['\"]?\\([ \t|;&)<>]" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
915 sh-escaped-line-re |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
916 "\\)?\\s|")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
917 ;; A regexp that will find other EOFs. |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
918 (ere (concat "^" (if indented "[ \t]*") eof-re "\n")) |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
919 (start (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
920 (goto-char bol) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
921 (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
|
922 ;; 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
|
923 ;; 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
|
924 (cond |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
925 ((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
|
926 (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
|
927 (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
|
928 ;; 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
|
929 (save-excursion |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
930 (goto-char start) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
931 (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
|
932 (while |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
933 (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
934 (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
|
935 (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
|
936 (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
|
937 (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
|
938 ;; 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
|
939 (= (point) start))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
940 sh-here-doc-syntax) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
941 ((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
|
942 ;; 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
|
943 ;; 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
|
944 (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
|
945 (setq sh-here-doc-re |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
946 (concat sh-here-doc-open-re "\\|^\\([ \t]*\\)" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
947 (regexp-opt sh-here-doc-markers t) "\\(\n\\)")) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
948 nil)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
949 |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
950 (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
|
951 "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
|
952 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
|
953 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
|
954 INDENTED is non-nil if the here document's content (and the EOF mark) can |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
955 be indented (i.e. a <<- was used rather than just <<). |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
956 Point is at the beginning of the next line." |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
957 (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
|
958 (sh-in-comment-or-string start)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
959 ;; 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
|
960 ;; 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
|
961 (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
|
962 (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
|
963 (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
|
964 (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
|
965 (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
|
966 (regexp-opt sh-here-doc-markers t) "\\(\n\\)")))) |
66255
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
967 (let ((ppss (save-excursion (syntax-ppss (1- (point)))))) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
968 (if (nth 4 ppss) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
969 ;; The \n not only starts the heredoc but also closes a comment. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
970 ;; Let's close the comment just before the \n. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
971 (put-text-property (1- (point)) (point) 'syntax-table '(12))) ;">" |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
972 (if (or (nth 5 ppss) (> (count-lines start (point)) 1)) |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
973 ;; If the sh-escaped-line-re part of sh-here-doc-re has matched |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
974 ;; several lines, make sure we refontify them together. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
975 ;; Furthermore, if (nth 5 ppss) is non-nil (i.e. the \n is |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
976 ;; escaped), it means the right \n is actually further down. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
977 ;; Don't bother fixing it now, but place a multiline property so |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
978 ;; that when jit-lock-context-* refontifies the rest of the |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
979 ;; buffer, it also refontifies the current line with it. |
9cf3996bb877
(sh-escaped-line-re): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66027
diff
changeset
|
980 (put-text-property start (point) 'font-lock-multiline t))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
981 sh-here-doc-syntax)) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
982 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
983 (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
|
984 "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
|
985 ;; 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
|
986 (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
|
987 |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
988 (defun sh-quoted-subshell (limit) |
72044
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
989 "Search for a subshell embedded in a string. |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
990 Find all the unescaped \" characters within said subshell, remembering that |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
991 subshells can nest." |
71949
e430f5632d15
(sh-quoted-subshell): Don't match escaped `. Use `cond', push', and `dolist'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71182
diff
changeset
|
992 ;; FIXME: This can (and often does) match multiple lines, yet it makes no |
e430f5632d15
(sh-quoted-subshell): Don't match escaped `. Use `cond', push', and `dolist'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71182
diff
changeset
|
993 ;; effort to handle multiline cases correctly, so it ends up being |
e430f5632d15
(sh-quoted-subshell): Don't match escaped `. Use `cond', push', and `dolist'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71182
diff
changeset
|
994 ;; rather flakey. |
72316
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
995 (when (and (re-search-forward "\"\\(?:\\(?:.\\|\n\\)*?[^\\]\\(?:\\\\\\\\\\)*\\)??\\(\\$(\\|`\\)" limit t) |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
996 ;; Make sure the " we matched is an opening quote. |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
997 (eq ?\" (nth 3 (syntax-ppss)))) |
72044
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
998 ;; bingo we have a $( or a ` inside a "" |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
999 (let ((char (char-after (point))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1000 (continue t) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1001 (pos (point)) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1002 (data nil) ;; value to put into match-data (and return) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1003 (last nil) ;; last char seen |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1004 (bq (equal (match-string 1) "`")) ;; ` state flip-flop |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1005 (seen nil) ;; list of important positions |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1006 (nest 1)) ;; subshell nesting level |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1007 (while (and continue char (<= pos limit)) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1008 ;; unescaped " inside a $( ... ) construct. |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1009 ;; state machine time... |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1010 ;; \ => ignore next char; |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1011 ;; ` => increase or decrease nesting level based on bq flag |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1012 ;; ) [where nesting > 0] => decrease nesting |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1013 ;; ( [where nesting > 0] => increase nesting |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1014 ;; ( [preceeded by $ ] => increase nesting |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1015 ;; " [nesting <= 0 ] => terminate, we're done. |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1016 ;; " [nesting > 0 ] => remember this, it's not a proper " |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1017 ;; FIXME: don't count parens that appear within quotes. |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1018 (cond |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1019 ((eq ?\\ last) nil) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1020 ((eq ?\` char) (setq nest (+ nest (if bq -1 1)) bq (not bq))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1021 ((and (> nest 0) (eq ?\) char)) (setq nest (1- nest))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1022 ((and (eq ?$ last) (eq ?\( char)) (setq nest (1+ nest))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1023 ((and (> nest 0) (eq ?\( char)) (setq nest (1+ nest))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1024 ((eq char ?\") |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1025 (if (>= 0 nest) (setq continue nil) (push pos seen)))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1026 ;;(message "POS: %d [%d]" pos nest) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1027 (setq last char |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1028 pos (1+ pos) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1029 char (char-after pos)) ) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1030 ;; FIXME: why construct a costly match data to pass to |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1031 ;; sh-apply-quoted-subshell rather than apply the highlight |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1032 ;; directly here? -- Stef |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1033 (when seen |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1034 ;;(message "SEEN: %S" seen) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1035 (setq data (list (current-buffer))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1036 (dolist(P seen) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1037 (setq data (cons P (cons (1+ P) data)))) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1038 (store-match-data data)) |
3dc0557bba5f
(sh-quoted-subshell): Further fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72015
diff
changeset
|
1039 data) )) |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1040 |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1041 (defun sh-is-quoted-p (pos) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1042 (and (eq (char-before pos) ?\\) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1043 (not (sh-is-quoted-p (1- pos))))) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1044 |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1045 (defun sh-font-lock-paren (start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1046 (save-excursion |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1047 (goto-char start) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1048 ;; Skip through all patterns |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1049 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1050 (progn |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1051 (forward-comment (- (point-max))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1052 ;; Skip through one pattern |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1053 (while |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1054 (or (/= 0 (skip-syntax-backward "w_")) |
54282
d11df80991d8
(sh-font-lock-paren): Add @ in case patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54158
diff
changeset
|
1055 (/= 0 (skip-chars-backward "?[]*@/\\")) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1056 (and (sh-is-quoted-p (1- (point))) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
1057 (goto-char (- (point) 2))) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1058 (when (memq (char-before) '(?\" ?\')) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1059 (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
|
1060 (error nil))))) |
67069
962ab95567f0
(sh-font-lock-paren): Handle continued lines in patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66963
diff
changeset
|
1061 (while (progn |
962ab95567f0
(sh-font-lock-paren): Handle continued lines in patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66963
diff
changeset
|
1062 (forward-comment (- (point-max))) |
962ab95567f0
(sh-font-lock-paren): Handle continued lines in patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66963
diff
changeset
|
1063 ;; Maybe we've bumped into an escaped newline. |
962ab95567f0
(sh-font-lock-paren): Handle continued lines in patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66963
diff
changeset
|
1064 (sh-is-quoted-p (point))) |
962ab95567f0
(sh-font-lock-paren): Handle continued lines in patterns.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66963
diff
changeset
|
1065 (backward-char 1)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1066 (when (eq (char-before) ?|) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1067 (backward-char 1) t))) |
78197
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1068 ;; FIXME: ";; esac )" is a case that looks like a case-pattern but it's |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1069 ;; really just a close paren after a case statement. I.e. if we skipped |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1070 ;; over `esac' just now, we're not looking at a case-pattern. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1071 (when (progn (backward-char 2) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1072 (if (> start (line-end-position)) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1073 (put-text-property (point) (1+ start) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1074 'font-lock-multiline t)) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1075 ;; FIXME: The `in' may just be a random argument to |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1076 ;; a normal command rather than the real `in' keyword. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1077 ;; I.e. we should look back to try and find the |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1078 ;; corresponding `case'. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1079 (looking-at ";;\\|in")) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1080 sh-st-punc))) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1081 |
78197
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1082 (defun sh-font-lock-backslash-quote () |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1083 (if (eq (save-excursion (nth 3 (syntax-ppss (match-beginning 0)))) ?\') |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1084 ;; In a '...' the backslash is not escaping. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1085 sh-st-punc |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1086 nil)) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1087 |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1088 (defun sh-font-lock-flush-syntax-ppss-cache (limit) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1089 ;; This should probably be a standard function provided by font-lock.el |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1090 ;; (or syntax.el). |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1091 (syntax-ppss-flush-cache (point)) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1092 (goto-char limit) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1093 nil) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1094 |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1095 (defun sh-apply-quoted-subshell () |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1096 "Apply the `sh-st-punc' syntax to all the matches in `match-data'. |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1097 This is used to flag quote characters in subshell constructs inside strings |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1098 \(which should therefore not be treated as normal quote characters\)" |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1099 (let ((m (match-data)) a b) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1100 (while m |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1101 (setq a (car m) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1102 b (cadr m) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1103 m (cddr m)) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1104 (put-text-property a b 'syntax-table sh-st-punc))) sh-st-punc) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1105 |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1106 (defconst sh-font-lock-syntactic-keywords |
36631
d5345decc9a4
(sh-st-symbol): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35180
diff
changeset
|
1107 ;; 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
|
1108 ;; 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
|
1109 ;; 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
|
1110 ;; 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
|
1111 `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) |
67160
23ef368e1c3d
(sh-font-lock-syntactic-keywords): \ doesn't escape single quotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67069
diff
changeset
|
1112 ;; In a '...' the backslash is not escaping. |
78197
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1113 ("\\(\\\\\\)'" (1 (sh-font-lock-backslash-quote))) |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1114 ;; The previous rule uses syntax-ppss, but the subsequent rules may |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1115 ;; change the syntax, so we have to tell syntax-ppss that the states it |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1116 ;; has just computed will need to be recomputed. |
f942a5cc0de4
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
77593
diff
changeset
|
1117 (sh-font-lock-flush-syntax-ppss-cache) |
66269
5ab4a52a31ac
(sh-font-lock-syntactic-keywords): Make $@ and $? into sexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66255
diff
changeset
|
1118 ;; Make sure $@ and @? are correctly recognized as sexps. |
5ab4a52a31ac
(sh-font-lock-syntactic-keywords): Make $@ and $? into sexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66255
diff
changeset
|
1119 ("\\$\\([?@]\\)" 1 ,sh-st-symbol) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1120 ;; 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
|
1121 (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
|
1122 (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
|
1123 (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
|
1124 (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
|
1125 (match-beginning 0) (match-string 4) |
40336
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
1126 (and (match-beginning 3) (/= (match-beginning 3) (match-end 3)))) |
8f116e4bd2cd
(sh-font-lock-close-heredoc): check the args for being non-nil
Sam Steingold <sds@gnu.org>
parents:
40335
diff
changeset
|
1127 nil t)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1128 ;; Distinguish the special close-paren in `case'. |
72316
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
1129 (")" 0 (sh-font-lock-paren (match-beginning 0))) |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
1130 ;; highlight (possibly nested) subshells inside "" quoted regions correctly. |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
1131 ;; This should be at the very end because it uses syntax-ppss. |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
1132 (sh-quoted-subshell |
cedc7e7f2199
(sh-quoted-subshell): Make sure we don't mistake a closing " for an opening one.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72044
diff
changeset
|
1133 (1 (sh-apply-quoted-subshell) t t)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1134 |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1135 (defun sh-font-lock-syntactic-face-function (state) |
71182
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1136 (let ((q (nth 3 state))) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1137 (if q |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1138 (if (char-valid-p q) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1139 (if (eq q ?\`) 'sh-quoted-exec font-lock-string-face) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1140 sh-heredoc-face) |
44d77343c9ac
(sh-quoted-exec): New face for quoted exec constructs like `foo bar`.
Eli Zaretskii <eliz@gnu.org>
parents:
70829
diff
changeset
|
1141 font-lock-comment-face))) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1142 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1143 (defgroup sh-indentation nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1144 "Variables controlling indentation in shell scripts. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1145 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1146 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
|
1147 `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
|
1148 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
|
1149 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
|
1150 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1151 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1152 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1153 (defcustom sh-set-shell-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1154 "*Hook run by `sh-set-shell'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1155 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1156 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1157 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1158 (defcustom sh-mode-hook nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1159 "*Hook run by `sh-mode'." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1160 :type 'hook |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1161 :group 'sh-script) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1162 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1163 (defcustom sh-learn-basic-offset nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1164 "*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
|
1165 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1166 nil mean: never. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1167 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
|
1168 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
|
1169 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1170 (const :tag "Never" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1171 (const :tag "Only if sure" t) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1172 (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
|
1173 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1174 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1175 (defcustom sh-popup-occur-buffer nil |
62309 | 1176 "*Controls when `sh-learn-buffer-indent' pops the `*indent*' buffer. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1177 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
|
1178 are conflicts." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1179 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1180 (const :tag "Only when there are conflicts." nil) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1181 (const :tag "Always" t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1182 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1183 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1184 (defcustom sh-blink t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1185 "*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
|
1186 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
|
1187 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
|
1188 always the case." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1189 :type 'boolean |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1190 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1191 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1192 (defcustom sh-first-lines-indent 0 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1193 "*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
|
1194 Usually 0 meaning first column. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1195 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
|
1196 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1197 (const :tag "Leave as is" nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1198 (integer :tag "Column number" |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1199 :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
|
1200 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1201 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1202 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1203 (defcustom sh-basic-offset 4 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1204 "*The default indentation increment. |
62309 | 1205 This value is used for the `+' and `-' symbols in an indentation variable." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1206 :type 'integer |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1207 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1208 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1209 (defcustom sh-indent-comment nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1210 "*How a comment line is to be indented. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1211 nil means leave it as it is; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1212 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
|
1213 non-comment line; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1214 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
|
1215 :type '(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1216 (const :tag "Leave as is." nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1217 (const :tag "Indent as a normal line." t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1218 (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
|
1219 :tag "Indent to column number.") ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1220 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1221 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1222 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1223 (defvar sh-debug nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1224 "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
|
1225 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1226 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1227 ;; 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
|
1228 ;; (defun sh-debug (&rest args) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1229 ;; "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
|
1230 ;; (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1231 ;; (apply 'message args))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1232 (defmacro sh-debug (&rest args)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1233 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1234 (defconst sh-symbol-list |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1235 '((const :tag "+ " :value + |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1236 :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
|
1237 (const :tag "- " :value - |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1238 :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
|
1239 (const :tag "++" :value ++ |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1240 :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
|
1241 (const :tag "--" :value -- |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1242 :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
|
1243 (const :tag "* " :value * |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1244 :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
|
1245 (const :tag "/ " :value / |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1246 :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
|
1247 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1248 (defcustom sh-indent-for-else 0 |
62309 | 1249 "*How much to indent an `else' relative to its `if'. Usually 0." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1250 :type `(choice |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1251 (integer :menu-tag "A number (positive=>indent right)" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1252 :tag "A number") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1253 (const :tag "--") ;; separator! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1254 ,@ sh-symbol-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1255 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1256 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1257 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1258 (defconst sh-number-or-symbol-list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1259 (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
|
1260 :tag "A number") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1261 (const :tag "--")) ; separator |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1262 sh-symbol-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1263 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1264 (defcustom sh-indent-for-fi 0 |
62309 | 1265 "*How much to indent a `fi' relative to its `if'. Usually 0." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1266 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1267 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1268 |
62309 | 1269 (defcustom sh-indent-for-done 0 |
1270 "*How much to indent a `done' relative to its matching stmt. Usually 0." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1271 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1272 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1273 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1274 (defcustom sh-indent-after-else '+ |
62309 | 1275 "*How much to indent a statement after an `else' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1276 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1277 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1278 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1279 (defcustom sh-indent-after-if '+ |
62309 | 1280 "*How much to indent a statement after an `if' statement. |
1281 This includes lines after `else' and `elif' statements, too, but | |
1282 does not affect the `else', `elif' or `fi' statements themselves." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1283 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1284 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1285 |
58767
d2c6a8b592f2
(sh-indent-for-then): Change default.
Richard M. Stallman <rms@gnu.org>
parents:
57159
diff
changeset
|
1286 (defcustom sh-indent-for-then 0 |
62309 | 1287 "*How much to indent a `then' relative to its `if'." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1288 :type `(choice ,@ sh-number-or-symbol-list ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1289 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1290 |
62214
e451c7eb2d24
(sh-indent-for-do): Default to 0.
Richard M. Stallman <rms@gnu.org>
parents:
62080
diff
changeset
|
1291 (defcustom sh-indent-for-do 0 |
62309 | 1292 "*How much to indent a `do' statement. |
62310 | 1293 This is relative to the statement before the `do', typically a |
1294 `while', `until', `for', `repeat' or `select' statement." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1295 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1296 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1297 |
62309 | 1298 (defcustom sh-indent-after-do '+ |
1299 "*How much to indent a line after a `do' statement. | |
1300 This is used when the `do' is the first word of the line. | |
62310 | 1301 This is relative to the statement before the `do', typically a |
1302 `while', `until', `for', `repeat' or `select' statement." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1303 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1304 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1305 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1306 (defcustom sh-indent-after-loop-construct '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1307 "*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
|
1308 |
62309 | 1309 This variable is used when the keyword `do' is on the same line as the |
1310 loop statement (e.g., `until', `while' or `for'). | |
1311 If the `do' is on a line by itself, then `sh-indent-after-do' is used instead." | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1312 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1313 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1314 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1315 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1316 (defcustom sh-indent-after-done 0 |
62309 | 1317 "*How much to indent a statement after a `done' keyword. |
1318 Normally this is 0, which aligns the `done' to the matching | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1319 looping construct line. |
62309 | 1320 Setting it non-zero allows you to have the `do' statement on a line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1321 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
|
1322 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1323 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1324 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1325 (defcustom sh-indent-for-case-label '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1326 "*How much to indent a case label statement. |
62309 | 1327 This is relative to the line containing the `case' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1328 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1329 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1330 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1331 (defcustom sh-indent-for-case-alt '++ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1332 "*How much to indent statements after the case label. |
62309 | 1333 This is relative to the line containing the `case' statement." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1334 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1335 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1336 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1337 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1338 (defcustom sh-indent-for-continuation '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1339 "*How much to indent for a continuation statement." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1340 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1341 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1342 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1343 (defcustom sh-indent-after-open '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1344 "*How much to indent after a line with an opening parenthesis or brace. |
62309 | 1345 For an open paren after a function, `sh-indent-after-function' is used." |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1346 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1347 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1348 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1349 (defcustom sh-indent-after-function '+ |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1350 "*How much to indent after a function line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1351 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1352 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1353 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1354 ;; These 2 are for the rc shell: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1355 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1356 (defcustom sh-indent-after-switch '+ |
62309 | 1357 "*How much to indent a `case' statement relative to the `switch' statement. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1358 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1359 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1360 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1361 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1362 (defcustom sh-indent-after-case '+ |
62309 | 1363 "*How much to indent a statement relative to the `case' statement. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1364 This is for the rc shell." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1365 :type `(choice ,@ sh-number-or-symbol-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1366 :group 'sh-indentation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1367 |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1368 (defcustom sh-backslash-column 48 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1369 "*Column in which `sh-backslash-region' inserts backslashes." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1370 :type 'integer |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1371 :group 'sh) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1372 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1373 (defcustom sh-backslash-align t |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1374 "*If non-nil, `sh-backslash-region' will align backslashes." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1375 :type 'boolean |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1376 :group 'sh) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
1377 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1378 ;; 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
|
1379 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1380 (defun sh-mkword-regexpr (word) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1381 "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
|
1382 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
|
1383 punctuation characters like '-'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1384 (concat word "\\([^-a-z0-9_]\\|$\\)")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1385 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1386 (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
|
1387 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1388 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1389 (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
|
1390 '((sh . ( "while" "until" "for" ) ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1391 (bash . ( "while" "until" "for" "select" ) ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1392 (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
|
1393 (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
|
1394 "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
|
1395 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1396 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1397 (defconst sh-indent-supported |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1398 '((sh . t) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1399 (csh . nil) |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1400 (rc . t)) |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1401 "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
|
1402 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1403 (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
|
1404 "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
|
1405 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1406 (defconst sh-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1407 '( |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1408 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
|
1409 sh-indent-after-do sh-indent-after-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1410 sh-indent-after-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1411 sh-indent-after-if |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1412 sh-indent-after-loop-construct |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1413 sh-indent-after-open |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1414 sh-indent-comment |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1415 sh-indent-for-case-alt |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1416 sh-indent-for-case-label |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1417 sh-indent-for-continuation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1418 sh-indent-for-do |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1419 sh-indent-for-done |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1420 sh-indent-for-else |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1421 sh-indent-for-fi |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1422 sh-indent-for-then |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1423 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1424 "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
|
1425 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
|
1426 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
|
1427 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1428 (defvar sh-make-vars-local t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1429 "*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
|
1430 If non-nil, indentation variables are made local initially. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1431 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
|
1432 command `sh-make-vars-local'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1433 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
|
1434 frequently editing existing scripts with different styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1435 |
6463 | 1436 |
1437 ;; mode-command and utility functions | |
1438 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1439 ;;;###autoload |
41348
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1440 (defun sh-mode () |
6463 | 1441 "Major mode for editing shell scripts. |
1442 This mode works for many shells, since they all have roughly the same syntax, | |
1443 as far as commands, arguments, variables, pipes, comments etc. are concerned. | |
1444 Unless the file's magic number indicates the shell, your usual shell is | |
1445 assumed. Since filenames rarely give a clue, they are not further analyzed. | |
1446 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1447 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
|
1448 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
|
1449 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
|
1450 shell-specific features. |
6463 | 1451 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1452 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
|
1453 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
|
1454 following commands are available, based on the current shell's syntax: |
67647
ccd73c32ce19
* progmodes/sh-script.el (sh-mode): Add keymap to docstring.
Chong Yidong <cyd@stupidchicken.com>
parents:
67160
diff
changeset
|
1455 \\<sh-mode-map> |
6463 | 1456 \\[sh-case] case statement |
1457 \\[sh-for] for loop | |
1458 \\[sh-function] function definition | |
1459 \\[sh-if] if statement | |
1460 \\[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
|
1461 \\[sh-while-getopts] while getopts loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1462 \\[sh-repeat] repeat loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1463 \\[sh-select] select loop |
6463 | 1464 \\[sh-until] until loop |
1465 \\[sh-while] while loop | |
1466 | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1467 For sh and rc shells indentation commands are: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1468 \\[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
|
1469 \\[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
|
1470 \\[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
|
1471 would indent to the way it currently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1472 \\[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
|
1473 buffer indents as it currently is indented. |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1474 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1475 |
6463 | 1476 \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. |
1477 \\[sh-newline-and-indent] Delete unquoted space and indent new line same as this one. | |
1478 \\[sh-end-of-command] Go to end of successive commands. | |
1479 \\[sh-beginning-of-command] Go to beginning of successive commands. | |
1480 \\[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
|
1481 \\[sh-execute-region] Have optional header and region be executed in a subshell. |
6463 | 1482 |
1483 \\[sh-maybe-here-document] Without prefix, following an unquoted < inserts here document. | |
40340
5800d6cc4718
sugar: escape a "{" in the first column to pacify font-lock
Sam Steingold <sds@gnu.org>
parents:
40336
diff
changeset
|
1484 \{, (, [, ', \", ` |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1485 Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1486 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1487 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
|
1488 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
|
1489 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
|
1490 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1491 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
|
1492 with your script for an edit-interpret-debug cycle." |
41348
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1493 (interactive) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1494 (kill-all-local-variables) |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1495 (setq major-mode 'sh-mode |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1496 mode-name "Shell-script") |
b46a4ee1a05d
(sh-mode): Don't use define-derived-mode.
Richard M. Stallman <rms@gnu.org>
parents:
41233
diff
changeset
|
1497 (use-local-map sh-mode-map) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1498 (make-local-variable 'skeleton-end-hook) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1499 (make-local-variable 'paragraph-start) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1500 (make-local-variable 'paragraph-separate) |
6463 | 1501 (make-local-variable 'comment-start) |
1502 (make-local-variable 'comment-start-skip) | |
1503 (make-local-variable 'require-final-newline) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1504 (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
|
1505 (make-local-variable 'sh-shell-file) |
6463 | 1506 (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
|
1507 (make-local-variable 'skeleton-pair-alist) |
70829
b9fa14b504d3
(sh-mode): Use skeleton-pair-filter-function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
70828
diff
changeset
|
1508 (make-local-variable 'skeleton-pair-filter-function) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1509 (make-local-variable 'comint-dynamic-complete-functions) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1510 (make-local-variable 'comint-prompt-regexp) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1511 (make-local-variable 'font-lock-defaults) |
70828
bc576a11127e
(sh-mode): Use skeleton-filter-function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
70144
diff
changeset
|
1512 (make-local-variable 'skeleton-filter-function) |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
1513 (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
|
1514 (make-local-variable 'sh-shell-variables) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1515 (make-local-variable 'sh-shell-variables-initialized) |
20395
2bd6621697d5
(sh-imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
20385
diff
changeset
|
1516 (make-local-variable 'imenu-generic-expression) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1517 (make-local-variable 'sh-indent-supported-here) |
65384
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
1518 (make-local-variable 'skeleton-pair-default-alist) |
96998d31413e
(sh-skeleton-pair-default-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents:
65239
diff
changeset
|
1519 (setq skeleton-pair-default-alist sh-skeleton-pair-default-alist) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1520 (setq skeleton-end-hook (lambda () |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1521 (or (eolp) (newline) (indent-relative))) |
13705
4111cc3136d1
(sh-mode-map): Make the code more legible.
Karl Heuer <kwzh@gnu.org>
parents:
13510
diff
changeset
|
1522 paragraph-start (concat page-delimiter "\\|$") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1523 paragraph-separate paragraph-start |
6463 | 1524 comment-start "# " |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1525 comment-start-skip "#+[\t ]*" |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1526 local-abbrev-table sh-mode-abbrev-table |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1527 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
|
1528 ;; 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
|
1529 comint-prompt-regexp "^[ \t]*" |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1530 imenu-case-fold-search nil |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1531 font-lock-defaults |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
1532 `((sh-font-lock-keywords |
18024
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1533 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
|
1534 nil nil |
58afe194f1bd
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17531
diff
changeset
|
1535 ((?/ . "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
|
1536 (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
|
1537 (font-lock-syntactic-face-function |
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1538 . 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
|
1539 skeleton-pair-alist '((?` _ ?`)) |
70829
b9fa14b504d3
(sh-mode): Use skeleton-pair-filter-function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
70828
diff
changeset
|
1540 skeleton-pair-filter-function 'sh-quoted-p |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1541 skeleton-further-elements '((< '(- (min sh-indentation |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1542 (current-column))))) |
70828
bc576a11127e
(sh-mode): Use skeleton-filter-function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
70144
diff
changeset
|
1543 skeleton-filter-function 'sh-feature |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1544 skeleton-newline-indent-rigidly t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1545 sh-indent-supported-here nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1546 (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
|
1547 ;; 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
|
1548 ;; on the shell thus determined. |
69149
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1549 (sh-set-shell |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1550 (cond ((save-excursion |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1551 (goto-char (point-min)) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1552 (looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)")) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1553 (match-string 2)) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1554 ((not buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1555 sh-shell-file) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1556 ;; Checks that use `buffer-file-name' follow. |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1557 ((string-match "\\.m?spec\\'" buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1558 "rpm") |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1559 ((string-match "[.]sh\\>" buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1560 "sh") |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1561 ((string-match "[.]bash\\>" buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1562 "bash") |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1563 ((string-match "[.]ksh\\>" buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1564 "ksh") |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1565 ((string-match "[.]csh\\>" buffer-file-name) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1566 "csh") |
77593
dac1de8103f2
(sh-mode): Recognize .profile as sh style.
Richard M. Stallman <rms@gnu.org>
parents:
75347
diff
changeset
|
1567 ((equal (file-name-nondirectory buffer-file-name) ".profile") |
dac1de8103f2
(sh-mode): Recognize .profile as sh style.
Richard M. Stallman <rms@gnu.org>
parents:
75347
diff
changeset
|
1568 "sh") |
69149
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1569 (t |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1570 sh-shell-file)) |
b5043066337b
(sh-mode): Fix bug: Arrange to use
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
69083
diff
changeset
|
1571 nil nil) |
62772
f2892faa87d4
* progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents:
62550
diff
changeset
|
1572 (run-mode-hooks 'sh-mode-hook)) |
33430
d2648645aa9b
(sh-mode-syntax-table) <defvar>:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32728
diff
changeset
|
1573 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1574 ;;;###autoload |
6463 | 1575 (defalias 'shell-script-mode 'sh-mode) |
1576 | |
1577 | |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1578 (defun sh-font-lock-keywords (&optional keywords) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1579 "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
|
1580 This adds rules for comments and assignments." |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1581 (sh-feature sh-font-lock-keywords-var |
23511
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1582 (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
|
1583 (lambda (list) |
8b4cdcbaf071
(sh-font-lock-keywords): Don't crash for an unrecognized shell.
Richard M. Stallman <rms@gnu.org>
parents:
23501
diff
changeset
|
1584 `((,(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
|
1585 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
|
1586 ,@keywords |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1587 ,@list |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1588 ,@executable-font-lock-keywords))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1589 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1590 (defun sh-font-lock-keywords-1 (&optional builtins) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1591 "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
|
1592 (let ((keywords (concat "\\([;(){}`|&]\\|^\\)[ \t]*\\(\\(" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1593 (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
|
1594 "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1595 (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
|
1596 (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
|
1597 t)))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1598 (sh-font-lock-keywords |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1599 `(,@(if builtins |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1600 `((,(concat keywords "[ \t]+\\)?" |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1601 (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
|
1602 "\\>") |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1603 (2 font-lock-keyword-face nil t) |
72006
f483b68fd89b
(sh-font-lock-keywords-1): Revert inadvertently installed patch hunk.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71949
diff
changeset
|
1604 (6 font-lock-builtin-face)) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1605 ,@(sh-feature sh-font-lock-keywords-var-2))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1606 (,(concat keywords "\\)\\>") |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1607 2 font-lock-keyword-face) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1608 ,@(sh-feature sh-font-lock-keywords-var-1))))) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1609 |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1610 (defun sh-font-lock-keywords-2 () |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1611 "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
|
1612 (sh-font-lock-keywords-1 t)) |
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
1613 |
6463 | 1614 |
29422
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1615 (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
|
1616 "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
|
1617 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1618 (defvar sh-kw-alist nil |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1619 "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
|
1620 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1621 ;; ( 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
|
1622 ;; 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
|
1623 ;; having 3 elements: |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1624 ;; a keyword |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1625 ;; 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
|
1626 ;; 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
|
1627 ;; 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
|
1628 ;; 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
|
1629 ;; 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
|
1630 ;; 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
|
1631 ;; 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
|
1632 ;; 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
|
1633 ;; 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
|
1634 ;; 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
|
1635 ;; `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
|
1636 ;; 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
|
1637 ;; 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
|
1638 ;; 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
|
1639 ;; for both. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1640 ;; |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1641 (defconst sh-kw |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1642 '((sh |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1643 ("if" nil sh-handle-prev-if) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1644 ("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
|
1645 ("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
|
1646 ("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
|
1647 ("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
|
1648 ("(" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1649 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1650 ("[" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1651 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1652 (")" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1653 ("]" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1654 ("case" nil sh-handle-prev-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1655 ("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
|
1656 (case-label nil sh-handle-after-case-label) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1657 (";;" nil sh-handle-prev-case-alt-end) ;; ??? |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1658 ("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
|
1659 ("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
|
1660 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1661 ;; 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
|
1662 ;; 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
|
1663 ;; these shells use. |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1664 (rc |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1665 ("{" nil sh-handle-prev-open) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1666 ("}" sh-handle-this-close nil) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1667 ("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
|
1668 |
be5a54fc840d
(sh-symbol-list, sh-number-or-symbol-list)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29109
diff
changeset
|
1669 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1670 |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1671 (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
|
1672 "Set this buffer's shell to SHELL (a string). |
42909
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1673 When used interactively, insert the proper starting #!-line, |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1674 and make the visited file executable via `executable-set-magic', |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1675 perhaps querying depending on the value of `executable-query'. |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1676 |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1677 When this function is called noninteractively, INSERT-FLAG (the third |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1678 argument) controls whether to insert a #!-line and think about making |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1679 the visited file executable, and NO-QUERY-FLAG (the second argument) |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1680 controls whether to query about making the visited file executable. |
af3eb1ed8032
(sh-set-shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
42456
diff
changeset
|
1681 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1682 Calls the value of `sh-set-shell-hook' if set." |
49132
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1683 (interactive (list (completing-read (format "Shell \(default %s\): " |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1684 sh-shell-file) |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1685 interpreter-mode-alist |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1686 (lambda (x) (eq (cdr x) 'sh-mode)) |
99f9777a831b
(sh-set-shell): Make sh-shell-file the default shell.
Juanma Barranquero <lekktu@gmail.com>
parents:
48032
diff
changeset
|
1687 nil nil nil sh-shell-file) |
14148
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1688 (eq executable-query 'function) |
fa30f7528502
(sh-mode): Don't move point.
Richard M. Stallman <rms@gnu.org>
parents:
14119
diff
changeset
|
1689 t)) |
23589
660727693bf6
(sh-canonicalize-shell): Fix regexp.
Andreas Schwab <schwab@suse.de>
parents:
23511
diff
changeset
|
1690 (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
|
1691 (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
|
1692 (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
|
1693 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
|
1694 sh-shell)) |
16552
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1695 (if insert-flag |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1696 (setq sh-shell-file |
fe3d32bca2c5
(sh-set-shell): Pass args no-query-flag
Richard M. Stallman <rms@gnu.org>
parents:
16535
diff
changeset
|
1697 (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
|
1698 no-query-flag insert-flag))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1699 (let ((tem (sh-feature sh-require-final-newline))) |
59251
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
1700 (if (eq tem t) |
84ede35ffeb4
(sh-require-final-newline):
Richard M. Stallman <rms@gnu.org>
parents:
58767
diff
changeset
|
1701 (setq require-final-newline mode-require-final-newline))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1702 (setq |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1703 mode-line-process (format "[%s]" sh-shell) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1704 sh-shell-variables nil |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
1705 sh-shell-variables-initialized nil |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1706 imenu-generic-expression (sh-feature sh-imenu-generic-expression)) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1707 (make-local-variable 'sh-mode-syntax-table) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1708 (let ((tem (sh-feature sh-mode-syntax-table-input))) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1709 (setq sh-mode-syntax-table |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1710 (if tem (apply 'sh-mode-syntax-table tem) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1711 sh-mode-default-syntax-table))) |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1712 (set-syntax-table sh-mode-syntax-table) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1713 (dolist (var (sh-feature sh-variables)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1714 (sh-remember-variable var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1715 (make-local-variable 'indent-line-function) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1716 (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
|
1717 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1718 (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
|
1719 (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
|
1720 (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
|
1721 (let ((regexp (sh-feature sh-kws-for-done))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1722 (if regexp |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1723 (set (make-local-variable 'sh-regexp-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1724 (sh-mkword-regexpr (regexp-opt regexp t))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1725 (message "setting up indent stuff") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1726 ;; 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
|
1727 ;; 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
|
1728 (setq indent-line-function 'sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1729 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1730 (sh-make-vars-local)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1731 (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
|
1732 (message "No indentation for this shell type.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1733 (setq indent-line-function 'sh-basic-indent-line)) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1734 (when font-lock-mode |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1735 (setq font-lock-set-defaults nil) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1736 (font-lock-set-defaults) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1737 (font-lock-fontify-buffer)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1738 (run-hooks 'sh-set-shell-hook)) |
6463 | 1739 |
1740 | |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1741 (defun sh-feature (alist &optional function) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1742 "Index ALIST by the current shell. |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1743 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
|
1744 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
|
1745 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1746 - 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
|
1747 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
|
1748 The ultimate default is always `sh'. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1749 |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1750 - If the value thus looked up is a list starting with `sh-append', |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1751 we call the function `sh-append' with the rest of the list as |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1752 arguments, and use the value. However, the next element of the |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1753 list is not used as-is; instead, we look it up recursively |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1754 in ALIST to allow the function called to define the value for |
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1755 one shell to be derived from another shell. |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1756 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
|
1757 |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1758 If FUNCTION is non-nil, it is called with one argument, |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1759 the value thus obtained, and the result is used instead." |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1760 (or (if (consp alist) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1761 ;; Check for something that isn't a valid alist. |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1762 (let ((l alist)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1763 (while (and l (consp (car l))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1764 (setq l (cdr l))) |
52571
6de55a10c444
(sh-mode-default-syntax-table): Renamed from sh-mode-syntax-table.
Richard M. Stallman <rms@gnu.org>
parents:
52549
diff
changeset
|
1765 (if l alist))) |
64971
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1766 |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1767 (let ((orig-sh-shell sh-shell)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1768 (let ((sh-shell sh-shell) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1769 elt val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1770 (while (and sh-shell |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1771 (not (setq elt (assq sh-shell alist)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1772 (setq sh-shell (cdr (assq sh-shell sh-ancestor-alist)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1773 ;; If the shell is not known, treat it as sh. |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1774 (unless elt |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1775 (setq elt (assq 'sh alist))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1776 (setq val (cdr elt)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1777 (if (and (consp val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1778 (memq (car val) '(sh-append sh-modify))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1779 (setq val |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1780 (apply (car val) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1781 ;; Refer to the value for a different shell, |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1782 ;; as a kind of inheritance. |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1783 (let ((sh-shell (car (cdr val)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1784 (sh-feature alist)) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1785 (cddr val)))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1786 (if function |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1787 (setq sh-shell orig-sh-shell |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1788 val (funcall function val))) |
7fb2b79e33d0
(sh-font-lock-keywords-var): Variable renamed from sh-font-lock-keywords.
Richard M. Stallman <rms@gnu.org>
parents:
64266
diff
changeset
|
1789 val)))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1790 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1791 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1792 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1793 ;; 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
|
1794 ;;(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
|
1795 ;; "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
|
1796 ;;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
|
1797 ;;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
|
1798 ;;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
|
1799 ;;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
|
1800 ;; (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
|
1801 ;; (symbol-value sh-shell)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1802 ;; (progn |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1803 ;; (if (listp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1804 ;; (nconc list ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1805 ;; (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
|
1806 ;; (if (vectorp ancestor) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1807 ;; (mapatoms (lambda (atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1808 ;; (or (eq atom 0) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1809 ;; (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
|
1810 ;; (symbol-name atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1811 ;; (symbol-value atom) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1812 ;; (symbol-function atom)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1813 ;; ancestor)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1814 ;; (while list |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1815 ;; (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
|
1816 ;; (car list) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1817 ;; (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
|
1818 ;; (car (cdr list)) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1819 ;; "") |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1820 ;; (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
|
1821 ;; (car (cdr list)))) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1822 ;; (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
|
1823 ;; (symbol-value sh-shell))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1824 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1825 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1826 (defun sh-append (ancestor &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1827 "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
|
1828 (nconc list ancestor)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1829 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1830 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1831 (defun sh-modify (skeleton &rest list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1832 "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
|
1833 (setq skeleton (copy-sequence skeleton)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1834 (while list |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1835 (setcar (or (nthcdr (car list) skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1836 (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
|
1837 (car (cdr list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1838 (setq list (nthcdr 2 list))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1839 skeleton) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1840 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1841 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1842 (defun sh-basic-indent-line () |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1843 "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
|
1844 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
|
1845 Lines containing only comments are considered empty." |
6463 | 1846 (interactive) |
1847 (let ((previous (save-excursion | |
19480
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1848 (while (and (progn (beginning-of-line) |
7f11f103a0ca
(sh-indent-line): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents:
18382
diff
changeset
|
1849 (not (bobp))) |
14211
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1850 (progn |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1851 (forward-line -1) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1852 (back-to-indentation) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1853 (or (eolp) |
949aa01aca87
(sh-indent-line): Cope if no previous noncomment line.
Richard M. Stallman <rms@gnu.org>
parents:
14195
diff
changeset
|
1854 (eq (following-char) ?#))))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1855 (current-column))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1856 current) |
6463 | 1857 (save-excursion |
1858 (indent-to (if (eq this-command 'newline-and-indent) | |
1859 previous | |
1860 (if (< (current-column) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1861 (setq current (progn (back-to-indentation) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1862 (current-column)))) |
6463 | 1863 (if (eolp) previous 0) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1864 (delete-region (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1865 (progn (beginning-of-line) (point))) |
6463 | 1866 (if (eolp) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1867 (max previous (* (1+ (/ current sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1868 sh-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1869 (* (1+ (/ current sh-indentation)) sh-indentation)))))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1870 (if (< (current-column) (current-indentation)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1871 (skip-chars-forward " \t")))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1872 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1873 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1874 (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
|
1875 "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
|
1876 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
|
1877 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
|
1878 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1879 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
|
1880 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
|
1881 region, clear header." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1882 (interactive "r\nP") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1883 (if flag |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1884 (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
|
1885 (point-marker))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1886 (if sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1887 (save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1888 (let (buffer-undo-list) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1889 (goto-char sh-header-marker) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1890 (append-to-buffer (current-buffer) start end) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1891 (shell-command-on-region (point-min) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1892 (setq end (+ sh-header-marker |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1893 (- end start))) |
14119
2a05fc406f3a
(sh-alias-alist): Don't map sh to bash.
Karl Heuer <kwzh@gnu.org>
parents:
14026
diff
changeset
|
1894 sh-shell-file) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
1895 (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
|
1896 (shell-command-on-region start end (concat sh-shell-file " -"))))) |
6463 | 1897 |
1898 | |
1899 (defun sh-remember-variable (var) | |
1900 "Make VARIABLE available for future completing reads in this buffer." | |
1901 (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
|
1902 (getenv var) |
14195
df3c52ae5b14
(sh-shell-variables): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1903 (assoc var sh-shell-variables) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1904 (push (cons var var) sh-shell-variables)) |
6463 | 1905 var) |
1906 | |
1907 | |
1908 | |
1909 (defun sh-quoted-p () | |
1910 "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
|
1911 (eq -1 (% (save-excursion (skip-chars-backward "\\\\")) 2))) |
6463 | 1912 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1913 ;; Indentation stuff. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1914 (defun sh-must-support-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1915 "*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
|
1916 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
|
1917 (unless sh-indent-supported-here |
40927
d8cd2ee4b10c
(sh-must-be-shell-mode): Allow modes derived from sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
40340
diff
changeset
|
1918 (error "This buffer's shell does not support indentation through Emacs"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1919 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1920 (defun sh-make-vars-local () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1921 "Make the indentation variables local to this buffer. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1922 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
|
1923 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
|
1924 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1925 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
|
1926 command `sh-reset-indent-vars-to-global-values'." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1927 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1928 (mapcar 'make-local-variable sh-var-list) |
74829
55f1722d93af
(sh-make-vars-local): Fix a typo in message string.
Eli Zaretskii <eliz@gnu.org>
parents:
74547
diff
changeset
|
1929 (message "Indentation variables are now local.")) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1930 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1931 (defun sh-reset-indent-vars-to-global-values () |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1932 "Reset local indentation variables to the global values. |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1933 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
|
1934 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1935 (mapcar 'kill-local-variable sh-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1936 (if sh-make-vars-local |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1937 (mapcar 'make-local-variable sh-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1938 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1939 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1940 ;; 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
|
1941 ;; 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
|
1942 (defconst sh-special-keywords "then\\|do") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1943 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1944 (defun sh-help-string-for-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1945 "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
|
1946 (let ((msg (documentation-property var 'variable-documentation)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1947 (msg2 "")) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1948 (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
|
1949 (setq msg2 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1950 (format "\n |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1951 You can enter a number (positive to increase indentation, |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1952 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
|
1953 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1954 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
|
1955 the value of variable `sh-basic-offset' |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1956 which in this buffer is currently %s. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1957 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1958 \t%s." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1959 sh-basic-offset |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1960 (mapconcat (lambda (x) |
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1961 (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
|
1962 sh-symbol-list "\n\t")))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1963 (concat |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1964 ;; 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
|
1965 ;; (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
|
1966 msg msg2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1967 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1968 (defun sh-read-variable (var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1969 "Read a new value for indentation variable VAR." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1970 (interactive "*variable? ") ;; to test |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1971 (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
|
1972 (quote ,var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1973 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1974 (setq val (read-from-minibuffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1975 (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
|
1976 var (single-key-description help-char)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1977 (format "%s" (symbol-value var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
1978 nil t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1979 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1980 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1981 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1982 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1983 (defun sh-in-comment-or-string (start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1984 "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
|
1985 (save-excursion |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
1986 (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
|
1987 (or (nth 3 state) (nth 4 state))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1988 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1989 (defun sh-goto-matching-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1990 "Go to the matching if for a fi. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1991 This handles nested if..fi pairs." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1992 (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
|
1993 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1994 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1995 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1996 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
1997 ;; 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
|
1998 ;; line whose indentation is being handled contain XXX; |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
1999 ;; 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
|
2000 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2001 (defun sh-handle-prev-if () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2002 (list '(+ sh-indent-after-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2003 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2004 (defun sh-handle-this-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2005 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2006 ;; (list "aligned to if") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2007 (list "aligned to if" '(+ sh-indent-for-else)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2008 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2009 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2010 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2011 (defun sh-handle-prev-else () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2012 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2013 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2014 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2015 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2016 (defun sh-handle-this-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2017 (if (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2018 (list "aligned to if" '(+ sh-indent-for-fi)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2019 nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2020 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2021 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2022 (defun sh-handle-prev-fi () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2023 ;; 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
|
2024 ;; 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
|
2025 ;; 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
|
2026 ;; 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
|
2027 ;; 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
|
2028 (sh-goto-matching-if) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2029 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2030 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2031 (defun sh-handle-this-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2032 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2033 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2034 (list '(+ sh-indent-for-then)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2035 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2036 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2037 (defun sh-handle-prev-then () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2038 (let ((p (sh-goto-matching-if))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2039 (if p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2040 (list '(+ sh-indent-after-if)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2041 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2042 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2043 (defun sh-handle-prev-open () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2044 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2045 (let ((x (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2046 (if (and x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2047 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2048 (goto-char x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2049 (or |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2050 (looking-at "function\\b") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2051 (looking-at "\\s-*\\S-+\\s-*()") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2052 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2053 (list '(+ sh-indent-after-function)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2054 (list '(+ sh-indent-after-open))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2055 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2056 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2057 (defun sh-handle-this-close () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2058 (forward-char 1) ;; move over ")" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2059 (if (sh-safe-forward-sexp -1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2060 (list "aligned to opening paren"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2061 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2062 (defun sh-goto-matching-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2063 (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
|
2064 (if found (goto-char found)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2065 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2066 (defun sh-handle-prev-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2067 ;; 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
|
2068 ;; 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
|
2069 (if (looking-at ".*\\<case\\>") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2070 (list '(+ sh-indent-for-case-label)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2071 (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
|
2072 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2073 (defun sh-handle-this-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2074 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2075 (list "aligned to matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2076 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2077 (defun sh-handle-prev-esac () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2078 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2079 (list "matching case"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2080 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2081 (defun sh-handle-after-case-label () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2082 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2083 (list '(+ sh-indent-for-case-alt)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2084 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2085 (defun sh-handle-prev-case-alt-end () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2086 (if (sh-goto-matching-case) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2087 (list '(+ sh-indent-for-case-label)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2088 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2089 (defun sh-safe-forward-sexp (&optional arg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2090 "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
|
2091 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
|
2092 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2093 (progn |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2094 (forward-sexp (or arg 1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2095 (point)) ;; return point if successful |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2096 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2097 (sh-debug "oops!(1) %d" (point)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2098 nil))) ;; return nil if fail |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2099 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2100 (defun sh-goto-match-for-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2101 (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
|
2102 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2103 (goto-char found)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2104 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2105 (defun sh-handle-this-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2106 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2107 (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
|
2108 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2109 (defun sh-handle-prev-done () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2110 (if (sh-goto-match-for-done) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2111 (list "previous done"))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2112 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2113 (defun sh-handle-this-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2114 (if (sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2115 (list '(+ sh-indent-for-do)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2116 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2117 (defun sh-handle-prev-do () |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2118 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2119 ((save-restriction |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2120 (narrow-to-region |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2121 (point) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2122 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2123 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2124 (point))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2125 (sh-goto-match-for-done)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2126 (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
|
2127 (list '(+ sh-indent-after-loop-construct))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2128 ((sh-goto-match-for-done) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2129 (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
|
2130 (list '(+ sh-indent-after-do))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2131 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2132 (message "match for done NOT found") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2133 nil))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2134 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2135 ;; for rc: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2136 (defun sh-find-prev-switch () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2137 "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
|
2138 (re-search-backward "\\<switch\\>" nil t)) |
25986
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 (defun sh-handle-this-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2141 (if (sh-find-prev-switch) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2142 (list '(+ sh-indent-after-switch)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2143 ;; (list '(+ sh-indent-for-case-label)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2144 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2145 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2146 (defun sh-handle-prev-rc-case () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2147 (list '(+ sh-indent-after-case))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2148 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2149 (defun sh-check-rule (n thing) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2150 (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
|
2151 (val nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2152 (if rule |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2153 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2154 (setq val (funcall rule)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2155 (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
|
2156 n thing (point) rule val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2157 val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2158 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2159 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2160 (defun sh-get-indent-info () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2161 "Return indent-info for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2162 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
|
2163 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
|
2164 \(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
|
2165 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
|
2166 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
|
2167 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
|
2168 modified by subsequent sublists. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2169 \(+ VAR\) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2170 \(- 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
|
2171 the indentation calculated so far. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2172 \(= 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
|
2173 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
|
2174 special variables such as `sh-indent-comment'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2175 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
|
2176 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
|
2177 what the indentation is based on." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2178 ;; See comments before `sh-kw'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2179 (save-excursion |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2180 (let ((have-result nil) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2181 this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2182 start |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2183 val |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2184 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2185 (align-point nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2186 prev-line-end x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2187 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2188 ;; 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
|
2189 ;;(This function never returns just t.) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2190 (cond |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2191 ((or (and (boundp 'font-lock-string-face) (not (bobp)) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2192 (eq (get-text-property (1- (point)) 'face) |
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2193 font-lock-string-face)) |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
2194 (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
|
2195 (setq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2196 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2197 ((looking-at "\\s-*#") ; was (equal this-kw "#") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2198 (if (bobp) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2199 (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
|
2200 (setq result (list '(= sh-indent-comment))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2201 ;; 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
|
2202 ;; 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
|
2203 (setq align-point (sh-prev-line nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2204 (setq have-result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2205 )) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2206 ) ;; cond |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2207 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2208 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2209 ;; Continuation lines are handled specially |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2210 (if (sh-this-is-a-continuation) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2211 (progn |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2212 (setq result |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2213 (if (save-excursion |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2214 (beginning-of-line) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2215 (not (memq (char-before (- (point) 2)) '(?\s ?\t)))) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2216 ;; By convention, if the continuation \ is not |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2217 ;; preceded by a SPC or a TAB it means that the line |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2218 ;; is cut at a place where spaces cannot be freely |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2219 ;; added/removed. I.e. do not indent the line. |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2220 (list '(= nil)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2221 ;; We assume the line being continued is already |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2222 ;; properly indented... |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2223 ;; (setq prev-line-end (sh-prev-line)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2224 (setq align-point (sh-prev-line nil)) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2225 (list '(+ sh-indent-for-continuation)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2226 (setq have-result t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2227 (beginning-of-line) |
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 (setq this-kw (sh-get-kw))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2230 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2231 ;; 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
|
2232 ;; calculating indentation info for. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2233 (if this-kw |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2234 (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
|
2235 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2236 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2237 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2238 "this - setting align-point to %d" align-point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2239 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2240 (setq have-result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2241 ;; set prev-line to continue processing remainder |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2242 ;; of this line as a previous line |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2243 (setq prev-line-end (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2244 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2245 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2246 (unless have-result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2247 (setq prev-line-end (sh-prev-line 'end))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2248 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2249 (if prev-line-end |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2250 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2251 ;; We start off at beginning of this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2252 ;; Scan previous statements while this is <= |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2253 ;; start of previous line. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2254 (setq start (point)) ;; for debug only |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2255 (goto-char prev-line-end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2256 (setq x t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2257 (while (and x (setq x (sh-prev-thing))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2258 (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
|
2259 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2260 ((and (equal x ")") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2261 (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
|
2262 sh-st-punc)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2263 (sh-debug "Case label) here") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2264 (setq x 'case-label) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2265 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2266 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2267 (setq result (append result val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2268 (setq align-point (point)))) |
53419 | 2269 (or (bobp) |
2270 (forward-char -1)) | |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2271 (skip-chars-forward "[a-z0-9]*?") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2272 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2273 ((string-match "[])}]" x) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2274 (setq x (sh-safe-forward-sexp -1)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2275 (if x |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2276 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2277 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2278 (setq result (append result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2279 (list "aligned to opening paren"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2280 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2281 ((string-match "[[({]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2282 (sh-debug "Checking special thing: %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2283 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2284 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2285 (forward-char -1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2286 (setq align-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2287 ((string-match "[\"'`]" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2288 (sh-debug "Skipping back for %s" x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2289 ;; this was oops-2 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2290 (setq x (sh-safe-forward-sexp -1))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2291 ((stringp x) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2292 (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
|
2293 (if (setq val (sh-check-rule 2 x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2294 ;; (or (eq t (car val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2295 ;; (eq t (car (car val)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2296 (setq result (append result val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2297 ;; 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
|
2298 (setq align-point (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2299 (unless (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2300 (forward-char -1))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2301 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2302 (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
|
2303 ) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2304 ) ;; while |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2305 (sh-debug "result is %s" result) |
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 (sh-debug "No prev line!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2308 (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
|
2309 ) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2310 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2311 (if align-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2312 ;; 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
|
2313 (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
|
2314 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2315 (sh-debug "result is now: %s" result) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2316 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2317 (or result |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2318 (setq result (list (if prev-line-end |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2319 (list t prev-line-end) |
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2320 (list '= 'sh-first-lines-indent))))) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2321 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2322 (if (eq result t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2323 (setq result nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2324 (sh-debug "result is: %s" result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2325 result |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2326 ) ;; let |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2327 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2328 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2329 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2330 (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
|
2331 "Return the variable controlling indentation for this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2332 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
|
2333 indicating the problem. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2334 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
|
2335 (let ((var nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2336 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2337 (reason nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2338 sym elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2339 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2340 (setq info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2341 (if (null info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2342 (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
|
2343 (while (and info (null result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2344 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2345 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2346 ((stringp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2347 (setq reason elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2348 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2349 ((not (listp elt)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2350 (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
|
2351 ;; so it is a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2352 ((eq t (car elt)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2353 ) ;; nothing |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2354 ((symbolp (setq sym (nth 1 elt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2355 ;; 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
|
2356 ;; ignore other variables. Otherwise it is tricky to |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2357 ;; "learn" the comment indentation. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2358 (if (eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2359 (setq result var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2360 (if var |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2361 (setq result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2362 "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
|
2363 (setq var sym)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2364 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2365 (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
|
2366 (setq info (cdr info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2367 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2368 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2369 (setq result var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2370 (or result |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2371 (setq result reason)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2372 (if (null result) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2373 ;; e.g. just had (t POS) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2374 (setq result "line has default indentation")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2375 result)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2376 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2377 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2378 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2379 ;; Finding the previous line isn't trivial. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2380 ;; 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
|
2381 ;; 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
|
2382 ;; we are going to! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2383 ;; 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
|
2384 ;; 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
|
2385 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2386 ;; What we do: |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2387 ;; - go back to previous non-empty line |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2388 ;; - 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
|
2389 ;; - 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
|
2390 (defun sh-prev-line (&optional end) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2391 "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
|
2392 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
|
2393 we go to the end of the previous line and do not check for continuations." |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2394 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2395 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2396 (forward-comment (- (point-max))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2397 (unless end (beginning-of-line)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2398 (when (and (not (bobp)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2399 (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
|
2400 sh-heredoc-face)) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2401 (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
|
2402 (when p1 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2403 (goto-char p1) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2404 (if end |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2405 (end-of-line) |
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2406 (beginning-of-line))))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2407 (unless end |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2408 ;; 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
|
2409 ;; 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
|
2410 (while (and (sh-this-is-a-continuation) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2411 (>= 0 (forward-line -1)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2412 (beginning-of-line) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2413 (skip-chars-forward " \t")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2414 (point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2415 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2416 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2417 (defun sh-prev-stmt () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2418 "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
|
2419 ;; 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
|
2420 ;; 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
|
2421 ;; 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
|
2422 ;; 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
|
2423 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2424 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2425 (let ((going t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2426 (start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2427 (found nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2428 (prev nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2429 (skip-chars-backward " \t;|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2430 (while (and (not found) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2431 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2432 going) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2433 ;; 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
|
2434 (if (sh-safe-forward-sexp -1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2435 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2436 (if (looking-at sh-special-keywords) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2437 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2438 (setq found prev)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2439 (setq prev (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2440 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2441 ;; backward-sexp failed |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2442 (if (zerop (skip-chars-backward " \t()[\]{};`'")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2443 (forward-char -1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2444 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2445 (let ((back (sh-prev-line nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2446 (if back |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2447 (goto-char back) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2448 (setq going nil))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2449 (unless found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2450 (skip-chars-backward " \t") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2451 (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
|
2452 (eq (char-before) ?\;) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2453 (looking-at "\\s-*[|&]")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2454 (setq found (point))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2455 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2456 (goto-char found)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2457 (if found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2458 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2459 (skip-chars-forward " \t|&({[") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2460 (setq found (point)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2461 (if (>= (point) start) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2462 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2463 (debug "We didn't move!") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2464 (setq found nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2465 (or found |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2466 (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
|
2467 found))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2468 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2469 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2470 (defun sh-get-word () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2471 "Get a shell word skipping whitespace from point." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2472 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2473 (skip-chars-forward "\t ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2474 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2475 (while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2476 (if (looking-at "[\"'`]") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2477 (sh-safe-forward-sexp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2478 ;; (> (skip-chars-forward "^ \t\n\"'`") 0) |
62550
4f78132b042b
(sh-mode, sh-get-word): Minor regexp fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62310
diff
changeset
|
2479 (> (skip-chars-forward "-_a-zA-Z$0-9") 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2480 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2481 (buffer-substring start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2482 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2483 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2484 (defun sh-prev-thing () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2485 "Return the previous thing this logical line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2486 ;; 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
|
2487 ;; 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
|
2488 ;; 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
|
2489 ;; 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
|
2490 ;; line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2491 ;; |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2492 ;; Added a kludge for ";;" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2493 ;; Possible return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2494 ;; nil - nothing |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2495 ;; a string - possibly a keyword |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2496 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2497 (if (bolp) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2498 nil |
73239
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2499 (let ((start (point)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2500 (min-point (if (sh-this-is-a-continuation) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2501 (sh-prev-line nil) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2502 (line-beginning-position)))) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2503 (skip-chars-backward " \t;" min-point) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2504 (if (looking-at "\\s-*;;") |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2505 ;; (message "Found ;; !") |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2506 ";;" |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2507 (skip-chars-backward "^)}];\"'`({[" min-point) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2508 (let ((c (if (> (point) min-point) (char-before)))) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2509 (sh-debug "stopping at %d c is %s start=%d min-point=%d" |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2510 (point) c start min-point) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2511 (if (not (memq c '(?\n nil ?\;))) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2512 ;; c -- return a string |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2513 (char-to-string c) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2514 ;; Return the leading keyword of the "command" we supposedly |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2515 ;; skipped over. Maybe we skipped too far (e.g. past a `do' or |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2516 ;; `then' that precedes the actual command), so check whether |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2517 ;; we're looking at such a keyword and if so, move back forward. |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2518 (let ((boundary (point)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2519 kwd next) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2520 (while |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2521 (progn |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2522 ;; Skip forward over white space newline and \ at eol. |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2523 (skip-chars-forward " \t\n\\\\" start) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2524 (if (>= (point) start) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2525 (progn |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2526 (sh-debug "point: %d >= start: %d" (point) start) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2527 nil) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2528 (if next (setq boundary next)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2529 (sh-debug "Now at %d start=%d" (point) start) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2530 (setq kwd (sh-get-word)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2531 (if (member kwd (sh-feature sh-leading-keywords)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2532 (progn |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2533 (setq next (point)) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2534 t) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2535 nil)))) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2536 (goto-char boundary) |
b6db8e4b9bbe
(sh-prev-thing): Massage to untangle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73216
diff
changeset
|
2537 kwd))))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2538 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2539 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2540 (defun sh-this-is-a-continuation () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2541 "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
|
2542 (save-excursion |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2543 (and (zerop (forward-line -1)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2544 (looking-at ".*\\\\$") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2545 (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
|
2546 nil nil nil t)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2547 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2548 (defun sh-get-kw (&optional where and-move) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2549 "Return first word of line from WHERE. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2550 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
|
2551 (let ((start (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2552 (if where |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2553 (goto-char where)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2554 (prog1 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2555 (buffer-substring (point) |
73327
5e9926b80061
(sh-get-kw): | is not among the allowed chars for a keyword.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73241
diff
changeset
|
2556 (progn (skip-chars-forward "^ \t\n;&|()")(point))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2557 (unless and-move |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
2558 (goto-char start))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2559 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2560 (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
|
2561 "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
|
2562 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
|
2563 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
|
2564 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
|
2565 (let ((parse-sexp-ignore-comments t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2566 prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2567 (setq depth (or depth 1)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2568 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2569 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2570 (while (and |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2571 (/= 0 depth) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2572 (not (bobp)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2573 (setq prev (sh-prev-stmt))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2574 (goto-char prev) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2575 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2576 (if (looking-at "\\\\\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2577 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2578 (forward-char 2) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2579 (skip-chars-forward " \t"))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2580 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2581 ((looking-at open) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2582 (setq depth (1- depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2583 (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
|
2584 ((looking-at close) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2585 (setq depth (1+ depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2586 (sh-debug "found close - depth = %d" depth)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2587 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2588 )))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2589 (error nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2590 (if (eq depth 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2591 prev ;; (point) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2592 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2593 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2594 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2595 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2596 (defun sh-var-value (var &optional ignore-error) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2597 "Return the value of variable VAR, interpreting symbols. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2598 It can also return t or nil. |
60917
87f9bb9d3718
* progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
Werner LEMBERG <wl@gnu.org>
parents:
59622
diff
changeset
|
2599 If an invalid value is found, throw an error unless Optional argument |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2600 IGNORE-ERROR is non-nil." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2601 (let ((val (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2602 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2603 ((numberp val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2604 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2605 ((eq val t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2606 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2607 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2608 val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2609 ((eq val '+) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2610 sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2611 ((eq val '-) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2612 (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2613 ((eq val '++) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2614 (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2615 ((eq val '--) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2616 (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2617 ((eq val '*) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2618 (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2619 ((eq val '/) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2620 (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2621 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2622 (if ignore-error |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2623 (progn |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2624 (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
|
2625 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2626 (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
|
2627 )))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2628 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2629 (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
|
2630 "Set variable VAR to VALUE. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2631 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
|
2632 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
|
2633 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2634 (no-symbol |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2635 (set var value)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2636 ((= value sh-basic-offset) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2637 (set var '+)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2638 ((= value (- sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2639 (set var '-)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2640 ((eq value (* 2 sh-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2641 (set var '++)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2642 ((eq value (* 2 (- sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2643 (set var '--)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2644 ((eq value (/ sh-basic-offset 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2645 (set var '*)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2646 ((eq value (/ (- sh-basic-offset) 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2647 (set var '/)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2648 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2649 (set var value))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2650 ) |
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 (defun sh-calculate-indent (&optional info) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2654 "Return the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2655 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
|
2656 (let ((ofs 0) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2657 (base-value 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2658 elt a b var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2659 (or info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2660 (setq info (sh-get-indent-info))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2661 (when info |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2662 (while info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2663 (sh-debug "info: %s ofs=%s" info ofs) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2664 (setq elt (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2665 (cond |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2666 ((stringp elt)) ;; do nothing? |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2667 ((listp elt) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2668 (setq a (car (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2669 (setq b (nth 1 (car info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2670 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2671 ((eq a t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2672 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2673 (goto-char b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2674 (setq val (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2675 (setq base-value val)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2676 ((symbolp b) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2677 (setq val (sh-var-value b)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2678 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2679 ((eq a '=) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2680 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2681 ((null val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2682 ;; no indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2683 ;; set info to nil so we stop immediately |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2684 (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
|
2685 ((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
|
2686 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2687 ;; The following assume the (t POS) come first! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2688 (setq ofs val base-value 0) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2689 (setq info nil)))) ;; ? stop now |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2690 ((eq a '+) (setq ofs (+ ofs val))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2691 ((eq a '-) (setq ofs (- ofs val))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2692 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2693 (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
|
2694 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2695 (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
|
2696 (t |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2697 (error "sh-calculate-indent invalid elt %s" elt))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2698 (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
|
2699 a b val base-value ofs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2700 (setq info (cdr info))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2701 ;; return value: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2702 (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
|
2703 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2704 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2705 ((or (null base-value)(null ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2706 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2707 ((and (numberp base-value)(numberp ofs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2708 (sh-debug "base (%d) + ofs (%d) = %d" |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2709 base-value ofs (+ base-value ofs)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2710 (+ base-value ofs)) ;; return value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2711 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2712 (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
|
2713 base-value ofs) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2714 nil))))) |
25986
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 |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
2717 (defun sh-indent-line () |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2718 "Indent the current line." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2719 (interactive) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
2720 (let ((indent (sh-calculate-indent)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2721 (pos (- (point-max) (point)))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2722 (when indent |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2723 (beginning-of-line) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2724 (skip-chars-forward " \t") |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
2725 (indent-line-to indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2726 ;; If initial point was within line's indentation, |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2727 ;; 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
|
2728 (if (> (- (point-max) pos) (point)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2729 (goto-char (- (point-max) pos)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2730 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2731 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2732 (defun sh-blink (blinkpos &optional msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2733 "Move cursor momentarily to BLINKPOS and display MSG." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2734 ;; 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
|
2735 (if (numberp blinkpos) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2736 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2737 (goto-char blinkpos) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2738 (if msg (message "%s" msg) (message nil)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2739 (sit-for blink-matching-delay)) |
65610
5c0acc1c2a2c
(sh-blink): Fix spurious reference to variable `message'.
Juanma Barranquero <lekktu@gmail.com>
parents:
65584
diff
changeset
|
2740 (if msg (message "%s" msg) (message nil)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2741 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2742 (defun sh-show-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2743 "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
|
2744 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
|
2745 this line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2746 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
|
2747 a pop up window describes this variable. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2748 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
|
2749 we are indenting relative to, if applicable." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2750 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2751 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2752 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2753 (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
|
2754 (curr-indent (current-indentation)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2755 val msg) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2756 (if (stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2757 (message "%s" (setq msg var)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2758 (setq val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2759 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2760 (if (eq curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2761 (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
|
2762 (setq msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2763 (if val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2764 (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
|
2765 var (symbol-value var) curr-indent val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2766 (format "%s (%s) would leave line as is" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2767 var (symbol-value var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2768 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2769 (if (and arg var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2770 (describe-variable var))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2771 (if sh-blink |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2772 (let ((info (sh-get-indent-info))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2773 (if (and info (listp (car info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2774 (eq (car (car info)) t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2775 (sh-blink (nth 1 (car info)) msg) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2776 (message "%s" msg))) |
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2777 (message "%s" msg)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2778 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2779 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2780 (defun sh-set-indent () |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2781 "Set the indentation for the current line. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2782 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
|
2783 for a new value for it." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2784 (interactive) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2785 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2786 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2787 (var (sh-get-indent-var-for-line info)) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
2788 val old-val indent-val) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2789 (if (stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2790 (message "Cannot set indent - %s" var) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2791 (setq old-val (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2792 (setq val (sh-read-variable var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2793 (condition-case nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2794 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2795 (set var val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2796 (setq indent-val (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2797 (if indent-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2798 (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
|
2799 var (symbol-value var) indent-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2800 (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
|
2801 var (symbol-value var))) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2802 ;; 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
|
2803 ;; 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
|
2804 ;; 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
|
2805 ;; (sh-indent-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2806 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2807 (error |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2808 (set var old-val) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2809 (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
|
2810 var old-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2811 (sit-for 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2812 nil)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2813 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2814 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2815 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2816 (defun sh-learn-line-indent (arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2817 "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
|
2818 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2819 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
|
2820 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
|
2821 presently is. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2822 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2823 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
|
2824 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
|
2825 (interactive "*P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2826 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2827 ;; 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
|
2828 ;; 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
|
2829 ;; would just be confusing. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2830 (if (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2831 (beginning-of-line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2832 (looking-at "\\s-*$")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2833 (message "sh-learn-line-indent ignores empty lines.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2834 (let* ((info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2835 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2836 ival sval diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2837 (no-symbol arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2838 (curr-indent (current-indentation))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2839 (cond |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2840 ((stringp var) |
65584
6dbba0bd58df
Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents:
65384
diff
changeset
|
2841 (message "Cannot learn line - %s" var)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2842 ((eq var 'sh-indent-comment) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2843 ;; This is arbitrary... |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2844 ;; - 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
|
2845 ;; - 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
|
2846 ;; then set to t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2847 ;; - else set to curr-indent. |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2848 (setq sh-indent-comment |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2849 (if (= curr-indent 0) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2850 0 |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2851 (let* ((sh-indent-comment t) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2852 (val2 (sh-calculate-indent info))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2853 (if (= val2 curr-indent) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2854 t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2855 curr-indent)))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2856 (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
|
2857 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2858 ((numberp (setq sval (sh-var-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2859 (setq ival (sh-calculate-indent info)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2860 (setq diff (- curr-indent ival)) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2861 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2862 (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
|
2863 curr-indent ival diff var sval) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2864 (setq new-val (+ sval diff)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2865 ;;; 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
|
2866 ;;; 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
|
2867 ;;; or vice-versa. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2868 ;;; (if (= 0 diff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2869 ;;; (message "No change needed!") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2870 (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
|
2871 (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
|
2872 ) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2873 (t |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2874 (debug) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2875 (message "Cannot change %s" var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2876 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2877 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2878 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2879 (defun sh-mark-init (buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2880 "Initialize a BUFFER to be used by `sh-mark-line'." |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2881 (with-current-buffer (get-buffer-create buffer) |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2882 (erase-buffer) |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
2883 (occur-mode))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2884 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2885 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2886 (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
|
2887 "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
|
2888 Buffer BUFFER is in `occur-mode'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2889 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
|
2890 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
|
2891 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
|
2892 (let ((m1 (make-marker)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2893 start |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2894 (line "")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2895 (when point |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2896 (set-marker m1 point (current-buffer)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2897 (if add-linenum |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
2898 (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
|
2899 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2900 (if (get-buffer buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2901 (set-buffer (get-buffer buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2902 (set-buffer (get-buffer-create buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2903 (occur-mode) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2904 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2905 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2906 (setq start (point)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2907 (insert line) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2908 (if occur-point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2909 (setq occur-point (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2910 (insert message) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2911 (if point |
38079
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2912 (add-text-properties |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2913 start (point) |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2914 '(mouse-face highlight |
7563c3b44130
(sh-mark-line): Add help-echo to mouse-highlighted text.
Eli Zaretskii <eliz@gnu.org>
parents:
37542
diff
changeset
|
2915 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
|
2916 (insert "\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2917 (if point |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2918 (progn |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2919 (put-text-property start (point) 'occur-target m1) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2920 (if occur-point |
47595
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2921 (put-text-property start occur-point |
64e6b86fa461
(sh-mark-init): Don't set `occur-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
47264
diff
changeset
|
2922 'occur-match t)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2923 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2924 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2925 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2926 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2927 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2928 ;; Is this really worth having? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2929 (defvar sh-learned-buffer-hook nil |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2930 "*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
|
2931 ;; Example of how to use sh-learned-buffer-hook |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2932 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2933 ;; (defun what-i-learned (list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2934 ;; (let ((p list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2935 ;; (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2936 ;; (set-buffer "*scratch*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2937 ;; (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2938 ;; (insert "(setq\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2939 ;; (while p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2940 ;; (insert (format " %s %s \n" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2941 ;; (nth 0 (car p)) (nth 1 (car p)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2942 ;; (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2943 ;; (insert ")\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2944 ;; ))) |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
2945 ;; |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2946 ;; (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
|
2947 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2948 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2949 ;; 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
|
2950 ;; 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
|
2951 ;; use the whole buffer. Use narrowing if needbe. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2952 (defun sh-learn-buffer-indent (&optional arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2953 "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
|
2954 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2955 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
|
2956 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
|
2957 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
|
2958 |
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2959 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
|
2960 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
|
2961 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
|
2962 basic indent. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2963 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
|
2964 is set to the prefix's numerical value. |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2965 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
|
2966 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
|
2967 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2968 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
|
2969 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
|
2970 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
|
2971 removed in the future. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2972 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2973 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
|
2974 (interactive "P") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2975 (sh-must-support-indent) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2976 (save-excursion |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2977 (goto-char (point-min)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2978 (let ((learned-var-list nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2979 (out-buffer "*indent*") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2980 (num-diffs 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2981 previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2982 (max 17) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2983 vec |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2984 msg |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
2985 (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
|
2986 (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
|
2987 initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2988 (specified-basic-offset (and arg (numberp arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2989 (> arg 0))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2990 (linenum 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2991 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2992 (setq vec (make-vector max 0)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2993 (sh-mark-init out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2994 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2995 (if specified-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2996 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2997 (setq sh-basic-offset arg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2998 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
2999 (format "Using specified sh-basic-offset of %d" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3000 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3001 (setq initial-msg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3002 (format "Initial value of sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3003 sh-basic-offset))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3004 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3005 (while (< (point) (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3006 (setq linenum (1+ linenum)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3007 ;; (if (zerop (% linenum 10)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3008 (message "line %d" linenum) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3009 ;; ) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3010 (unless (looking-at "\\s-*$") ;; ignore empty lines! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3011 (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
|
3012 (info (sh-get-indent-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3013 (var (sh-get-indent-var-for-line info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3014 sval ival diff new-val |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3015 (curr-indent (current-indentation))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3016 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3017 ((null var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3018 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3019 ((stringp var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3020 nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3021 ((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
|
3022 ;; 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
|
3023 (setq ival (sh-calculate-indent)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3024 (setq diff (- curr-indent ival)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3025 (setq new-val (+ sval diff)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3026 (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
|
3027 (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
|
3028 (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
|
3029 (progn |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3030 ;; 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
|
3031 (unless (eq (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3032 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3033 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3034 (format "Variable %s was set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3035 var (symbol-value var)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3036 (point) out-buffer t t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3037 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3038 (format " but was previously set to %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3039 (nth 1 previous-set-info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3040 (nth 2 previous-set-info) out-buffer t) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3041 (setq num-diffs (1+ num-diffs)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3042 ;; (delete previous-set-info learned-var-list) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3043 (setcdr previous-set-info |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3044 (list (symbol-value var) (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3045 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3046 ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3047 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3048 (append (list (list var (symbol-value var) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3049 (point))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3050 learned-var-list))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3051 (if (numberp new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3052 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3053 (sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3054 "This line's indent value: %d" new-val) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3055 (if (< new-val 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3056 (setq new-val (- new-val))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3057 (if (< new-val max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3058 (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
|
3059 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3060 ((eq var 'sh-indent-comment) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3061 (unless (= curr-indent (sh-calculate-indent info)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3062 ;; this is not the default indentation |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3063 (setq comments-always-default nil) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3064 (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
|
3065 (or (eq comment-col curr-indent) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3066 (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
|
3067 (setq comment-col curr-indent)) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3068 )) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3069 (t |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3070 (sh-debug "Cannot learn this line!!!") |
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 (sh-debug |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3073 "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
|
3074 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3075 (forward-line 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3076 ) ;; while |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3077 (if sh-debug |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3078 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3079 (setq msg (format |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3080 "comment-col = %s comments-always-default = %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3081 comment-col comments-always-default)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3082 ;; (message msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3083 (sh-mark-line msg nil out-buffer))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3084 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3085 ((eq comment-col 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3086 (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
|
3087 (comments-always-default |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3088 (setq msg "\nComments follow default indentation.\n") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3089 (setq comment-col t)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3090 ((numberp comment-col) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3091 (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
|
3092 (t |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3093 (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
|
3094 (setq comment-col nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3095 )) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3096 (sh-debug msg) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3097 (sh-mark-line msg nil out-buffer) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3098 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3099 (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
|
3100 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3101 (setq suggested (sh-guess-basic-offset vec)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3102 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3103 (if (and suggested (not specified-basic-offset)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3104 (let ((new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3105 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3106 ;; 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
|
3107 ((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
|
3108 suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3109 ;; 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
|
3110 (sh-learn-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3111 (if (numberp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3112 suggested |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3113 (if (= (length suggested) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3114 (car suggested)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3115 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3116 nil)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3117 (if new-value |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3118 (progn |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3119 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3120 (append (list (list 'sh-basic-offset |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3121 (setq sh-basic-offset new-value) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3122 (point-max))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3123 learned-var-list)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3124 ;; 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
|
3125 ;; it will appear in the "Learned variable settings". |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3126 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3127 (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
|
3128 nil out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3129 (sh-mark-line |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3130 (if (listp suggested) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3131 (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
|
3132 (mapconcat 'int-to-string suggested " ")) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3133 (format "Suggested sh-basic-offset: %d" suggested)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3134 nil out-buffer)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3135 |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3136 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3137 (setq learned-var-list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3138 (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
|
3139 learned-var-list)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3140 (setq sh-indent-comment comment-col) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
3141 (let ((name (buffer-name))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3142 (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
|
3143 (if arg |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3144 ;; Set learned variables to symbolic rather than numeric |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3145 ;; values where possible. |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3146 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3147 (let ((var (car learned-var)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3148 (val (nth 1 learned-var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3149 (when (and (not (eq var 'sh-basic-offset)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3150 (numberp val)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3151 (sh-set-var-value var val))))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3152 (dolist (learned-var (reverse learned-var-list)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3153 (let ((var (car learned-var))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3154 (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
|
3155 (nth 2 learned-var) out-buffer))) |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
3156 (with-current-buffer out-buffer |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3157 (goto-char (point-min)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3158 (insert |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3159 (format "Indentation values for buffer %s.\n" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3160 (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
|
3161 num-diffs |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3162 (if (= num-diffs 1) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3163 " has" "s have") |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3164 (if (zerop num-diffs) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3165 "." ":")) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3166 ))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3167 ;; Are abnormal hooks considered bad form? |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3168 (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
|
3169 (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
|
3170 (pop-to-buffer out-buffer)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3171 ))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3172 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3173 (defun sh-guess-basic-offset (vec) |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3174 "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
|
3175 This is experimental, heuristic and arbitrary! |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3176 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
|
3177 `sh-learn-buffer-indent'. |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3178 Return values: |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3179 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
|
3180 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
|
3181 reasonable choices |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3182 nil - we couldn't find a reasonable one." |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3183 (let* ((max (1- (length vec))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3184 (i 1) |
51379
f61b3dac769b
(sh-is-quoted-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51265
diff
changeset
|
3185 (totals (make-vector max 0))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3186 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3187 (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
|
3188 (if (zerop (% i 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3189 (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
|
3190 (if (< (* i 2) max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3191 (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
|
3192 (setq i (1+ i))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3193 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3194 (let ((x nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3195 (result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3196 tot sum p) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3197 (setq i 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3198 (while (< i max) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3199 (if (/= (aref totals i) 0) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3200 (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
|
3201 (setq i (1+ i))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3202 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3203 (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
|
3204 (setq tot (apply '+ (append totals nil))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3205 (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
|
3206 vec totals tot)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3207 (cond |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3208 ((zerop (length x)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3209 (message "no values!")) ;; we return nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3210 ((= (length x) 1) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3211 (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
|
3212 (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
|
3213 ((> (cdr (car x)) (/ tot 2)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3214 ;; 1st is > 50% |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3215 (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
|
3216 (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
|
3217 ((>= (cdr (car x)) (* 2 (cdr (car (cdr x))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3218 ;; 1st is >= 2 * 2nd |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3219 (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
|
3220 (setq result (car (car x)))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3221 ((>= (+ (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
|
3222 ;; 1st & 2nd together >= 50% - return a list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3223 (setq p x sum 0 result nil) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3224 (while (and p |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3225 (<= (setq sum (+ sum (cdr (car p)))) (/ tot 2))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3226 (setq result (append result (list (car (car p))))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3227 (setq p (cdr p))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3228 (message "Possible choices for sh-basic-offset: %s" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3229 (mapconcat 'int-to-string result " "))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3230 (t |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3231 (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
|
3232 (car (car x))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3233 ;; result is nil here |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3234 )) |
32728
6fe525e8880c
(sh-mode-map): Remove bindings for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32503
diff
changeset
|
3235 result))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3236 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3237 ;; ======================================================================== |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3238 |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3239 ;; 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
|
3240 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3241 (defvar sh-styles-alist nil |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3242 "A list of all known shell indentation styles.") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3243 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3244 (defun sh-name-style (name &optional confirm-overwrite) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3245 "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
|
3246 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
|
3247 overwritten if |
30956
4c05432300f8
Big bag of typos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29844
diff
changeset
|
3248 - - 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
|
3249 - - 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
|
3250 ;; (interactive "sName for this style: ") |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3251 (interactive |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3252 (list |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3253 (read-from-minibuffer "Name for this style? " ) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3254 (not current-prefix-arg))) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3255 (let ((slist (cons name |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3256 (mapcar (lambda (var) (cons var (symbol-value var))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3257 sh-var-list))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3258 (style (assoc name sh-styles-alist))) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3259 (if style |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3260 (if (and confirm-overwrite |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3261 (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
|
3262 (message "Not changing style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3263 (message "Updating style %s" name) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3264 (setcdr style (cdr slist))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3265 (message "Creating new style %s" name) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3266 (push slist sh-styles-alist)))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3267 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3268 (defun sh-load-style (name) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3269 "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
|
3270 (interactive (list (completing-read |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3271 "Which style to use for this buffer? " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3272 sh-styles-alist nil t))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3273 (let ((sl (assoc name sh-styles-alist))) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3274 (if (null sl) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3275 (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
|
3276 (dolist (var (cdr sl)) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3277 (set (car var) (cdr var)))))) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3278 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3279 (defun sh-save-styles-to-buffer (buff) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3280 "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
|
3281 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
|
3282 (interactive (list |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3283 (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
|
3284 (with-current-buffer (get-buffer-create buff) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3285 (goto-char (point-max)) |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3286 (insert "\n") |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3287 (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
|
3288 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3289 |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3290 |
6463 | 3291 ;; statement syntax-commands for various shells |
3292 | |
3293 ;; You are welcome to add the syntax or even completely new statements as | |
3294 ;; appropriate for your favorite shell. | |
3295 | |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3296 (defconst sh-non-closing-paren |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3297 ;; If we leave it rear-sticky, calling `newline' ends up inserting a \n |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3298 ;; that inherits this property, which then confuses the indentation. |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3299 (propertize ")" 'syntax-table sh-st-punc 'rear-nonsticky t)) |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3300 |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3301 (define-skeleton sh-case |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3302 "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
|
3303 (csh "expression: " |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3304 "switch( " str " )" \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3305 > "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
|
3306 > _ \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3307 "breaksw" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3308 ( "other pattern, %s: " |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3309 < "case " str ?: \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3310 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3311 "breaksw" \n) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3312 < "default:" \n |
17531
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3313 > _ \n |
b891e41b4011
(sh-case): Make this a simple define-skeleton
Richard M. Stallman <rms@gnu.org>
parents:
17501
diff
changeset
|
3314 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3315 < < "endsw" \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3316 (es) |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3317 (rc "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3318 > "switch( " str " ) {" \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3319 > "case " (read-string "pattern: ") \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3320 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3321 ( "other pattern, %s: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3322 "case " str > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3323 > _ \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3324 "case *" > \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3325 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3326 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3327 ?\} > \n) |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3328 (sh "expression: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3329 > "case " str " in" \n |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3330 ( "pattern, %s: " |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3331 > str sh-non-closing-paren \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3332 > _ \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3333 ";;" \n) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3334 > "*" sh-non-closing-paren \n |
20771
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3335 > _ \n |
c6d9f48bd2f8
(sh-case): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
3336 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3337 "esac" > \n)) |
6463 | 3338 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3339 (define-skeleton sh-for |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3340 "Insert a for loop. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3341 (csh sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3342 1 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3343 2 "foreach " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3344 4 " ( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3345 6 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3346 15 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3347 16 "end") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3348 (es sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3349 4 " = ") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3350 (rc sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3351 2 "for( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3352 6 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3353 15 ?\} ) |
6463 | 3354 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3355 > "for " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3356 > _ | ?$ & (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
|
3357 "done" > \n)) |
6463 | 3358 |
3359 | |
3360 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3361 (define-skeleton sh-indexed-loop |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3362 "Insert an indexed loop from 1 to n. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3363 (bash sh-modify posix) |
6463 | 3364 (csh "Index variable: " |
3365 "@ " str " = 1" \n | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3366 "while( $" str " <= " (read-string "upper limit: ") " )" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3367 > _ ?$ str \n |
6463 | 3368 "@ " str "++" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3369 < "end" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3370 (es sh-modify rc |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3371 4 " =") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3372 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3373 > "integer " str "=0" \n |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3374 > "while (( ( " str " += 1 ) <= " |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3375 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3376 " )); do" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3377 > _ ?$ (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
|
3378 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3379 (posix "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3380 > str "=1" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3381 "while [ $" str " -le " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3382 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3383 " ]; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3384 > _ ?$ str \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3385 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
|
3386 "done" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3387 (rc "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3388 > "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
|
3389 (read-string "upper limit: ") |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3390 "; i++ ) print i }'`}) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3391 > _ ?$ (sh-remember-variable str) \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3392 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3393 (sh "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3394 > "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
|
3395 (read-string "upper limit: ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3396 "; i++ ) print i }'`; do" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3397 > _ ?$ (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
|
3398 "done" > \n)) |
6463 | 3399 |
3400 | |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3401 (defun sh-shell-initialize-variables () |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3402 "Scan the buffer for variable assignments. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3403 Add these variables to `sh-shell-variables'." |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3404 (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
|
3405 (save-excursion |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3406 (goto-char (point-min)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3407 (setq sh-shell-variables-initialized t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3408 (while (search-forward "=" nil t) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3409 (sh-assignment 0))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3410 (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
|
3411 (buffer-name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3412 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3413 (defvar sh-add-buffer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3414 |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3415 (defun sh-add-completer (string predicate code) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3416 "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
|
3417 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
|
3418 so it takes three arguments: |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3419 STRING, the current buffer contents; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3420 PREDICATE, the predicate for filtering possible matches; |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3421 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
|
3422 CODE can be nil, t or `lambda'. |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3423 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
|
3424 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
|
3425 `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
|
3426 (let ((sh-shell-variables |
64266
a634aa374675
(sh-get-indent-info): Only indent a continuation line if SPC or TAB precedes \.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64085
diff
changeset
|
3427 (with-current-buffer sh-add-buffer |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3428 (or sh-shell-variables-initialized |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3429 (sh-shell-initialize-variables)) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3430 (nconc (mapcar (lambda (var) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3431 (let ((name |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3432 (substring var 0 (string-match "=" var)))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3433 (cons name name))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3434 process-environment) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3435 sh-shell-variables)))) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3436 (case code |
52322
e9922af67382
(sh-builtins): Add some bash builtins.
Glenn Morris <rgm@gnu.org>
parents:
52099
diff
changeset
|
3437 ((nil) (try-completion string sh-shell-variables predicate)) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3438 (lambda (test-completion string sh-shell-variables predicate)) |
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3439 (t (all-completions string sh-shell-variables predicate))))) |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3440 |
6463 | 3441 (defun sh-add (var delta) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3442 "Insert an addition of VAR and prefix DELTA for Bourne (type) shell." |
6463 | 3443 (interactive |
14418
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3444 (let ((sh-add-buffer (current-buffer))) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3445 (list (completing-read "Variable: " 'sh-add-completer) |
7f58ca0014ef
(sh-shell-variables-initialized): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14221
diff
changeset
|
3446 (prefix-numeric-value current-prefix-arg)))) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3447 (insert (sh-feature '((bash . "$(( ") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3448 (ksh88 . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3449 (posix . "$(( ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3450 (rc . "`{expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3451 (sh . "`expr $") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3452 (zsh . "$[ "))) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3453 (sh-remember-variable var) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3454 (if (< delta 0) " - " " + ") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3455 (number-to-string (abs delta)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3456 (sh-feature '((bash . " ))") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3457 (ksh88 . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3458 (posix . " ))") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3459 (rc . "}") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3460 (sh . "`") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3461 (zsh . " ]"))))) |
6463 | 3462 |
3463 | |
3464 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3465 (define-skeleton sh-function |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3466 "Insert a function definition. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3467 (bash sh-modify ksh88 |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3468 3 "() {") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3469 (ksh88 "name: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3470 "function " str " {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3471 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3472 < "}" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3473 (rc sh-modify ksh88 |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3474 1 "fn ") |
6463 | 3475 (sh () |
3476 "() {" \n | |
3477 > _ \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3478 < "}" \n)) |
6463 | 3479 |
3480 | |
3481 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3482 (define-skeleton sh-if |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3483 "Insert an if statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3484 (csh "condition: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3485 "if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3486 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3487 ( "other condition, %s: " |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3488 < "else if( " str " ) then" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3489 > _ \n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3490 < "else" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3491 > _ \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3492 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3493 < "endif" \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3494 (es "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3495 > "if { " str " } {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3496 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3497 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3498 "} { " str " } {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3499 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3500 "} {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3501 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3502 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3503 ?\} > \n) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3504 (rc "condition: " |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3505 > "if( " str " ) {" \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3506 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3507 ( "other condition, %s: " |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3508 "} else if( " str " ) {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3509 > _ \n) |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3510 "} else {" > \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3511 > _ \n |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3512 resume: |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3513 ?\} > \n) |
6463 | 3514 (sh "condition: " |
12863 | 3515 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3516 > "if " str "; then" \n |
6463 | 3517 > _ \n |
3518 ( "other condition, %s: " | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3519 > "elif " str "; then" > \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3520 > \n) |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3521 "else" > \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3522 > \n |
6463 | 3523 resume: |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3524 "fi" > \n)) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3525 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3526 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3527 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3528 (define-skeleton sh-repeat |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3529 "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
|
3530 (es nil |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3531 > "forever {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3532 > _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3533 ?\} > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3534 (zsh "factor: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3535 > "repeat " str "; do" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3536 > \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3537 "done" > \n)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3538 |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3539 ;;;(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
|
3540 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3541 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3542 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3543 (define-skeleton sh-select |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3544 "Insert a select statement. See `sh-feature'." |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3545 (ksh88 "Index variable: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3546 > "select " str " in " _ "; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3547 > ?$ str \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3548 "done" > \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3549 (bash sh-append ksh88)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3550 ;;;(put 'sh-select 'menu-enable '(sh-feature sh-select)) |
6463 | 3551 |
3552 | |
3553 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3554 (define-skeleton sh-tmp-file |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3555 "Insert code to setup temporary file handling. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3556 (bash sh-append ksh88) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3557 (csh (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3558 "set tmp = `mktemp -t " str ".XXXXXX`" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3559 "onintr exit" \n _ |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3560 (and (goto-char (point-max)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3561 (not (bolp)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3562 ?\n) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3563 "exit:\n" |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3564 "rm $tmp* >&/dev/null" > \n) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3565 (es (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3566 > "local( signals = $signals sighup sigint;" \n |
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3567 > "tmp = `{ mktemp -t " str ".XXXXXX } ) {" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3568 > "catch @ e {" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3569 > "rm $tmp^* >[2]/dev/null" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3570 "throw $e" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3571 "} {" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3572 _ \n |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3573 ?\} > \n |
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3574 ?\} > \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3575 (ksh88 sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3576 7 "EXIT") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3577 (rc (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3578 > "tmp = `{ mktemp -t " str ".XXXXXX }" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3579 "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
|
3580 (sh (file-name-nondirectory (buffer-file-name)) |
66027
61174c5e6da6
(sh-tmp-file): Use mktemp -t. Finish support for es and rc shells.
Richard M. Stallman <rms@gnu.org>
parents:
65996
diff
changeset
|
3581 > "TMP=`mktemp -t " str ".XXXXXX`" \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3582 "trap \"rm $TMP* 2>/dev/null\" " ?0 \n)) |
6463 | 3583 |
3584 | |
3585 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3586 (define-skeleton sh-until |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3587 "Insert an until loop. See `sh-feature'." |
6463 | 3588 (sh "condition: " |
12863 | 3589 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3590 > "until " str "; do" \n |
6463 | 3591 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3592 "done" > \n)) |
17501
478f9bb8575c
Remove all menu-enable properties except for sh-case.
Richard M. Stallman <rms@gnu.org>
parents:
17480
diff
changeset
|
3593 ;;;(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
|
3594 |
6463 | 3595 |
3596 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3597 (define-skeleton sh-while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3598 "Insert a while loop. See `sh-feature'." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3599 (csh sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3600 2 "" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3601 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3602 5 " )" |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3603 10 '< |
37542
51f2e2a0c455
(sh-prev-line): Look for sh-heredoc-face
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37528
diff
changeset
|
3604 11 "end") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3605 (es sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3606 3 "while { " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3607 5 " } {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3608 10 ?\} ) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3609 (rc sh-modify sh |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3610 3 "while( " |
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3611 5 " ) {" |
40335
96186171af6d
no functional changes - a preparation for the next patch
Sam Steingold <sds@gnu.org>
parents:
39890
diff
changeset
|
3612 10 ?\} ) |
6463 | 3613 (sh "condition: " |
12863 | 3614 '(setq input (sh-feature sh-test)) |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3615 > "while " str "; do" \n |
6463 | 3616 > _ \n |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3617 "done" > \n)) |
6463 | 3618 |
3619 | |
3620 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3621 (define-skeleton sh-while-getopts |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3622 "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
|
3623 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
|
3624 option followed by a colon `:' if the option accepts an argument." |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3625 (bash sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3626 18 "${0##*/}") |
12863 | 3627 (csh nil |
3628 "while( 1 )" \n | |
3629 > "switch( \"$1\" )" \n | |
3630 '(setq input '("- x" . 2)) | |
3631 > > | |
3632 ( "option, %s: " | |
3633 < "case " '(eval str) | |
3634 '(if (string-match " +" str) | |
3635 (setq v1 (substring str (match-end 0)) | |
3636 str (substring str 0 (match-beginning 0))) | |
3637 (setq v1 nil)) | |
3638 str ?: \n | |
3639 > "set " v1 & " = $2" | -4 & _ \n | |
3640 (if v1 "shift") & \n | |
3641 "breaksw" \n) | |
3642 < "case --:" \n | |
3643 > "shift" \n | |
3644 < "default:" \n | |
3645 > "break" \n | |
3646 resume: | |
3647 < < "endsw" \n | |
3648 "shift" \n | |
39890
bc9296467c86
(sh-font-lock-syntactic-keywords): Handle here-docs differently.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38079
diff
changeset
|
3649 < "end" \n) |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3650 (ksh88 sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3651 16 "print" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3652 18 "${0##*/}" |
51515
6d06c54cda5d
Fix bug in "Options Loop" skeleton for ksh. Add newlines to a few skeletons,
Juanma Barranquero <lekktu@gmail.com>
parents:
51379
diff
changeset
|
3653 37 "OPTIND-1") |
52758
aaeb60b0150f
(sh-feature): Handle sh-modify like sh-append.
Richard M. Stallman <rms@gnu.org>
parents:
52682
diff
changeset
|
3654 (posix sh-modify sh |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3655 18 "$(basename $0)") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3656 (sh "optstring: " |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3657 > "while getopts :" str " OPT; do" \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3658 > "case $OPT in" \n |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3659 '(setq v1 (append (vconcat str) nil)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3660 ( (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
|
3661 (if (eq (nth 1 v1) ?:) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3662 (setq v1 (nthcdr 2 v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3663 v2 "\"$OPTARG\"") |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3664 (setq v1 (cdr v1) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3665 v2 nil))) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3666 > str "|+" str sh-non-closing-paren \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3667 > _ v2 \n |
51594
ad56e8962943
(sh-while-getopts, sh-if, sh-case): Revert part of previous change.
Juanma Barranquero <lekktu@gmail.com>
parents:
51515
diff
changeset
|
3668 > ";;" \n) |
49306
ed0ec7e165de
(sh-indent-line): Use indent-line-to.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49176
diff
changeset
|
3669 > "*" sh-non-closing-paren \n |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3670 > "echo" " \"usage: " "`basename $0`" |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3671 " [+-" '(setq v1 (point)) str |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3672 '(save-excursion |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3673 (while (search-backward ":" v1 t) |
15027
30c4f64f3579
(sh-while-getopts): Punctuate help message better.
Richard M. Stallman <rms@gnu.org>
parents:
14892
diff
changeset
|
3674 (replace-match " ARG] [+-" t t))) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3675 (if (eq (preceding-char) ?-) -5) |
29844
093c79809c9e
(sh-while-getopts): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
29422
diff
changeset
|
3676 (if (and (sequencep v1) (length v1)) "] " "} ") |
28923
dcafe3c9cd6c
(sh-while-getopts) <sh>: Handle case that
Gerd Moellmann <gerd@gnu.org>
parents:
26967
diff
changeset
|
3677 "[--] ARGS...\"" \n |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3678 "exit 2" > \n |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3679 "esac" > |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3680 \n "done" |
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3681 > \n |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3682 "shift " (sh-add "OPTIND" -1) \n |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3683 "OPTIND=1" \n)) |
6463 | 3684 |
3685 | |
3686 | |
3687 (defun sh-assignment (arg) | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3688 "Remember preceding identifier for future completion and do self-insert." |
6463 | 3689 (interactive "p") |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3690 (self-insert-command arg) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3691 (if (<= arg 1) |
6463 | 3692 (sh-remember-variable |
3693 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3694 (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
|
3695 (prog1 (point) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3696 (beginning-of-line 1)) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3697 t) |
13391
550ecb2269b0
(sh-shells): Eliminated variable redundant with
Karl Heuer <kwzh@gnu.org>
parents:
13389
diff
changeset
|
3698 (match-string 1)))))) |
6463 | 3699 |
3700 | |
3701 (defun sh-maybe-here-document (arg) | |
32480
261dcd5e9f0a
(sh-imenu-generic-expression): Fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31731
diff
changeset
|
3702 "Insert self. Without prefix, following unquoted `<' inserts here document. |
6463 | 3703 The document is bounded by `sh-here-document-word'." |
3704 (interactive "*P") | |
3705 (self-insert-command (prefix-numeric-value arg)) | |
3706 (or arg | |
3707 (not (eq (char-after (- (point) 2)) last-command-char)) | |
3708 (save-excursion | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3709 (backward-char 2) |
6463 | 3710 (sh-quoted-p)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3711 (let ((tabs (if (string-match "\\`-" sh-here-document-word) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3712 (make-string (/ (current-indentation) tab-width) ?\t) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3713 "")) |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3714 (delim (replace-regexp-in-string "['\"]" "" |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3715 sh-here-document-word))) |
6463 | 3716 (insert sh-here-document-word) |
64051
d700ccca5bd4
(sh, sh-script): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63885
diff
changeset
|
3717 (or (eolp) (looking-at "[ \t]") (insert ?\s)) |
6463 | 3718 (end-of-line 1) |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3719 (while |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3720 (sh-quoted-p) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3721 (end-of-line 2)) |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3722 (insert ?\n tabs) |
51265
575ad90ca254
(sh-here-document-word): Document new treatment of leading "-".
Glenn Morris <rgm@gnu.org>
parents:
49743
diff
changeset
|
3723 (save-excursion |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3724 (insert ?\n tabs (replace-regexp-in-string |
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3725 "\\`-?[ \t]*" "" delim)))))) |
6463 | 3726 |
3727 | |
3728 ;; various other commands | |
3729 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3730 (autoload 'comint-dynamic-complete "comint" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3731 "Dynamically perform completion at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3732 |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3733 (autoload 'shell-dynamic-complete-command "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3734 "Dynamically complete the command at point." t) |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3735 |
6463 | 3736 (autoload 'comint-dynamic-complete-filename "comint" |
3737 "Dynamically complete the filename at point." t) | |
3738 | |
12505
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3739 (autoload 'shell-dynamic-complete-environment-variable "shell" |
0f970ed476cb
restructured, largely rewritten without the bugs and
Karl Heuer <kwzh@gnu.org>
parents:
12034
diff
changeset
|
3740 "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
|
3741 |
6463 | 3742 |
3743 | |
12887
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3744 (defun sh-newline-and-indent () |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3745 "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
|
3746 (interactive "*") |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3747 (indent-to (prog1 (current-indentation) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3748 (delete-region (point) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3749 (progn |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3750 (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
|
3751 (if (sh-quoted-p) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3752 (forward-char))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3753 (point))) |
cbed067bf52d
(sh-newline-and-indent): Don't interpret prefix arg
Karl Heuer <kwzh@gnu.org>
parents:
12864
diff
changeset
|
3754 (newline)))) |
6463 | 3755 |
3756 (defun sh-beginning-of-command () | |
3757 "Move point to successive beginnings of commands." | |
3758 (interactive) | |
3759 (if (re-search-backward sh-beginning-of-command nil t) | |
3760 (goto-char (match-beginning 2)))) | |
3761 | |
3762 (defun sh-end-of-command () | |
3763 "Move point to successive ends of commands." | |
3764 (interactive) | |
3765 (if (re-search-forward sh-end-of-command nil t) | |
3766 (goto-char (match-end 1)))) | |
3767 | |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3768 ;; Backslashification. Stolen from make-mode.el. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3769 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3770 (defun sh-backslash-region (from to delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3771 "Insert, align, or delete end-of-line backslashes on the lines in the region. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3772 With no argument, inserts backslashes and aligns existing backslashes. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3773 With an argument, deletes the backslashes. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3774 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3775 This function does not modify the last line of the region if the region ends |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3776 right at the start of the following line; it does not modify blank lines |
61534
3d7c70a6a91e
(sh-here-document-word): Make it a defcustom. Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
61394
diff
changeset
|
3777 at the start of the region. So you can put the region around an entire |
59566
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3778 shell command and conveniently use this command." |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3779 (interactive "r\nP") |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3780 (save-excursion |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3781 (goto-char from) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3782 (let ((column sh-backslash-column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3783 (endmark (make-marker))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3784 (move-marker endmark to) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3785 ;; Compute the smallest column number past the ends of all the lines. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3786 (if sh-backslash-align |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3787 (progn |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3788 (if (not delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3789 (while (< (point) to) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3790 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3791 (if (= (preceding-char) ?\\) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3792 (progn (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3793 (skip-chars-backward " \t"))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3794 (setq column (max column (1+ (current-column)))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3795 (forward-line 1))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3796 ;; Adjust upward to a tab column, if that doesn't push |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3797 ;; past the margin. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3798 (if (> (% column tab-width) 0) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3799 (let ((adjusted (* (/ (+ column tab-width -1) tab-width) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3800 tab-width))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3801 (if (< adjusted (window-width)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3802 (setq column adjusted)))))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3803 ;; Don't modify blank lines at start of region. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3804 (goto-char from) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3805 (while (and (< (point) endmark) (eolp)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3806 (forward-line 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3807 ;; Add or remove backslashes on all the lines. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3808 (while (and (< (point) endmark) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3809 ;; Don't backslashify the last line |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3810 ;; if the region ends right at the start of the next line. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3811 (save-excursion |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3812 (forward-line 1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3813 (< (point) endmark))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3814 (if (not delete-flag) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3815 (sh-append-backslash column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3816 (sh-delete-backslash)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3817 (forward-line 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3818 (move-marker endmark nil)))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3819 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3820 (defun sh-append-backslash (column) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3821 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3822 ;; Note that "\\\\" is needed to get one backslash. |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3823 (if (= (preceding-char) ?\\) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3824 (progn (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3825 (delete-horizontal-space) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3826 (indent-to column (if sh-backslash-align nil 1))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3827 (indent-to column (if sh-backslash-align nil 1)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3828 (insert "\\"))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3829 |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3830 (defun sh-delete-backslash () |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3831 (end-of-line) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3832 (or (bolp) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3833 (progn |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3834 (forward-char -1) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3835 (if (looking-at "\\\\") |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3836 (delete-region (1+ (point)) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3837 (progn (skip-chars-backward " \t") (point))))))) |
7b97d6104891
(sh-mode-map): Bind C-c C-\.
Richard M. Stallman <rms@gnu.org>
parents:
59251
diff
changeset
|
3838 |
13707 | 3839 (provide 'sh-script) |
18382 | 3840 |
59622
5ec981fa30e5
(sh-here-doc-open-re): Don't allow `|' or other
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59566
diff
changeset
|
3841 ;; arch-tag: eccd8b72-f337-4fc2-ae86-18155a69d937 |
25986
29aeb35781cd
Added support for indenting existing scripts.
Gerd Moellmann <gerd@gnu.org>
parents:
25554
diff
changeset
|
3842 ;;; sh-script.el ends here |