Mercurial > emacs
annotate lisp/shell.el @ 51242:661e2fe7e775
(autoconf-mode setups): Recognise AH_ and AU_ entries in "(autoconf)Autoconf
Macro Index". Add "(autoconf)M4 Macro Index" and "(autoconf)Autotest Macro
Index". Remove duplicate copy of "(automake)Macro and Variable Index". Keep
automake after all autoconf possibilities, so as to prefer those.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Sun, 25 May 2003 21:03:57 +0000 |
parents | 99be3a1e2589 |
children | 8eb767cf7295 d7ddb3e565de |
rev | line source |
---|---|
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
35659
diff
changeset
|
1 ;;; shell.el --- specialized comint.el for running the shell |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
2 |
32943
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
3 ;; Copyright (C) 1988, 93, 94, 95, 96, 1997, 2000 Free Software Foundation, Inc. |
844
bf829a2d63b4
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
814
diff
changeset
|
4 |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
35659
diff
changeset
|
5 ;; Author: Olin Shivers <shivers@cs.cmu.edu> |
25278 | 6 ;; Simon Marshall <simon@gnu.org> |
18805 | 7 ;; Maintainer: FSF |
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
8 ;; Keywords: processes |
787
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
9 |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
10 ;; This file is part of GNU Emacs. |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
11 |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
15 ;; any later version. |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
16 |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
20 ;; GNU General Public License for more details. |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
21 |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
114 | 26 |
787
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
27 ;;; Commentary: |
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
28 |
14169 | 29 ;; Please send me bug reports, bug fixes, and extensions, so that I can |
30 ;; merge them into the master source. | |
31 ;; - Olin Shivers (shivers@cs.cmu.edu) | |
25278 | 32 ;; - Simon Marshall (simon@gnu.org) |
114 | 33 |
46159 | 34 ;; This file defines a shell-in-a-buffer package (shell mode) built on |
35 ;; top of comint mode. This is actually cmushell with things renamed | |
36 ;; to replace its counterpart in Emacs 18. cmushell is more | |
14169 | 37 ;; featureful, robust, and uniform than the Emacs 18 version. |
114 | 38 |
14169 | 39 ;; Since this mode is built on top of the general command-interpreter-in- |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
40 ;; a-buffer mode (comint mode), it shares a common base functionality, |
14169 | 41 ;; and a common set of bindings, with all modes derived from comint mode. |
42 ;; This makes these modes easier to use. | |
114 | 43 |
14169 | 44 ;; For documentation on the functionality provided by comint mode, and |
45 ;; the hooks available for customising it, see the file comint.el. | |
46 ;; For further information on shell mode, see the comments below. | |
114 | 47 |
14169 | 48 ;; Needs fixin: |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
49 ;; When sending text from a source file to a subprocess, the process-mark can |
14169 | 50 ;; move off the window, so you can lose sight of the process interactions. |
51 ;; Maybe I should ensure the process mark is in the window when I send | |
52 ;; text to the process? Switch selectable? | |
114 | 53 |
252 | 54 ;; YOUR .EMACS FILE |
55 ;;============================================================================= | |
56 ;; Some suggestions for your .emacs file. | |
57 ;; | |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
58 ;; ;; Define M-# to run some strange command: |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
59 ;; (eval-after-load "shell" |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
60 ;; '(define-key shell-mode-map "\M-#" 'shells-dynamic-spell)) |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
61 |
14169 | 62 ;; Brief Command Documentation: |
63 ;;============================================================================ | |
64 ;; Comint Mode Commands: (common to shell and all comint-derived modes) | |
65 ;; | |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
66 ;; m-p comint-previous-input Cycle backwards in input history |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
67 ;; m-n comint-next-input Cycle forwards |
14169 | 68 ;; m-r comint-previous-matching-input Previous input matching a regexp |
69 ;; m-s comint-next-matching-input Next input that matches | |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
70 ;; m-c-l comint-show-output Show last batch of process output |
14169 | 71 ;; return comint-send-input |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
72 ;; c-d comint-delchar-or-maybe-eof Delete char unless at end of buff. |
14169 | 73 ;; c-c c-a comint-bol Beginning of line; skip prompt |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
74 ;; c-c c-u comint-kill-input ^u |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
75 ;; c-c c-w backward-kill-word ^w |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
76 ;; c-c c-c comint-interrupt-subjob ^c |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
77 ;; c-c c-z comint-stop-subjob ^z |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
78 ;; c-c c-\ comint-quit-subjob ^\ |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
79 ;; c-c c-o comint-kill-output Delete last batch of process output |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
80 ;; c-c c-r comint-show-output Show last batch of process output |
24738 | 81 ;; c-c c-l comint-dynamic-list-input-ring List input history |
14169 | 82 ;; send-invisible Read line w/o echo & send to proc |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
83 ;; comint-continue-subjob Useful if you accidentally suspend |
14169 | 84 ;; top-level job |
85 ;; comint-mode-hook is the comint mode hook. | |
252 | 86 |
14169 | 87 ;; Shell Mode Commands: |
88 ;; shell Fires up the shell process | |
89 ;; tab comint-dynamic-complete Complete filename/command/history | |
90 ;; m-? comint-dynamic-list-filename-completions | |
91 ;; List completions in help buffer | |
92 ;; m-c-f shell-forward-command Forward a shell command | |
93 ;; m-c-b shell-backward-command Backward a shell command | |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
94 ;; dirs Resync the buffer's dir stack |
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
95 ;; dirtrack-mode Turn dir tracking on/off |
14169 | 96 ;; comint-strip-ctrl-m Remove trailing ^Ms from output |
97 ;; | |
98 ;; The shell mode hook is shell-mode-hook | |
99 ;; comint-prompt-regexp is initialised to shell-prompt-pattern, for backwards | |
100 ;; compatibility. | |
252 | 101 |
14169 | 102 ;; Read the rest of this file for more information. |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
103 |
787
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
104 ;;; Code: |
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
105 |
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
106 (require 'comint) |
3cece0106722
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
107 |
14169 | 108 ;;; Customization and Buffer Variables |
109 | |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
110 (defgroup shell nil |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
111 "Running shell from within Emacs buffers" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
112 :group 'processes |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
113 :group 'unix) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
114 |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
115 (defgroup shell-directories nil |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
116 "Directory support in shell mode" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
117 :group 'shell) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
118 |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
119 (defgroup shell-faces nil |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
120 "Faces in shell buffers" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
121 :group 'shell) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
122 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
123 ;;;###autoload |
31617
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
124 (defcustom shell-dumb-shell-regexp "cmd\\(proxy\\)?\\.exe" |
35643
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
125 "Regexp to match shells that don't save their command history, and |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
126 don't handle the backslash as a quote character. For shells that |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
127 match this regexp, Emacs will write out the command history when the |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
128 shell finishes, and won't remove backslashes when it unquotes shell |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
129 arguments." |
31617
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
130 :type 'regexp |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
131 :group 'shell) |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
132 |
23744
e7128c62a0b4
(shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
23480
diff
changeset
|
133 (defcustom shell-prompt-pattern "^[^#$%>\n]*[#$%>] *" |
252 | 134 "Regexp to match prompts in the inferior shell. |
4131
c9a0f06110bd
* shell.el (shell-process-pushd): Fix syntax error in
Jim Blandy <jimb@redhat.com>
parents:
3418
diff
changeset
|
135 Defaults to \"^[^#$%>\\n]*[#$%>] *\", which works pretty well. |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
136 This variable is used to initialise `comint-prompt-regexp' in the |
252 | 137 shell buffer. |
138 | |
30641
297909766bad
(shell-prompt-pattern): Doc change.
Miles Bader <miles@gnu.org>
parents:
25278
diff
changeset
|
139 This variable is only used if the variable |
297909766bad
(shell-prompt-pattern): Doc change.
Miles Bader <miles@gnu.org>
parents:
25278
diff
changeset
|
140 `comint-use-prompt-regexp-instead-of-fields' is non-nil. |
297909766bad
(shell-prompt-pattern): Doc change.
Miles Bader <miles@gnu.org>
parents:
25278
diff
changeset
|
141 |
4131
c9a0f06110bd
* shell.el (shell-process-pushd): Fix syntax error in
Jim Blandy <jimb@redhat.com>
parents:
3418
diff
changeset
|
142 The pattern should probably not match more than one line. If it does, |
14476
63540fa43674
Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents:
14329
diff
changeset
|
143 Shell mode may become confused trying to distinguish prompt from input |
4131
c9a0f06110bd
* shell.el (shell-process-pushd): Fix syntax error in
Jim Blandy <jimb@redhat.com>
parents:
3418
diff
changeset
|
144 on lines which don't start with a prompt. |
c9a0f06110bd
* shell.el (shell-process-pushd): Fix syntax error in
Jim Blandy <jimb@redhat.com>
parents:
3418
diff
changeset
|
145 |
23744
e7128c62a0b4
(shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
23480
diff
changeset
|
146 This is a fine thing to set in your `.emacs' file." |
e7128c62a0b4
(shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
23480
diff
changeset
|
147 :type 'regexp |
e7128c62a0b4
(shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
23480
diff
changeset
|
148 :group 'shell) |
252 | 149 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
150 (defcustom shell-completion-fignore nil |
6255
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
151 "*List of suffixes to be disregarded during file/command completion. |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
152 This variable is used to initialize `comint-completion-fignore' in the shell |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
153 buffer. The default is nil, for compatibility with most shells. |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
154 Some people like (\"~\" \"#\" \"%\"). |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
155 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
156 This is a fine thing to set in your `.emacs' file." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
157 :type '(repeat (string :tag "Suffix")) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
158 :group 'shell) |
6255
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
159 |
6155
2b445a954b0b
(shell-delimiter-argument-list): Now has chars, not strings.
Richard M. Stallman <rms@gnu.org>
parents:
6152
diff
changeset
|
160 (defvar shell-delimiter-argument-list '(?\| ?& ?< ?> ?\( ?\) ?\;) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
161 "List of characters to recognise as separate arguments. |
6155
2b445a954b0b
(shell-delimiter-argument-list): Now has chars, not strings.
Richard M. Stallman <rms@gnu.org>
parents:
6152
diff
changeset
|
162 This variable is used to initialize `comint-delimiter-argument-list' in the |
15655
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
163 shell buffer. The value may depend on the operating system or shell. |
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
164 |
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
165 This is a fine thing to set in your `.emacs' file.") |
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
166 |
15818
574ec5119c7a
(shell-file-name-chars): Was shell-file-name-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
15655
diff
changeset
|
167 (defvar shell-file-name-chars |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
48105
diff
changeset
|
168 (if (memq system-type '(ms-dos windows-nt cygwin)) |
21621
56d8224fe691
(shell-file-name-chars): Add ',' and ':'.
Geoff Voelker <voelker@cs.washington.edu>
parents:
20971
diff
changeset
|
169 "~/A-Za-z0-9_^$!#%&{}@`'.,:()-" |
15655
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
170 "~/A-Za-z0-9+@:_.$#%,={}-") |
15818
574ec5119c7a
(shell-file-name-chars): Was shell-file-name-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
15655
diff
changeset
|
171 "String of characters valid in a file name. |
574ec5119c7a
(shell-file-name-chars): Was shell-file-name-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
15655
diff
changeset
|
172 This variable is used to initialize `comint-file-name-chars' in the |
15655
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
173 shell buffer. The value may depend on the operating system or shell. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
174 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
175 This is a fine thing to set in your `.emacs' file.") |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
176 |
11186
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
177 (defvar shell-file-name-quote-list |
15655
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
178 (if (memq system-type '(ms-dos windows-nt)) |
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
179 nil |
23219
3b050c4bee18
(shell-file-name-quote-list): Add # to the value.
Karl Heuer <kwzh@gnu.org>
parents:
22636
diff
changeset
|
180 (append shell-delimiter-argument-list '(?\ ?\* ?\! ?\" ?\' ?\` ?\#))) |
11186
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
181 "List of characters to quote when in a file name. |
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
182 This variable is used to initialize `comint-file-name-quote-list' in the |
15655
f2f66323f14a
Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents:
15370
diff
changeset
|
183 shell buffer. The value may depend on the operating system or shell. |
11186
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
184 |
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
185 This is a fine thing to set in your `.emacs' file.") |
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
186 |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
187 (defvar shell-dynamic-complete-functions |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
188 '(comint-replace-by-expanded-history |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
189 shell-dynamic-complete-environment-variable |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
190 shell-dynamic-complete-command |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
191 shell-replace-by-expanded-directory |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
192 comint-dynamic-complete-filename) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
193 "List of functions called to perform completion. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
194 This variable is used to initialise `comint-dynamic-complete-functions' in the |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
195 shell buffer. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
196 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
197 This is a fine thing to set in your `.emacs' file.") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
198 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
199 (defcustom shell-command-regexp "[^;&|\n]+" |
8694
67f6d4905d8c
(shell-command-regexp): Use a simpler faster regexp.
Richard M. Stallman <rms@gnu.org>
parents:
8267
diff
changeset
|
200 "*Regexp to match a single command within a pipeline. |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
201 This is used for directory tracking and does not do a perfect job." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
202 :type 'regexp |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
203 :group 'shell) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
204 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
205 (defcustom shell-completion-execonly t |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
206 "*If non-nil, use executable files only for completion candidates. |
4938 | 207 This mirrors the optional behavior of tcsh. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
208 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
209 Detecting executability of files may slow command completion considerably." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
210 :type 'boolean |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
211 :group 'shell) |
114 | 212 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
213 (defcustom shell-popd-regexp "popd" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
214 "*Regexp to match subshell commands equivalent to popd." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
215 :type 'regexp |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
216 :group 'shell-directories) |
114 | 217 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
218 (defcustom shell-pushd-regexp "pushd" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
219 "*Regexp to match subshell commands equivalent to pushd." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
220 :type 'regexp |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
221 :group 'shell-directories) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
222 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
223 (defcustom shell-pushd-tohome nil |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
224 "*If non-nil, make pushd with no arg behave as \"pushd ~\" (like cd). |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
225 This mirrors the optional behavior of tcsh." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
226 :type 'boolean |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
227 :group 'shell-directories) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
228 |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
229 (defcustom shell-pushd-dextract nil |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
230 "*If non-nil, make \"pushd +n\" pop the nth dir to the stack top. |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
231 This mirrors the optional behavior of tcsh." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
232 :type 'boolean |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
233 :group 'shell-directories) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
234 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
235 (defcustom shell-pushd-dunique nil |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
236 "*If non-nil, make pushd only add unique directories to the stack. |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
237 This mirrors the optional behavior of tcsh." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
238 :type 'boolean |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
239 :group 'shell-directories) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
240 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
241 (defcustom shell-cd-regexp "cd" |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
242 "*Regexp to match subshell commands equivalent to cd." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
243 :type 'regexp |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
244 :group 'shell-directories) |
114 | 245 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
246 (defcustom shell-chdrive-regexp |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
247 (if (memq system-type '(ms-dos windows-nt)) |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
248 ; NetWare allows the five chars between upper and lower alphabetics. |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
249 "[]a-zA-Z^_`\\[\\\\]:" |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
250 nil) |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
251 "*If non-nil, is regexp used to track drive changes." |
19829
4344b744de2f
(shell-chdrive-regexp): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
19476
diff
changeset
|
252 :type '(choice regexp |
4344b744de2f
(shell-chdrive-regexp): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
19476
diff
changeset
|
253 (const nil)) |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
254 :group 'shell-directories) |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
255 |
24069
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
256 (defcustom shell-dirtrack-verbose t |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
257 "*If non-nil, show the directory stack following directory change. |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
258 This is effective only if directory tracking is enabled." |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
259 :type 'boolean |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
260 :group 'shell-directories) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
261 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
262 (defcustom explicit-shell-file-name nil |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
263 "*If non-nil, is file name to use for explicitly requested inferior shell." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
264 :type '(choice (const :tag "None" nil) file) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
265 :group 'shell) |
114 | 266 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
267 (defcustom explicit-csh-args |
114 | 268 (if (eq system-type 'hpux) |
269 ;; -T persuades HP's csh not to think it is smarter | |
270 ;; than us about what terminal modes to use. | |
271 '("-i" "-T") | |
272 '("-i")) | |
273 "*Args passed to inferior shell by M-x shell, if the shell is csh. | |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
274 Value is a list of strings, which may be nil." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
275 :type '(repeat (string :tag "Argument")) |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
276 :group 'shell) |
114 | 277 |
46073
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
278 (defcustom explicit-bash-args |
48105
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
279 ;; Tell bash not to use readline, except for bash 1.x which doesn't grook --noediting. |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
280 ;; Bash 1.x has -nolineediting, but process-send-eof cannot terminate bash if we use it. |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
281 (let* ((prog (or (and (boundp 'explicit-shell-file-name) explicit-shell-file-name) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
282 (getenv "ESHELL") shell-file-name)) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
283 (name (file-name-nondirectory prog))) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
284 (if (and (not purify-flag) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
285 (equal name "bash") |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
286 (file-executable-p prog) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
287 (string-match "bad option" |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
288 (shell-command-to-string (concat prog " --noediting")))) |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
289 '("-i") |
5fbd632e1109
(explicit-bash-args): Bash 1.x doesn't grook
Kim F. Storm <storm@cua.dk>
parents:
48016
diff
changeset
|
290 '("--noediting" "-i"))) |
46073
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
291 "*Args passed to inferior shell by M-x shell, if the shell is bash. |
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
292 Value is a list of strings, which may be nil." |
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
293 :type '(repeat (string :tag "Argument")) |
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
294 :group 'shell) |
58a34a457ab8
(explicit-bash-args): New user option.
Andreas Schwab <schwab@suse.de>
parents:
45285
diff
changeset
|
295 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
296 (defcustom shell-input-autoexpand 'history |
5538
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
297 "*If non-nil, expand input command history references on completion. |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
298 This mirrors the optional behavior of tcsh (its autoexpand and histlit). |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
299 |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
300 If the value is `input', then the expansion is seen on input. |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
301 If the value is `history', then the expansion is only when inserting |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
302 into the buffer's input ring. See also `comint-magic-space' and |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
303 `comint-dynamic-complete'. |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
304 |
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
305 This variable supplies a default for `comint-input-autoexpand', |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
306 for Shell mode only." |
23274
0c30ca946dba
(shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23219
diff
changeset
|
307 :type '(choice (const :tag "off" nil) |
0c30ca946dba
(shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23219
diff
changeset
|
308 (const input) |
0c30ca946dba
(shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23219
diff
changeset
|
309 (const history) |
0c30ca946dba
(shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23219
diff
changeset
|
310 (const :tag "on" t)) |
23480
2046e6b0bc8e
(shell-input-autoexpand): Fix customization group.
Richard M. Stallman <rms@gnu.org>
parents:
23274
diff
changeset
|
311 :group 'shell) |
5538
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
312 |
114 | 313 (defvar shell-dirstack nil |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
314 "List of directories saved by pushd in this buffer's shell. |
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
315 Thus, this does not include the shell's current directory.") |
114 | 316 |
6152
34d9a0aa80d1
(shell-dirtrackp): Variable definition added.
Richard M. Stallman <rms@gnu.org>
parents:
6150
diff
changeset
|
317 (defvar shell-dirtrackp t |
34d9a0aa80d1
(shell-dirtrackp): Variable definition added.
Richard M. Stallman <rms@gnu.org>
parents:
6150
diff
changeset
|
318 "Non-nil in a shell buffer means directory tracking is enabled.") |
34d9a0aa80d1
(shell-dirtrackp): Variable definition added.
Richard M. Stallman <rms@gnu.org>
parents:
6150
diff
changeset
|
319 |
2351
bb1ff4e31fb6
Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1801
diff
changeset
|
320 (defvar shell-last-dir nil |
bb1ff4e31fb6
Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1801
diff
changeset
|
321 "Keep track of last directory for ksh `cd -' command.") |
bb1ff4e31fb6
Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1801
diff
changeset
|
322 |
7083
9630c48595d8
(shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents:
6887
diff
changeset
|
323 (defvar shell-dirstack-query nil |
2609
af46e8faaa32
(shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents:
2573
diff
changeset
|
324 "Command used by `shell-resync-dir' to query the shell.") |
114 | 325 |
6150
c1dde384f0dd
(shell-mode-map): Use copy-keymap.
Richard M. Stallman <rms@gnu.org>
parents:
5880
diff
changeset
|
326 (defvar shell-mode-map nil) |
114 | 327 (cond ((not shell-mode-map) |
8889
323936455525
(shell-mode-map): Inherit comint-mode-map, but copy the completion menu.
Richard M. Stallman <rms@gnu.org>
parents:
8694
diff
changeset
|
328 (setq shell-mode-map (nconc (make-sparse-keymap) comint-mode-map)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
329 (define-key shell-mode-map "\C-c\C-f" 'shell-forward-command) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
330 (define-key shell-mode-map "\C-c\C-b" 'shell-backward-command) |
43844
a0885debe0c5
(toplevel): Revert previous change to use pcomplete.
Colin Walters <walters@gnu.org>
parents:
43529
diff
changeset
|
331 (define-key shell-mode-map "\t" 'comint-dynamic-complete) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
332 (define-key shell-mode-map "\M-?" |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
333 'comint-dynamic-list-filename-completions) |
8889
323936455525
(shell-mode-map): Inherit comint-mode-map, but copy the completion menu.
Richard M. Stallman <rms@gnu.org>
parents:
8694
diff
changeset
|
334 (define-key shell-mode-map [menu-bar completion] |
45284
723fdd614e34
(shell-mode): Make second part of initialisation
Francesco Potortì <pot@gnu.org>
parents:
45214
diff
changeset
|
335 (cons "Complete" |
43521
c61a65062ae1
(shell-mode-map): Add "Complete" header so completion
Kim F. Storm <storm@cua.dk>
parents:
43491
diff
changeset
|
336 (copy-keymap (lookup-key comint-mode-map [menu-bar completion])))) |
6887
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
337 (define-key-after (lookup-key shell-mode-map [menu-bar completion]) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
338 [complete-env-variable] '("Complete Env. Variable Name" . |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
339 shell-dynamic-complete-environment-variable) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
340 'complete-file) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
341 (define-key-after (lookup-key shell-mode-map [menu-bar completion]) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
342 [expand-directory] '("Expand Directory Reference" . |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
343 shell-replace-by-expanded-directory) |
9888d3b32db3
(shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents:
6885
diff
changeset
|
344 'complete-expand))) |
114 | 345 |
17428
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
346 (defcustom shell-mode-hook '() |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
347 "*Hook for customising Shell mode." |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
348 :type 'hook |
653c0e2e1b31
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16877
diff
changeset
|
349 :group 'shell) |
114 | 350 |
9383
c4fa081b416e
(shell-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9244
diff
changeset
|
351 (defvar shell-font-lock-keywords |
31037
7c81a282d217
(shell-font-lock-keywords): Remove prompt highlighting, since this is
Miles Bader <miles@gnu.org>
parents:
30641
diff
changeset
|
352 '(("[ \t]\\([+-][^ \t\n]+\\)" 1 font-lock-comment-face) |
17497
3ee027d263c6
Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents:
17428
diff
changeset
|
353 ("^[^ \t\n]+:.*" . font-lock-string-face) |
3ee027d263c6
Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents:
17428
diff
changeset
|
354 ("^\\[[1-9][0-9]*\\]" . font-lock-string-face)) |
9383
c4fa081b416e
(shell-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9244
diff
changeset
|
355 "Additional expressions to highlight in Shell mode.") |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
356 |
114 | 357 ;;; Basic Procedures |
358 | |
17646
0dcc993f06e4
(shell-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17497
diff
changeset
|
359 (put 'shell-mode 'mode-class 'special) |
0dcc993f06e4
(shell-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17497
diff
changeset
|
360 |
33706
8c460ceb4916
(shell-mode): Use define-derived-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32943
diff
changeset
|
361 (define-derived-mode shell-mode comint-mode "Shell" |
114 | 362 "Major mode for interacting with an inferior shell. |
10831
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
363 \\[comint-send-input] after the end of the process' output sends the text from |
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
364 the end of process to the end of the current line. |
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
365 \\[comint-send-input] before end of process output copies the current line minus the prompt to |
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
366 the end of the buffer and sends it (\\[comint-copy-old-input] just copies the current line). |
10377
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
367 \\[send-invisible] reads a line of text without echoing it, and sends it to |
6508
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
368 the shell. This is useful for entering passwords. Or, add the function |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
369 `comint-watch-for-password-prompt' to `comint-output-filter-functions'. |
114 | 370 |
10377
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
371 If you want to make multiple shell buffers, rename the `*shell*' buffer |
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
372 using \\[rename-buffer] or \\[rename-uniquely] and start a new shell. |
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
373 |
10831
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
374 If you want to make shell buffers limited in length, add the function |
10832
32d4c4ca1ff8
Moved buffer truncation functionality to comint.el.
Simon Marshall <simon@gnu.org>
parents:
10831
diff
changeset
|
375 `comint-truncate-buffer' to `comint-output-filter-functions'. |
10831
94811e4b2a06
Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents:
10791
diff
changeset
|
376 |
114 | 377 If you accidentally suspend your process, use \\[comint-continue-subjob] |
378 to continue it. | |
379 | |
10377
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
380 `cd', `pushd' and `popd' commands given to the shell are watched by Emacs to |
2123413a483e
Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents:
10019
diff
changeset
|
381 keep this buffer's default directory the same as the shell's working directory. |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
382 While directory tracking is enabled, the shell's working directory is displayed |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
383 by \\[list-buffers] or \\[mouse-buffer-menu] in the `File' field. |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
384 \\[dirs] queries the shell and resyncs Emacs' idea of what the current |
114 | 385 directory stack is. |
20971
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
386 \\[dirtrack-mode] turns directory tracking on and off. |
114 | 387 |
388 \\{shell-mode-map} | |
2609
af46e8faaa32
(shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents:
2573
diff
changeset
|
389 Customization: Entry to this mode runs the hooks on `comint-mode-hook' and |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
390 `shell-mode-hook' (in that order). Before each input, the hooks on |
6189
4ff931c18e4b
Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents:
6186
diff
changeset
|
391 `comint-input-filter-functions' are run. After each shell output, the hooks |
4ff931c18e4b
Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents:
6186
diff
changeset
|
392 on `comint-output-filter-functions' are run. |
114 | 393 |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
394 Variables `shell-cd-regexp', `shell-chdrive-regexp', `shell-pushd-regexp' |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
395 and `shell-popd-regexp' are used to match their respective commands, |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
396 while `shell-pushd-tohome', `shell-pushd-dextract' and `shell-pushd-dunique' |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
397 control the behavior of the relevant command. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
398 |
6255
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
399 Variables `comint-completion-autolist', `comint-completion-addsuffix', |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
400 `comint-completion-recexact' and `comint-completion-fignore' control the |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
401 behavior of file name, command name and variable name completion. Variable |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
402 `shell-completion-execonly' controls the behavior of command name completion. |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
403 Variable `shell-completion-fignore' is used to initialise the value of |
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
404 `comint-completion-fignore'. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
405 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
406 Variables `comint-input-ring-file-name' and `comint-input-autoexpand' control |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
407 the initialisation of the input ring history, and history expansion. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
408 |
6189
4ff931c18e4b
Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents:
6186
diff
changeset
|
409 Variables `comint-output-filter-functions', a hook, and |
6255
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
410 `comint-scroll-to-bottom-on-input' and `comint-scroll-to-bottom-on-output' |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
411 control whether input and output cause the window to scroll to the end of the |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
412 buffer." |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
413 (setq comint-prompt-regexp shell-prompt-pattern) |
6255
277d9ace9f5d
(shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6189
diff
changeset
|
414 (setq comint-completion-fignore shell-completion-fignore) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
415 (setq comint-delimiter-argument-list shell-delimiter-argument-list) |
15818
574ec5119c7a
(shell-file-name-chars): Was shell-file-name-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
15655
diff
changeset
|
416 (setq comint-file-name-chars shell-file-name-chars) |
11186
54a20705cf02
Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents:
11154
diff
changeset
|
417 (setq comint-file-name-quote-list shell-file-name-quote-list) |
43844
a0885debe0c5
(toplevel): Revert previous change to use pcomplete.
Colin Walters <walters@gnu.org>
parents:
43529
diff
changeset
|
418 (setq comint-dynamic-complete-functions shell-dynamic-complete-functions) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
419 (make-local-variable 'paragraph-start) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
420 (setq paragraph-start comint-prompt-regexp) |
9485
2685c7803c18
* shell.el: (shell-font-lock-keywords): Add `\n' to [^] regexps.
Simon Marshall <simon@gnu.org>
parents:
9383
diff
changeset
|
421 (make-local-variable 'font-lock-defaults) |
2685c7803c18
* shell.el: (shell-font-lock-keywords): Add `\n' to [^] regexps.
Simon Marshall <simon@gnu.org>
parents:
9383
diff
changeset
|
422 (setq font-lock-defaults '(shell-font-lock-keywords t)) |
114 | 423 (make-local-variable 'shell-dirstack) |
252 | 424 (setq shell-dirstack nil) |
19469
41215527a262
Make shell-last-dir buffer-local.
Simon Marshall <simon@gnu.org>
parents:
19121
diff
changeset
|
425 (make-local-variable 'shell-last-dir) |
2351
bb1ff4e31fb6
Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1801
diff
changeset
|
426 (setq shell-last-dir nil) |
252 | 427 (make-local-variable 'shell-dirtrackp) |
428 (setq shell-dirtrackp t) | |
12213
59bfaac6cee2
(shell-mode): Make shell-directory-tracker a hook function locally only.
Richard M. Stallman <rms@gnu.org>
parents:
12201
diff
changeset
|
429 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t) |
5538
9d84549e89b4
(shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5474
diff
changeset
|
430 (setq comint-input-autoexpand shell-input-autoexpand) |
18878
f39ae9c61a45
(shell-mode): Do set list-files-directory locally.
Richard M. Stallman <rms@gnu.org>
parents:
18805
diff
changeset
|
431 ;; This is not really correct, since the shell buffer does not really |
f39ae9c61a45
(shell-mode): Do set list-files-directory locally.
Richard M. Stallman <rms@gnu.org>
parents:
18805
diff
changeset
|
432 ;; edit this directory. But it is useful in the buffer list and menus. |
f39ae9c61a45
(shell-mode): Do set list-files-directory locally.
Richard M. Stallman <rms@gnu.org>
parents:
18805
diff
changeset
|
433 (make-local-variable 'list-buffers-directory) |
f39ae9c61a45
(shell-mode): Do set list-files-directory locally.
Richard M. Stallman <rms@gnu.org>
parents:
18805
diff
changeset
|
434 (setq list-buffers-directory (expand-file-name default-directory)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
435 ;; shell-dependent assignments. |
45285
dc0eece6818b
(shell-mode): Use (ring-empty-p rather than (zerop (ring-length.
Francesco Potortì <pot@gnu.org>
parents:
45284
diff
changeset
|
436 (when (ring-empty-p comint-input-ring) |
44374
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
437 (let ((shell (file-name-nondirectory (car |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
438 (process-command (get-buffer-process (current-buffer))))))) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
439 (setq comint-input-ring-file-name |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
440 (or (getenv "HISTFILE") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
441 (cond ((string-equal shell "bash") "~/.bash_history") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
442 ((string-equal shell "ksh") "~/.sh_history") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
443 (t "~/.history")))) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
444 (if (or (equal comint-input-ring-file-name "") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
445 (equal (file-truename comint-input-ring-file-name) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
446 (file-truename "/dev/null"))) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
447 (setq comint-input-ring-file-name nil)) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
448 ;; Arrange to write out the input ring on exit, if the shell doesn't |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
449 ;; do this itself. |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
450 (if (and comint-input-ring-file-name |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
451 (string-match shell-dumb-shell-regexp shell)) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
452 (set-process-sentinel (get-buffer-process (current-buffer)) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
453 #'shell-write-history-on-exit)) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
454 (setq shell-dirstack-query |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
455 (cond ((string-equal shell "sh") "pwd") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
456 ((string-equal shell "ksh") "echo $PWD ~-") |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
457 (t "dirs")))) |
2472e2446b55
(shell-mode): Don't reinit comint-input-ring if that was already done.
Richard M. Stallman <rms@gnu.org>
parents:
43844
diff
changeset
|
458 (comint-read-input-ring t))) |
31617
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
459 |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
460 (defun shell-write-history-on-exit (process event) |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
461 "Called when the shell process is stopped. |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
462 |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
463 Writes the input history to a history file |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
464 `comint-input-ring-file-name' using `comint-write-input-ring' |
31617
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
465 and inserts a short message in the shell buffer. |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
466 |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
467 This function is a sentinel watching the shell interpreter process. |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
468 Sentinels will always get the two parameters PROCESS and EVENT." |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
469 ;; Write history. |
3ed336667dbc
(shell-write-history-on-exit): New function.
Andrew Innes <andrewi@gnu.org>
parents:
31037
diff
changeset
|
470 (comint-write-input-ring) |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
471 (let ((buf (process-buffer process))) |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
472 (when (buffer-live-p buf) |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
473 (with-current-buffer buf |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
474 (insert (format "\nProcess %s %s\n" process event)))))) |
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
475 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
476 ;;;###autoload |
32943
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
477 (defun shell (&optional buffer) |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
478 "Run an inferior shell, with I/O through BUFFER (which defaults to `*shell*'). |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
479 Interactively, a prefix arg means to prompt for BUFFER. |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
480 If BUFFER exists but shell process is not running, make new shell. |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
481 If BUFFER exists and shell process is running, just switch to BUFFER. |
2609
af46e8faaa32
(shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents:
2573
diff
changeset
|
482 Program used comes from variable `explicit-shell-file-name', |
252 | 483 or (if that is nil) from the ESHELL environment variable, |
484 or else from SHELL if there is no ESHELL. | |
1076 | 485 If a file `~/.emacs_SHELLNAME' exists, it is given as initial input |
252 | 486 (Note that this may lose due to a timing error if the shell |
487 discards input when it starts up.) | |
1076 | 488 The buffer is put in Shell mode, giving commands for sending input |
489 and controlling the subjobs of the shell. See `shell-mode'. | |
490 See also the variable `shell-prompt-pattern'. | |
114 | 491 |
19121 | 492 To specify a coding system for converting non-ASCII characters |
493 in the input and output to the shell, use \\[universal-coding-system-argument] | |
494 before \\[shell]. You can also specify this with \\[set-buffer-process-coding-system] | |
495 in the shell buffer, after you start the shell. | |
496 The default comes from `process-coding-system-alist' and | |
497 `default-process-coding-system'. | |
498 | |
252 | 499 The shell file name (sans directories) is used to make a symbol name |
1801 | 500 such as `explicit-csh-args'. If that symbol is a variable, |
114 | 501 its value is used as a list of arguments when invoking the shell. |
502 Otherwise, one argument `-i' is passed to the shell. | |
503 | |
504 \(Type \\[describe-mode] in the shell buffer for a list of commands.)" | |
32943
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
505 (interactive |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
506 (list |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
507 (and current-prefix-arg |
a0120c3e98f7
(shell): Add BUFFER argument.
Miles Bader <miles@gnu.org>
parents:
31617
diff
changeset
|
508 (read-buffer "Shell buffer: " "*shell*")))) |
41777
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
509 (setq buffer (get-buffer-create (or buffer "*shell*"))) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
510 ;; Pop to buffer, so that the buffer's window will be correctly set |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
511 ;; when we call comint (so that comint sets the COLUMNS env var properly). |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
512 (pop-to-buffer buffer) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
513 (unless (comint-check-proc buffer) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
514 (let* ((prog (or explicit-shell-file-name |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
515 (getenv "ESHELL") shell-file-name)) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
516 (name (file-name-nondirectory prog)) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
517 (startfile (concat "~/.emacs_" name)) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
518 (xargs-name (intern-soft (concat "explicit-" name "-args")))) |
48016
52a504c502a5
(shell): Look for .emacs_SHELL under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
parents:
46159
diff
changeset
|
519 (if (not (file-exists-p startfile)) |
52a504c502a5
(shell): Look for .emacs_SHELL under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
parents:
46159
diff
changeset
|
520 (setq startfile (concat "~/.emacs.d/.emacs_" name))) |
41777
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
521 (apply 'make-comint-in-buffer "shell" buffer prog |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
522 (if (file-exists-p startfile) startfile) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
523 (if (and xargs-name (boundp xargs-name)) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
524 (symbol-value xargs-name) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
525 '("-i"))) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
526 (shell-mode))) |
ca6dfcb53a03
(shell): Use shell-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
527 buffer) |
10975
5abad4aec8e0
(shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
10878
diff
changeset
|
528 |
5abad4aec8e0
(shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
10878
diff
changeset
|
529 ;;; Don't do this when shell.el is loaded, only while dumping. |
5abad4aec8e0
(shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
10878
diff
changeset
|
530 ;;;###autoload (add-hook 'same-window-buffer-names "*shell*") |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
531 |
114 | 532 ;;; Directory tracking |
14169 | 533 ;;; |
114 | 534 ;;; This code provides the shell mode input sentinel |
535 ;;; SHELL-DIRECTORY-TRACKER | |
536 ;;; that tracks cd, pushd, and popd commands issued to the shell, and | |
537 ;;; changes the current directory of the shell buffer accordingly. | |
538 ;;; | |
539 ;;; This is basically a fragile hack, although it's more accurate than | |
2469 | 540 ;;; the version in Emacs 18's shell.el. It has the following failings: |
114 | 541 ;;; 1. It doesn't know about the cdpath shell variable. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
542 ;;; 2. It cannot infallibly deal with command sequences, though it does well |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
543 ;;; with these and with ignoring commands forked in another shell with ()s. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
544 ;;; 3. More generally, any complex command is going to throw it. Otherwise, |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
545 ;;; you'd have to build an entire shell interpreter in emacs lisp. Failing |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
546 ;;; that, there's no way to catch shell commands where cd's are buried |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
547 ;;; inside conditional expressions, aliases, and so forth. |
114 | 548 ;;; |
549 ;;; The whole approach is a crock. Shell aliases mess it up. File sourcing | |
550 ;;; messes it up. You run other processes under the shell; these each have | |
551 ;;; separate working directories, and some have commands for manipulating | |
552 ;;; their w.d.'s (e.g., the lcd command in ftp). Some of these programs have | |
252 | 553 ;;; commands that do *not* affect the current w.d. at all, but look like they |
114 | 554 ;;; do (e.g., the cd command in ftp). In shells that allow you job |
555 ;;; control, you can switch between jobs, all having different w.d.'s. So | |
556 ;;; simply saying %3 can shift your w.d.. | |
557 ;;; | |
558 ;;; The solution is to relax, not stress out about it, and settle for | |
559 ;;; a hack that works pretty well in typical circumstances. Remember | |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
560 ;;; that a half-assed solution is more in keeping with the spirit of Unix, |
114 | 561 ;;; anyway. Blech. |
562 ;;; | |
563 ;;; One good hack not implemented here for users of programmable shells | |
564 ;;; is to program up the shell w.d. manipulation commands to output | |
565 ;;; a coded command sequence to the tty. Something like | |
566 ;;; ESC | <cwd> | | |
567 ;;; where <cwd> is the new current working directory. Then trash the | |
568 ;;; directory tracking machinery currently used in this package, and | |
569 ;;; replace it with a process filter that watches for and strips out | |
570 ;;; these messages. | |
571 | |
572 (defun shell-directory-tracker (str) | |
573 "Tracks cd, pushd and popd commands issued to the shell. | |
574 This function is called on each input passed to the shell. | |
575 It watches for cd, pushd and popd commands and sets the buffer's | |
576 default directory to track these commands. | |
577 | |
20971
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
578 You may toggle this tracking on and off with M-x dirtrack-mode. |
114 | 579 If emacs gets confused, you can resync with the shell with M-x dirs. |
580 | |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
581 See variables `shell-cd-regexp', `shell-chdrive-regexp', `shell-pushd-regexp', |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
582 and `shell-popd-regexp', while `shell-pushd-tohome', `shell-pushd-dextract', |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
583 and `shell-pushd-dunique' control the behavior of the relevant command. |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
584 |
2609
af46e8faaa32
(shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents:
2573
diff
changeset
|
585 Environment variables are expanded, see function `substitute-in-file-name'." |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
586 (if shell-dirtrackp |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
587 ;; We fail gracefully if we think the command will fail in the shell. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
588 (condition-case chdir-failure |
12323
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
589 (let ((start (progn (string-match "^[; \t]*" str) ; skip whitespace |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
590 (match-end 0))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
591 end cmd arg1) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
592 (while (string-match shell-command-regexp str start) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
593 (setq end (match-end 0) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
594 cmd (comint-arguments (substring str start end) 0 0) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
595 arg1 (comint-arguments (substring str start end) 1 1)) |
24967
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
596 (if arg1 |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
597 (setq arg1 (shell-unquote-argument arg1))) |
12323
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
598 (cond ((string-match (concat "\\`\\(" shell-popd-regexp |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
599 "\\)\\($\\|[ \t]\\)") |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
600 cmd) |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
601 (shell-process-popd (comint-substitute-in-file-name arg1))) |
12323
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
602 ((string-match (concat "\\`\\(" shell-pushd-regexp |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
603 "\\)\\($\\|[ \t]\\)") |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
604 cmd) |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
605 (shell-process-pushd (comint-substitute-in-file-name arg1))) |
12323
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
606 ((string-match (concat "\\`\\(" shell-cd-regexp |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
607 "\\)\\($\\|[ \t]\\)") |
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
608 cmd) |
15370
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
609 (shell-process-cd (comint-substitute-in-file-name arg1))) |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
610 ((and shell-chdrive-regexp |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
611 (string-match (concat "\\`\\(" shell-chdrive-regexp |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
612 "\\)\\($\\|[ \t]\\)") |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
613 cmd)) |
b75fc8f3b376
(shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents:
15327
diff
changeset
|
614 (shell-process-cd (comint-substitute-in-file-name cmd)))) |
12323
a48a0352b344
(shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents:
12213
diff
changeset
|
615 (setq start (progn (string-match "[; \t]*" str end) ; skip again |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
616 (match-end 0))))) |
6189
4ff931c18e4b
Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents:
6186
diff
changeset
|
617 (error "Couldn't cd")))) |
114 | 618 |
24967
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
619 (defun shell-unquote-argument (string) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
620 "Remove all kinds of shell quoting from STRING." |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
621 (save-match-data |
35643
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
622 (let ((idx 0) next inside |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
623 (quote-chars |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
624 (if (string-match shell-dumb-shell-regexp |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
625 (file-name-nondirectory |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
626 (car (process-command (get-buffer-process (current-buffer)))))) |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
627 "['`\"]" |
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
628 "[\\'`\"]"))) |
24967
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
629 (while (and (< idx (length string)) |
35643
cafc43e2ccfd
(shell-unquote-argument): If the shell is one of the
Eli Zaretskii <eliz@gnu.org>
parents:
33706
diff
changeset
|
630 (setq next (string-match quote-chars string next))) |
24967
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
631 (cond ((= (aref string next) ?\\) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
632 (setq string (replace-match "" nil nil string)) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
633 (setq next (1+ next))) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
634 ((and inside (= (aref string next) inside)) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
635 (setq string (replace-match "" nil nil string)) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
636 (setq inside nil)) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
637 (inside |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
638 (setq next (1+ next))) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
639 (t |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
640 (setq inside (aref string next)) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
641 (setq string (replace-match "" nil nil string))))) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
642 string))) |
03990f1d9e2d
(shell-unquote-argument): New function.
Karl Heuer <kwzh@gnu.org>
parents:
24738
diff
changeset
|
643 |
114 | 644 ;;; popd [+n] |
645 (defun shell-process-popd (arg) | |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
646 (let ((num (or (shell-extract-num arg) 0))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
647 (cond ((and num (= num 0) shell-dirstack) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
648 (shell-cd (car shell-dirstack)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
649 (setq shell-dirstack (cdr shell-dirstack)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
650 (shell-dirstack-message)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
651 ((and num (> num 0) (<= num (length shell-dirstack))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
652 (let* ((ds (cons nil shell-dirstack)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
653 (cell (nthcdr (1- num) ds))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
654 (rplacd cell (cdr (cdr cell))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
655 (setq shell-dirstack (cdr ds)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
656 (shell-dirstack-message))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
657 (t |
6189
4ff931c18e4b
Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents:
6186
diff
changeset
|
658 (error "Couldn't popd"))))) |
114 | 659 |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
660 ;; Return DIR prefixed with comint-file-name-prefix as appropriate. |
8033
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
661 (defun shell-prefixed-directory-name (dir) |
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
662 (if (= (length comint-file-name-prefix) 0) |
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
663 dir |
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
664 (if (file-name-absolute-p dir) |
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
665 ;; The name is absolute, so prepend the prefix. |
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
666 (concat comint-file-name-prefix dir) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
667 ;; For relative name we assume default-directory already has the prefix. |
8033
bedead77e86f
(shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents:
7610
diff
changeset
|
668 (expand-file-name dir)))) |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
669 |
114 | 670 ;;; cd [dir] |
671 (defun shell-process-cd (arg) | |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
672 (let ((new-dir (cond ((zerop (length arg)) (concat comint-file-name-prefix |
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
673 "~")) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
674 ((string-equal "-" arg) shell-last-dir) |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
675 (t (shell-prefixed-directory-name arg))))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
676 (setq shell-last-dir default-directory) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
677 (shell-cd new-dir) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
678 (shell-dirstack-message))) |
114 | 679 |
680 ;;; pushd [+n | dir] | |
681 (defun shell-process-pushd (arg) | |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
682 (let ((num (shell-extract-num arg))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
683 (cond ((zerop (length arg)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
684 ;; no arg -- swap pwd and car of stack unless shell-pushd-tohome |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
685 (cond (shell-pushd-tohome |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
686 (shell-process-pushd (concat comint-file-name-prefix "~"))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
687 (shell-dirstack |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
688 (let ((old default-directory)) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
689 (shell-cd (car shell-dirstack)) |
14476
63540fa43674
Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents:
14329
diff
changeset
|
690 (setq shell-dirstack (cons old (cdr shell-dirstack))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
691 (shell-dirstack-message))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
692 (t |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
693 (message "Directory stack empty.")))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
694 ((numberp num) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
695 ;; pushd +n |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
696 (cond ((> num (length shell-dirstack)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
697 (message "Directory stack not that deep.")) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
698 ((= num 0) |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
35659
diff
changeset
|
699 (error (message "Couldn't cd"))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
700 (shell-pushd-dextract |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
701 (let ((dir (nth (1- num) shell-dirstack))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
702 (shell-process-popd arg) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
703 (shell-process-pushd default-directory) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
704 (shell-cd dir) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
705 (shell-dirstack-message))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
706 (t |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
707 (let* ((ds (cons default-directory shell-dirstack)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
708 (dslen (length ds)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
709 (front (nthcdr num ds)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
710 (back (reverse (nthcdr (- dslen num) (reverse ds)))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
711 (new-ds (append front back))) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
712 (shell-cd (car new-ds)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
713 (setq shell-dirstack (cdr new-ds)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
714 (shell-dirstack-message))))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
715 (t |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
716 ;; pushd <dir> |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
717 (let ((old-wd default-directory)) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
718 (shell-cd (shell-prefixed-directory-name arg)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
719 (if (or (null shell-pushd-dunique) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
720 (not (member old-wd shell-dirstack))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
721 (setq shell-dirstack (cons old-wd shell-dirstack))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
722 (shell-dirstack-message)))))) |
114 | 723 |
724 ;; If STR is of the form +n, for n>0, return n. Otherwise, nil. | |
725 (defun shell-extract-num (str) | |
726 (and (string-match "^\\+[1-9][0-9]*$" str) | |
727 (string-to-int str))) | |
728 | |
729 | |
20971
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
730 (defun shell-dirtrack-mode () |
114 | 731 "Turn directory tracking on and off in a shell buffer." |
732 (interactive) | |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
733 (if (setq shell-dirtrackp (not shell-dirtrackp)) |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
734 (setq list-buffers-directory default-directory) |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
735 (setq list-buffers-directory nil)) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
736 (message "Directory tracking %s" (if shell-dirtrackp "ON" "OFF"))) |
114 | 737 |
738 ;;; For your typing convenience: | |
20971
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
739 (defalias 'shell-dirtrack-toggle 'shell-dirtrack-mode) |
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
740 (defalias 'dirtrack-toggle 'shell-dirtrack-mode) |
22a407edd2f0
(shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents:
19829
diff
changeset
|
741 (defalias 'dirtrack-mode 'shell-dirtrack-mode) |
114 | 742 |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
743 (defun shell-cd (dir) |
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
744 "Do normal `cd' to DIR, and set `list-buffers-directory'." |
10878
9556a4d578f2
Make sure shell-cd sets list-buffers-directory to a directory ending with `/'.
Simon Marshall <simon@gnu.org>
parents:
10832
diff
changeset
|
745 (if shell-dirtrackp |
9556a4d578f2
Make sure shell-cd sets list-buffers-directory to a directory ending with `/'.
Simon Marshall <simon@gnu.org>
parents:
10832
diff
changeset
|
746 (setq list-buffers-directory (file-name-as-directory |
9556a4d578f2
Make sure shell-cd sets list-buffers-directory to a directory ending with `/'.
Simon Marshall <simon@gnu.org>
parents:
10832
diff
changeset
|
747 (expand-file-name dir)))) |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
748 (cd dir)) |
114 | 749 |
750 (defun shell-resync-dirs () | |
751 "Resync the buffer's idea of the current directory stack. | |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
752 This command queries the shell with the command bound to |
2609
af46e8faaa32
(shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents:
2573
diff
changeset
|
753 `shell-dirstack-query' (default \"dirs\"), reads the next |
114 | 754 line output and parses it to form the new directory stack. |
755 DON'T issue this command unless the buffer is at a shell prompt. | |
756 Also, note that if some other subprocess decides to do output | |
757 immediately after the query, its output will be taken as the | |
758 new directory stack -- you lose. If this happens, just do the | |
759 command again." | |
760 (interactive) | |
761 (let* ((proc (get-buffer-process (current-buffer))) | |
762 (pmark (process-mark proc))) | |
763 (goto-char pmark) | |
764 (insert shell-dirstack-query) (insert "\n") | |
765 (sit-for 0) ; force redisplay | |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
766 (comint-send-string proc shell-dirstack-query) |
114 | 767 (comint-send-string proc "\n") |
768 (set-marker pmark (point)) | |
769 (let ((pt (point))) ; wait for 1 line | |
770 ;; This extra newline prevents the user's pending input from spoofing us. | |
771 (insert "\n") (backward-char 1) | |
772 (while (not (looking-at ".+\n")) | |
773 (accept-process-output proc) | |
774 (goto-char pt))) | |
775 (goto-char pmark) (delete-char 1) ; remove the extra newline | |
776 ;; That's the dirlist. grab it & parse it. | |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
777 (let* ((dl (buffer-substring (match-beginning 0) (1- (match-end 0)))) |
114 | 778 (dl-len (length dl)) |
779 (ds '()) ; new dir stack | |
780 (i 0)) | |
781 (while (< i dl-len) | |
782 ;; regexp = optional whitespace, (non-whitespace), optional whitespace | |
783 (string-match "\\s *\\(\\S +\\)\\s *" dl i) ; pick off next dir | |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
784 (setq ds (cons (concat comint-file-name-prefix |
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
785 (substring dl (match-beginning 1) |
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
786 (match-end 1))) |
114 | 787 ds)) |
788 (setq i (match-end 0))) | |
5474
239620e1795d
(shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents:
5335
diff
changeset
|
789 (let ((ds (nreverse ds))) |
114 | 790 (condition-case nil |
10791
1d1db37a4bb7
Change all `cd's to `shell-cd's, where `shell-cd' changes the value of
Simon Marshall <simon@gnu.org>
parents:
10657
diff
changeset
|
791 (progn (shell-cd (car ds)) |
14476
63540fa43674
Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents:
14329
diff
changeset
|
792 (setq shell-dirstack (cdr ds) |
63540fa43674
Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents:
14329
diff
changeset
|
793 shell-last-dir (car shell-dirstack)) |
114 | 794 (shell-dirstack-message)) |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
35659
diff
changeset
|
795 (error (message "Couldn't cd"))))))) |
114 | 796 |
797 ;;; For your typing convenience: | |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2557
diff
changeset
|
798 (defalias 'dirs 'shell-resync-dirs) |
114 | 799 |
800 | |
801 ;;; Show the current dirstack on the message line. | |
802 ;;; Pretty up dirs a bit by changing "/usr/jqr/foo" to "~/foo". | |
803 ;;; (This isn't necessary if the dirlisting is generated with a simple "dirs".) | |
804 ;;; All the commands that mung the buffer's dirstack finish by calling | |
805 ;;; this guy. | |
806 (defun shell-dirstack-message () | |
24069
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
807 (when shell-dirtrack-verbose |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
808 (let* ((msg "") |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
809 (ds (cons default-directory shell-dirstack)) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
810 (home (expand-file-name (concat comint-file-name-prefix "~/"))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
811 (homelen (length home))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
812 (while ds |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
813 (let ((dir (car ds))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
814 (and (>= (length dir) homelen) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
815 (string= home (substring dir 0 homelen)) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
816 (setq dir (concat "~/" (substring dir homelen)))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
817 ;; Strip off comint-file-name-prefix if present. |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
818 (and comint-file-name-prefix |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
819 (>= (length dir) (length comint-file-name-prefix)) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
820 (string= comint-file-name-prefix |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
821 (substring dir 0 (length comint-file-name-prefix))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
822 (setq dir (substring dir (length comint-file-name-prefix))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
823 (setcar ds dir)) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
824 (setq msg (concat msg (directory-file-name dir) " ")) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
825 (setq ds (cdr ds)))) |
8d500ceed9d1
* shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents:
23744
diff
changeset
|
826 (message "%s" msg)))) |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
827 |
19476
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
828 ;; This was mostly copied from shell-resync-dirs. |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
829 (defun shell-snarf-envar (var) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
830 "Return as a string the shell's value of environment variable VAR." |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
831 (let* ((cmd (format "printenv '%s'\n" var)) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
832 (proc (get-buffer-process (current-buffer))) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
833 (pmark (process-mark proc))) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
834 (goto-char pmark) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
835 (insert cmd) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
836 (sit-for 0) ; force redisplay |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
837 (comint-send-string proc cmd) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
838 (set-marker pmark (point)) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
839 (let ((pt (point))) ; wait for 1 line |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
840 ;; This extra newline prevents the user's pending input from spoofing us. |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
841 (insert "\n") (backward-char 1) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
842 (while (not (looking-at ".+\n")) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
843 (accept-process-output proc) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
844 (goto-char pt))) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
845 (goto-char pmark) (delete-char 1) ; remove the extra newline |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
846 (buffer-substring (match-beginning 0) (1- (match-end 0))))) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
847 |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
848 (defun shell-copy-environment-variable (variable) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
849 "Copy the environment variable VARIABLE from the subshell to Emacs. |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
850 This command reads the value of the specified environment variable |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
851 in the shell, and sets the same environment variable in Emacs |
22636
f15c3c6ad8ae
(shell-copy-environment-variable): Fix doc typo.
Richard M. Stallman <rms@gnu.org>
parents:
21621
diff
changeset
|
852 \(what `getenv' in Emacs would return) to that value. |
19476
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
853 That value will affect any new subprocesses that you subsequently start |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
854 from Emacs." |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
855 (interactive (list (read-envvar-name "\ |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
856 Copy Shell environment variable to Emacs: "))) |
4ae9466b064e
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
19469
diff
changeset
|
857 (setenv variable (shell-snarf-envar variable))) |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
858 |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
859 (defun shell-forward-command (&optional arg) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
860 "Move forward across ARG shell command(s). Does not cross lines. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
861 See `shell-command-regexp'." |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
862 (interactive "p") |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
863 (let ((limit (save-excursion (end-of-line nil) (point)))) |
7377
027616e7b1e4
(shell-forward-command, shell-backward-command): Fix regexp.
Karl Heuer <kwzh@gnu.org>
parents:
7083
diff
changeset
|
864 (if (re-search-forward (concat shell-command-regexp "\\([;&|][\t ]*\\)+") |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
865 limit 'move arg) |
5335
abf0d4d01681
(shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents:
5285
diff
changeset
|
866 (skip-syntax-backward " ")))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
867 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
868 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
869 (defun shell-backward-command (&optional arg) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
870 "Move backward across ARG shell command(s). Does not cross lines. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
871 See `shell-command-regexp'." |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
872 (interactive "p") |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
873 (let ((limit (save-excursion (comint-bol nil) (point)))) |
30641
297909766bad
(shell-prompt-pattern): Doc change.
Miles Bader <miles@gnu.org>
parents:
25278
diff
changeset
|
874 (when (> limit (point)) |
297909766bad
(shell-prompt-pattern): Doc change.
Miles Bader <miles@gnu.org>
parents:
25278
diff
changeset
|
875 (setq limit (line-beginning-position))) |
5335
abf0d4d01681
(shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents:
5285
diff
changeset
|
876 (skip-syntax-backward " " limit) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
877 (if (re-search-backward |
7377
027616e7b1e4
(shell-forward-command, shell-backward-command): Fix regexp.
Karl Heuer <kwzh@gnu.org>
parents:
7083
diff
changeset
|
878 (format "[;&|]+[\t ]*\\(%s\\)" shell-command-regexp) limit 'move arg) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
879 (progn (goto-char (match-beginning 1)) |
5335
abf0d4d01681
(shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents:
5285
diff
changeset
|
880 (skip-chars-forward ";&|"))))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
881 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
882 (defun shell-dynamic-complete-command () |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
883 "Dynamically complete the command at point. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
884 This function is similar to `comint-dynamic-complete-filename', except that it |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
885 searches `exec-path' (minus the trailing emacs library path) for completion |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
886 candidates. Note that this may not be the same as the shell's idea of the |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
887 path. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
888 |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
889 Completion is dependent on the value of `shell-completion-execonly', plus |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
890 those that effect file completion. See `shell-dynamic-complete-as-command'. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
891 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
892 Returns t if successful." |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
893 (interactive) |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
894 (let ((filename (comint-match-partial-filename))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
895 (if (and filename |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
896 (save-match-data (not (string-match "[~/]" filename))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
897 (eq (match-beginning 0) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
898 (save-excursion (shell-backward-command 1) (point)))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
899 (prog2 (message "Completing command name...") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
900 (shell-dynamic-complete-as-command))))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
901 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
902 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
903 (defun shell-dynamic-complete-as-command () |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
904 "Dynamically complete at point as a command. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
905 See `shell-dynamic-complete-filename'. Returns t if successful." |
6508
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
906 (let* ((filename (or (comint-match-partial-filename) "")) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
907 (pathnondir (file-name-nondirectory filename)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
908 (paths (cdr (reverse exec-path))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
909 (cwd (file-name-as-directory (expand-file-name default-directory))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
910 (ignored-extensions |
6295
59a6684e8057
(shell-dynamic-complete-as-command): Make ignored-extensions
Richard M. Stallman <rms@gnu.org>
parents:
6255
diff
changeset
|
911 (and comint-completion-fignore |
59a6684e8057
(shell-dynamic-complete-as-command): Make ignored-extensions
Richard M. Stallman <rms@gnu.org>
parents:
6255
diff
changeset
|
912 (mapconcat (function (lambda (x) (concat (regexp-quote x) "$"))) |
59a6684e8057
(shell-dynamic-complete-as-command): Make ignored-extensions
Richard M. Stallman <rms@gnu.org>
parents:
6255
diff
changeset
|
913 comint-completion-fignore "\\|"))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
914 (path "") (comps-in-path ()) (file "") (filepath "") (completions ())) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
915 ;; Go thru each path in the search path, finding completions. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
916 (while paths |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
917 (setq path (file-name-as-directory (comint-directory (or (car paths) "."))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
918 comps-in-path (and (file-accessible-directory-p path) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
919 (file-name-all-completions pathnondir path))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
920 ;; Go thru each completion found, to see whether it should be used. |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
921 (while comps-in-path |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
922 (setq file (car comps-in-path) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
923 filepath (concat path file)) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
924 (if (and (not (member file completions)) |
6885
3c007de39916
(shell-dynamic-complete-as-command): Don't match ignored-extensions if it's nil.
Karl Heuer <kwzh@gnu.org>
parents:
6508
diff
changeset
|
925 (not (and ignored-extensions |
3c007de39916
(shell-dynamic-complete-as-command): Don't match ignored-extensions if it's nil.
Karl Heuer <kwzh@gnu.org>
parents:
6508
diff
changeset
|
926 (string-match ignored-extensions file))) |
4871
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
927 (or (string-equal path cwd) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
928 (not (file-directory-p filepath))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
929 (or (null shell-completion-execonly) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
930 (file-executable-p filepath))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
931 (setq completions (cons file completions))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
932 (setq comps-in-path (cdr comps-in-path))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
933 (setq paths (cdr paths))) |
30a614eb52f7
(shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
4679
diff
changeset
|
934 ;; OK, we've got a list of completions. |
6508
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
935 (let ((success (let ((comint-completion-addsuffix nil)) |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
936 (comint-dynamic-simple-complete pathnondir completions)))) |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
937 (if (and (memq success '(sole shortest)) comint-completion-addsuffix |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
938 (not (file-directory-p (comint-match-partial-filename)))) |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
939 (insert " ")) |
965beb0c97d2
(shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents:
6295
diff
changeset
|
940 success))) |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
941 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
942 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
943 (defun shell-match-partial-variable () |
15327
2c508f2c884d
(shell-match-partial-variable): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14476
diff
changeset
|
944 "Return the shell variable at point, or nil if none is found." |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
945 (save-excursion |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
946 (let ((limit (point))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
947 (if (re-search-backward "[^A-Za-z0-9_{}]" nil 'move) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
948 (or (looking-at "\\$") (forward-char 1))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
949 ;; Anchor the search forwards. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
950 (if (or (eolp) (looking-at "[^A-Za-z0-9_{}$]")) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
951 nil |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
952 (re-search-forward "\\$?{?[A-Za-z0-9_]*}?" limit) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
953 (buffer-substring (match-beginning 0) (match-end 0)))))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
954 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
955 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
956 (defun shell-dynamic-complete-environment-variable () |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
957 "Dynamically complete the environment variable at point. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
958 Completes if after a variable, i.e., if it starts with a \"$\". |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
959 See `shell-dynamic-complete-as-environment-variable'. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
960 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
961 This function is similar to `comint-dynamic-complete-filename', except that it |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
962 searches `process-environment' for completion candidates. Note that this may |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
963 not be the same as the interpreter's idea of variable names. The main problem |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
964 with this type of completion is that `process-environment' is the environment |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
965 which Emacs started with. Emacs does not track changes to the environment made |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
966 by the interpreter. Perhaps it would be more accurate if this function was |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
967 called `shell-dynamic-complete-process-environment-variable'. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
968 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
969 Returns non-nil if successful." |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
970 (interactive) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
971 (let ((variable (shell-match-partial-variable))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
972 (if (and variable (string-match "^\\$" variable)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
973 (prog2 (message "Completing variable name...") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
974 (shell-dynamic-complete-as-environment-variable))))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
975 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
976 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
977 (defun shell-dynamic-complete-as-environment-variable () |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
978 "Dynamically complete at point as an environment variable. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
979 Used by `shell-dynamic-complete-environment-variable'. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
980 Uses `comint-dynamic-simple-complete'." |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
981 (let* ((var (or (shell-match-partial-variable) "")) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
982 (variable (substring var (or (string-match "[^$({]\\|$" var) 0))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
983 (variables (mapcar (function (lambda (x) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
984 (substring x 0 (string-match "=" x)))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
985 process-environment)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
986 (addsuffix comint-completion-addsuffix) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
987 (comint-completion-addsuffix nil) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
988 (success (comint-dynamic-simple-complete variable variables))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
989 (if (memq success '(sole shortest)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
990 (let* ((var (shell-match-partial-variable)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
991 (variable (substring var (string-match "[^$({]" var))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
992 (protection (cond ((string-match "{" var) "}") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
993 ((string-match "(" var) ")") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
994 (t ""))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
995 (suffix (cond ((null addsuffix) "") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
996 ((file-directory-p |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
997 (comint-directory (getenv variable))) "/") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
998 (t " ")))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
999 (insert protection suffix))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1000 success)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1001 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1002 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1003 (defun shell-replace-by-expanded-directory () |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1004 "Expand directory stack reference before point. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1005 Directory stack references are of the form \"=digit\" or \"=-\". |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1006 See `default-directory' and `shell-dirstack'. |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1007 |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1008 Returns t if successful." |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1009 (interactive) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1010 (if (comint-match-partial-filename) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1011 (save-excursion |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1012 (goto-char (match-beginning 0)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1013 (let ((stack (cons default-directory shell-dirstack)) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1014 (index (cond ((looking-at "=-/?") |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1015 (length shell-dirstack)) |
45214
793403e94381
(shell-replace-by-expanded-directory):
Richard M. Stallman <rms@gnu.org>
parents:
44374
diff
changeset
|
1016 ((looking-at "=\\([0-9]+\\)/?") |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1017 (string-to-number |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1018 (buffer-substring |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1019 (match-beginning 1) (match-end 1))))))) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1020 (cond ((null index) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1021 nil) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1022 ((>= index (length stack)) |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
35659
diff
changeset
|
1023 (error "Directory stack not that deep")) |
6186
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1024 (t |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1025 (replace-match (file-name-as-directory (nth index stack)) t t) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1026 (message "Directory item: %d" index) |
84df7a6f6240
(shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6155
diff
changeset
|
1027 t)))))) |
35659
aa45cec8f927
shell-write-history-on-exit: make sure the error message goes to the right buffer
Sam Steingold <sds@gnu.org>
parents:
35643
diff
changeset
|
1028 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
1029 (provide 'shell) |
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
1030 |
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
252
diff
changeset
|
1031 ;;; shell.el ends here |