annotate lisp/shell.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 8d500ceed9d1
children b84d9bdd06b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
925
6295ac3be480 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 844
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
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
3 ;; Copyright (C) 1988, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
844
bf829a2d63b4 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
18805
b4b9772f0877 change maintainer.
Simon Marshall <simon@gnu.org>
parents: 17646
diff changeset
5 ;; Author: Olin Shivers <shivers@cs.cmu.edu> then
b4b9772f0877 change maintainer.
Simon Marshall <simon@gnu.org>
parents: 17646
diff changeset
6 ;; Simon Marshall <simon@gnu.ai.mit.edu>
b4b9772f0877 change maintainer.
Simon Marshall <simon@gnu.org>
parents: 17646
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
25 ;; Boston, MA 02111-1307, USA.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
29 ;; Please send me bug reports, bug fixes, and extensions, so that I can
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
30 ;; merge them into the master source.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
31 ;; - Olin Shivers (shivers@cs.cmu.edu)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
32 ;; - Simon Marshall (simon@gnu.ai.mit.edu)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
33
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
34 ;; This file defines a a shell-in-a-buffer package (shell mode) built
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
35 ;; on top of comint mode. This is actually cmushell with things
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
36 ;; renamed to replace its counterpart in Emacs 18. cmushell is more
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
37 ;; featureful, robust, and uniform than the Emacs 18 version.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
38
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
39 ;; Since this mode is built on top of the general command-interpreter-in-
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
40 ;; a-buffer mode (comint mode), it shares a common base functionality,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
41 ;; and a common set of bindings, with all modes derived from comint mode.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
42 ;; This makes these modes easier to use.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
43
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
44 ;; For documentation on the functionality provided by comint mode, and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
45 ;; the hooks available for customising it, see the file comint.el.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
46 ;; For further information on shell mode, see the comments below.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
47
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
48 ;; Needs fixin:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
49 ;; When sending text from a source file to a subprocess, the process-mark can
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
50 ;; move off the window, so you can lose sight of the process interactions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
51 ;; Maybe I should ensure the process mark is in the window when I send
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
52 ;; text to the process? Switch selectable?
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
53
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
54 ;; YOUR .EMACS FILE
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
55 ;;=============================================================================
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
56 ;; Some suggestions for your .emacs file.
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
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))
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
61
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
62 ;; Brief Command Documentation:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
63 ;;============================================================================
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
64 ;; Comint Mode Commands: (common to shell and all comint-derived modes)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
68 ;; m-r comint-previous-matching-input Previous input matching a regexp
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
81 ;; c-c c-h comint-dynamic-list-input-ring List input history
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
84 ;; top-level job
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
85 ;; comint-mode-hook is the comint mode hook.
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
86
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
87 ;; Shell Mode Commands:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
88 ;; shell Fires up the shell process
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
89 ;; tab comint-dynamic-complete Complete filename/command/history
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
90 ;; m-? comint-dynamic-list-filename-completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
91 ;; List completions in help buffer
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
92 ;; m-c-f shell-forward-command Forward a shell command
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
96 ;; comint-strip-ctrl-m Remove trailing ^Ms from output
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
97 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
98 ;; The shell mode hook is shell-mode-hook
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
99 ;; comint-prompt-regexp is initialised to shell-prompt-pattern, for backwards
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
100 ;; compatibility.
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
101
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
102 ;; Read the rest of this file for more information.
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
108 ;;; Customization and Buffer Variables
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
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
23744
e7128c62a0b4 (shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 23480
diff changeset
124 (defcustom shell-prompt-pattern "^[^#$%>\n]*[#$%>] *"
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
125 "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
126 Defaults to \"^[^#$%>\\n]*[#$%>] *\", which works pretty well.
2609
af46e8faaa32 (shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents: 2573
diff changeset
127 This variable is used to initialise `comint-prompt-regexp' in the
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
128 shell buffer.
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
129
4131
c9a0f06110bd * shell.el (shell-process-pushd): Fix syntax error in
Jim Blandy <jimb@redhat.com>
parents: 3418
diff changeset
130 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
131 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
132 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
133
23744
e7128c62a0b4 (shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 23480
diff changeset
134 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
135 :type 'regexp
e7128c62a0b4 (shell-prompt-pattern): Add defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 23480
diff changeset
136 :group 'shell)
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
137
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
138 (defcustom shell-completion-fignore nil
6255
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
139 "*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
140 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
141 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
142 Some people like (\"~\" \"#\" \"%\").
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
143
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
144 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
145 :type '(repeat (string :tag "Suffix"))
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
146 :group 'shell)
6255
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
147
6155
2b445a954b0b (shell-delimiter-argument-list): Now has chars, not strings.
Richard M. Stallman <rms@gnu.org>
parents: 6152
diff changeset
148 (defvar shell-delimiter-argument-list '(?\| ?& ?< ?> ?\( ?\) ?\;)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
149 "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
150 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
151 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
152
f2f66323f14a Bind shell-file-name-quote-list and shell-file-name-regexp specially for MSDOG.
Simon Marshall <simon@gnu.org>
parents: 15370
diff changeset
153 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
154
15818
574ec5119c7a (shell-file-name-chars): Was shell-file-name-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 15655
diff changeset
155 (defvar shell-file-name-chars
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
156 (if (memq system-type '(ms-dos windows-nt))
21621
56d8224fe691 (shell-file-name-chars): Add ',' and ':'.
Geoff Voelker <voelker@cs.washington.edu>
parents: 20971
diff changeset
157 "~/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
158 "~/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
159 "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
160 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
161 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
162
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
163 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
164
11186
54a20705cf02 Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents: 11154
diff changeset
165 (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
166 (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
167 nil
23219
3b050c4bee18 (shell-file-name-quote-list): Add # to the value.
Karl Heuer <kwzh@gnu.org>
parents: 22636
diff changeset
168 (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
169 "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
170 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
171 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
172
54a20705cf02 Set comint-file-name-quote-list to new shell-file-name-quote-list.
Simon Marshall <simon@gnu.org>
parents: 11154
diff changeset
173 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
174
6186
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
175 (defvar shell-dynamic-complete-functions
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
176 '(comint-replace-by-expanded-history
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
177 shell-dynamic-complete-environment-variable
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
178 shell-dynamic-complete-command
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
179 shell-replace-by-expanded-directory
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
180 comint-dynamic-complete-filename)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
181 "List of functions called to perform completion.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
182 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
183 shell buffer.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
184
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
185 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
186
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
187 (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
188 "*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
189 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
190 :type 'regexp
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
191 :group 'shell)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
192
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
193 (defcustom shell-completion-execonly t
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
194 "*If non-nil, use executable files only for completion candidates.
4938
dfb65242faf4 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4871
diff changeset
195 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
196
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
197 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
198 :type 'boolean
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
199 :group 'shell)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
200
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
201 (defcustom shell-popd-regexp "popd"
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
202 "*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
203 :type 'regexp
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
204 :group 'shell-directories)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
205
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
206 (defcustom shell-pushd-regexp "pushd"
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
207 "*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
208 :type 'regexp
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
209 :group 'shell-directories)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
210
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
211 (defcustom shell-pushd-tohome nil
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
212 "*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
213 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
214 :type 'boolean
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
215 :group 'shell-directories)
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
216
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
217 (defcustom shell-pushd-dextract nil
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
218 "*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
219 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
220 :type 'boolean
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-dunique nil
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
224 "*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
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)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
228
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
229 (defcustom shell-cd-regexp "cd"
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
230 "*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
231 :type 'regexp
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
232 :group 'shell-directories)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
233
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
234 (defcustom shell-chdrive-regexp
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
235 (if (memq system-type '(ms-dos windows-nt))
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
236 ; 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
237 "[]a-zA-Z^_`\\[\\\\]:"
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
238 nil)
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
239 "*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
240 :type '(choice regexp
4344b744de2f (shell-chdrive-regexp): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 19476
diff changeset
241 (const nil))
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
242 :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
243
24069
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
244 (defcustom shell-dirtrack-verbose t
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
245 "*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
246 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
247 :type 'boolean
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
248 :group 'shell-directories)
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
249
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
250 (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
251 "*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
252 :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
253 :group 'shell)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
254
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
255 (defcustom explicit-csh-args
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
256 (if (eq system-type 'hpux)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
257 ;; -T persuades HP's csh not to think it is smarter
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
258 ;; than us about what terminal modes to use.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
259 '("-i" "-T")
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
260 '("-i"))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
261 "*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
262 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
263 :type '(repeat (string :tag "Argument"))
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
264 :group 'shell)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
265
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
266 (defcustom shell-input-autoexpand 'history
5538
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
267 "*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
268 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
269
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
270 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
271 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
272 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
273 `comint-dynamic-complete'.
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
274
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
275 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
276 for Shell mode only."
23274
0c30ca946dba (shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 23219
diff changeset
277 :type '(choice (const :tag "off" nil)
0c30ca946dba (shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 23219
diff changeset
278 (const input)
0c30ca946dba (shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 23219
diff changeset
279 (const history)
0c30ca946dba (shell-input-autoexpand): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 23219
diff changeset
280 (const :tag "on" t))
23480
2046e6b0bc8e (shell-input-autoexpand): Fix customization group.
Richard M. Stallman <rms@gnu.org>
parents: 23274
diff changeset
281 :group 'shell)
5538
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
282
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
283 (defvar shell-dirstack nil
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 252
diff changeset
284 "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
285 Thus, this does not include the shell's current directory.")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
286
6152
34d9a0aa80d1 (shell-dirtrackp): Variable definition added.
Richard M. Stallman <rms@gnu.org>
parents: 6150
diff changeset
287 (defvar shell-dirtrackp t
34d9a0aa80d1 (shell-dirtrackp): Variable definition added.
Richard M. Stallman <rms@gnu.org>
parents: 6150
diff changeset
288 "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
289
2351
bb1ff4e31fb6 Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1801
diff changeset
290 (defvar shell-last-dir nil
bb1ff4e31fb6 Brent Benson's patch to support `cd -'.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1801
diff changeset
291 "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
292
7083
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
293 (defvar shell-dirstack-query nil
2609
af46e8faaa32 (shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents: 2573
diff changeset
294 "Command used by `shell-resync-dir' to query the shell.")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
295
6150
c1dde384f0dd (shell-mode-map): Use copy-keymap.
Richard M. Stallman <rms@gnu.org>
parents: 5880
diff changeset
296 (defvar shell-mode-map nil)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
297 (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
298 (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
299 (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
300 (define-key shell-mode-map "\C-c\C-b" 'shell-backward-command)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
301 (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
302 (define-key shell-mode-map "\M-?"
6186
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
303 '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
304 (define-key shell-mode-map [menu-bar completion]
323936455525 (shell-mode-map): Inherit comint-mode-map, but copy the completion menu.
Richard M. Stallman <rms@gnu.org>
parents: 8694
diff changeset
305 (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
306 (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
307 [complete-env-variable] '("Complete Env. Variable Name" .
9888d3b32db3 (shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents: 6885
diff changeset
308 shell-dynamic-complete-environment-variable)
9888d3b32db3 (shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents: 6885
diff changeset
309 'complete-file)
9888d3b32db3 (shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents: 6885
diff changeset
310 (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
311 [expand-directory] '("Expand Directory Reference" .
9888d3b32db3 (shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents: 6885
diff changeset
312 shell-replace-by-expanded-directory)
9888d3b32db3 (shell-mode-map): Fix menu bar options.
Karl Heuer <kwzh@gnu.org>
parents: 6885
diff changeset
313 'complete-expand)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
314
17428
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
315 (defcustom shell-mode-hook '()
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
316 "*Hook for customising Shell mode."
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
317 :type 'hook
653c0e2e1b31 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16877
diff changeset
318 :group 'shell)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
319
9383
c4fa081b416e (shell-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9244
diff changeset
320 (defvar shell-font-lock-keywords
17497
3ee027d263c6 Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents: 17428
diff changeset
321 '((eval . (cons shell-prompt-pattern 'font-lock-warning-face))
3ee027d263c6 Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents: 17428
diff changeset
322 ("[ \t]\\([+-][^ \t\n]+\\)" 1 font-lock-comment-face)
3ee027d263c6 Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents: 17428
diff changeset
323 ("^[^ \t\n]+:.*" . font-lock-string-face)
3ee027d263c6 Use EVAL form for shell-prompt-pattern.
Simon Marshall <simon@gnu.org>
parents: 17428
diff changeset
324 ("^\\[[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
325 "Additional expressions to highlight in Shell mode.")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
326
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
327 ;;; Basic Procedures
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
328
17646
0dcc993f06e4 (shell-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17497
diff changeset
329 (put 'shell-mode 'mode-class 'special)
0dcc993f06e4 (shell-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17497
diff changeset
330
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
331 (defun shell-mode ()
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
332 "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
333 \\[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
334 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
335 \\[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
336 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
337 \\[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
338 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
339 `comint-watch-for-password-prompt' to `comint-output-filter-functions'.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
340
10377
2123413a483e Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents: 10019
diff changeset
341 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
342 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
343
10831
94811e4b2a06 Added shell-truncate-buffer function to restrict buffer size to
Simon Marshall <simon@gnu.org>
parents: 10791
diff changeset
344 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
345 `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
346
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
347 If you accidentally suspend your process, use \\[comint-continue-subjob]
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
348 to continue it.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
349
10377
2123413a483e Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents: 10019
diff changeset
350 `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
351 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
352 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
353 by \\[list-buffers] or \\[mouse-buffer-menu] in the `File' field.
10377
2123413a483e Doc fixes (simon's email address and shell-mode)
Simon Marshall <simon@gnu.org>
parents: 10019
diff changeset
354 \\[dirs] queries the shell and resyncs Emacs' idea of what the current
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
355 directory stack is.
20971
22a407edd2f0 (shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents: 19829
diff changeset
356 \\[dirtrack-mode] turns directory tracking on and off.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
357
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
358 \\{shell-mode-map}
2609
af46e8faaa32 (shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents: 2573
diff changeset
359 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
360 `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
361 `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
362 on `comint-output-filter-functions' are run.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
363
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
364 Variables `shell-cd-regexp', `shell-chdrive-regexp', `shell-pushd-regexp'
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
365 and `shell-popd-regexp' are used to match their respective commands,
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
366 while `shell-pushd-tohome', `shell-pushd-dextract' and `shell-pushd-dunique'
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
367 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
368
6255
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
369 Variables `comint-completion-autolist', `comint-completion-addsuffix',
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
370 `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
371 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
372 `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
373 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
374 `comint-completion-fignore'.
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
375
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
376 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
377 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
378
6189
4ff931c18e4b Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents: 6186
diff changeset
379 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
380 `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
381 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
382 buffer."
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
383 (interactive)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
384 (comint-mode)
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
385 (setq major-mode 'shell-mode)
2556
8b6c3d4256a0 (shell-mode): Capitalize mode name.
Roland McGrath <roland@gnu.org>
parents: 2469
diff changeset
386 (setq mode-name "Shell")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
387 (use-local-map shell-mode-map)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
388 (setq comint-prompt-regexp shell-prompt-pattern)
6255
277d9ace9f5d (shell-completion-fignore): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6189
diff changeset
389 (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
390 (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
391 (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
392 (setq comint-file-name-quote-list shell-file-name-quote-list)
6186
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
393 (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
394 (make-local-variable 'paragraph-start)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
395 (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
396 (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
397 (setq font-lock-defaults '(shell-font-lock-keywords t))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
398 (make-local-variable 'shell-dirstack)
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
399 (setq shell-dirstack nil)
19469
41215527a262 Make shell-last-dir buffer-local.
Simon Marshall <simon@gnu.org>
parents: 19121
diff changeset
400 (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
401 (setq shell-last-dir nil)
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
402 (make-local-variable 'shell-dirtrackp)
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
403 (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
404 (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
405 (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
406 ;; 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
407 ;; 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
408 (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
409 (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
410 ;; shell-dependent assignments.
7083
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
411 (let ((shell (file-name-nondirectory (car
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
412 (process-command (get-buffer-process (current-buffer)))))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
413 (setq comint-input-ring-file-name
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
414 (or (getenv "HISTFILE")
7083
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
415 (cond ((string-equal shell "bash") "~/.bash_history")
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
416 ((string-equal shell "ksh") "~/.sh_history")
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
417 (t "~/.history"))))
12201
a302425220b9 check comint-input-ring-file-name for the empty string too.
Simon Marshall <simon@gnu.org>
parents: 11521
diff changeset
418 (if (or (equal comint-input-ring-file-name "")
15933
9df952241adc (shell-mode): Don't assume /dev/null is its own truename.
Richard M. Stallman <rms@gnu.org>
parents: 15818
diff changeset
419 (equal (file-truename comint-input-ring-file-name)
9df952241adc (shell-mode): Don't assume /dev/null is its own truename.
Richard M. Stallman <rms@gnu.org>
parents: 15818
diff changeset
420 (file-truename "/dev/null")))
8111
04ba433263d8 (shell-mode): Don't read history from /dev/null.
Richard M. Stallman <rms@gnu.org>
parents: 8033
diff changeset
421 (setq comint-input-ring-file-name nil))
7083
9630c48595d8 (shell-dirstack-query): Defaults to nil.
Richard M. Stallman <rms@gnu.org>
parents: 6887
diff changeset
422 (setq shell-dirstack-query
14476
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
423 (cond ((string-equal shell "sh") "pwd")
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
424 ((string-equal shell "ksh") "echo $PWD ~-")
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
425 (t "dirs"))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
426 (run-hooks 'shell-mode-hook)
5538
9d84549e89b4 (shell-input-autoexpand): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5474
diff changeset
427 (comint-read-input-ring t))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
428
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 252
diff changeset
429 ;;;###autoload
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
430 (defun shell ()
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
431 "Run an inferior shell, with I/O through buffer *shell*.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
432 If buffer exists but shell process is not running, make new shell.
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
433 If buffer exists and shell process is running, just switch to buffer `*shell*'.
2609
af46e8faaa32 (shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents: 2573
diff changeset
434 Program used comes from variable `explicit-shell-file-name',
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
435 or (if that is nil) from the ESHELL environment variable,
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
436 or else from SHELL if there is no ESHELL.
1076
8a936037cedc entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 925
diff changeset
437 If a file `~/.emacs_SHELLNAME' exists, it is given as initial input
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
438 (Note that this may lose due to a timing error if the shell
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
439 discards input when it starts up.)
1076
8a936037cedc entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 925
diff changeset
440 The buffer is put in Shell mode, giving commands for sending input
8a936037cedc entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 925
diff changeset
441 and controlling the subjobs of the shell. See `shell-mode'.
8a936037cedc entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 925
diff changeset
442 See also the variable `shell-prompt-pattern'.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
443
19121
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
444 To specify a coding system for converting non-ASCII characters
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
445 in the input and output to the shell, use \\[universal-coding-system-argument]
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
446 before \\[shell]. You can also specify this with \\[set-buffer-process-coding-system]
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
447 in the shell buffer, after you start the shell.
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
448 The default comes from `process-coding-system-alist' and
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
449 `default-process-coding-system'.
8fe7aa3f4ca2 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18878
diff changeset
450
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
451 The shell file name (sans directories) is used to make a symbol name
1801
dd8e5024b4f9 (shell): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1076
diff changeset
452 such as `explicit-csh-args'. If that symbol is a variable,
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
453 its value is used as a list of arguments when invoking the shell.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
454 Otherwise, one argument `-i' is passed to the shell.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
455
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
456 \(Type \\[describe-mode] in the shell buffer for a list of commands.)"
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
457 (interactive)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
458 (if (not (comint-check-proc "*shell*"))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
459 (let* ((prog (or explicit-shell-file-name
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
460 (getenv "ESHELL")
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
461 (getenv "SHELL")
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
462 "/bin/sh"))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
463 (name (file-name-nondirectory prog))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
464 (startfile (concat "~/.emacs_" name))
10975
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
465 (xargs-name (intern-soft (concat "explicit-" name "-args")))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
466 shell-buffer)
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
467 (save-excursion
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
468 (set-buffer (apply 'make-comint "shell" prog
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
469 (if (file-exists-p startfile) startfile)
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
470 (if (and xargs-name (boundp xargs-name))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
471 (symbol-value xargs-name)
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
472 '("-i"))))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
473 (setq shell-buffer (current-buffer))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
474 (shell-mode))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
475 (pop-to-buffer shell-buffer))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
476 (pop-to-buffer "*shell*")))
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
477
5abad4aec8e0 (shell): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 10878
diff changeset
478 ;;; 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
479 ;;;###autoload (add-hook 'same-window-buffer-names "*shell*")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
480
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
481 ;;; Directory tracking
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12323
diff changeset
482 ;;;
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
483 ;;; This code provides the shell mode input sentinel
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
484 ;;; SHELL-DIRECTORY-TRACKER
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
485 ;;; that tracks cd, pushd, and popd commands issued to the shell, and
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
486 ;;; changes the current directory of the shell buffer accordingly.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
487 ;;;
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
488 ;;; This is basically a fragile hack, although it's more accurate than
2469
250c60d32a5a Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2351
diff changeset
489 ;;; the version in Emacs 18's shell.el. It has the following failings:
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
490 ;;; 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
491 ;;; 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
492 ;;; 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
493 ;;; 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
494 ;;; 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
495 ;;; 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
496 ;;; inside conditional expressions, aliases, and so forth.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
497 ;;;
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
498 ;;; The whole approach is a crock. Shell aliases mess it up. File sourcing
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
499 ;;; messes it up. You run other processes under the shell; these each have
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
500 ;;; separate working directories, and some have commands for manipulating
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
501 ;;; their w.d.'s (e.g., the lcd command in ftp). Some of these programs have
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
502 ;;; commands that do *not* affect the current w.d. at all, but look like they
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
503 ;;; do (e.g., the cd command in ftp). In shells that allow you job
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
504 ;;; control, you can switch between jobs, all having different w.d.'s. So
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
505 ;;; simply saying %3 can shift your w.d..
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
506 ;;;
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
507 ;;; The solution is to relax, not stress out about it, and settle for
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
508 ;;; a hack that works pretty well in typical circumstances. Remember
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
509 ;;; that a half-assed solution is more in keeping with the spirit of Unix,
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
510 ;;; anyway. Blech.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
511 ;;;
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
512 ;;; One good hack not implemented here for users of programmable shells
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
513 ;;; is to program up the shell w.d. manipulation commands to output
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
514 ;;; a coded command sequence to the tty. Something like
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
515 ;;; ESC | <cwd> |
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
516 ;;; where <cwd> is the new current working directory. Then trash the
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
517 ;;; directory tracking machinery currently used in this package, and
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
518 ;;; replace it with a process filter that watches for and strips out
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
519 ;;; these messages.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
520
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
521 (defun shell-directory-tracker (str)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
522 "Tracks cd, pushd and popd commands issued to the shell.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
523 This function is called on each input passed to the shell.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
524 It watches for cd, pushd and popd commands and sets the buffer's
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
525 default directory to track these commands.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
526
20971
22a407edd2f0 (shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents: 19829
diff changeset
527 You may toggle this tracking on and off with M-x dirtrack-mode.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
528 If emacs gets confused, you can resync with the shell with M-x dirs.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
529
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
530 See variables `shell-cd-regexp', `shell-chdrive-regexp', `shell-pushd-regexp',
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
531 and `shell-popd-regexp', while `shell-pushd-tohome', `shell-pushd-dextract',
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
532 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
533
2609
af46e8faaa32 (shell-prompt-pattern): Undo last change.
Richard M. Stallman <rms@gnu.org>
parents: 2573
diff changeset
534 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
535 (if shell-dirtrackp
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
536 ;; 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
537 (condition-case chdir-failure
12323
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
538 (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
539 (match-end 0)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
540 end cmd arg1)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
541 (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
542 (setq end (match-end 0)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
543 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
544 arg1 (comint-arguments (substring str start end) 1 1))
12323
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
545 (cond ((string-match (concat "\\`\\(" shell-popd-regexp
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
546 "\\)\\($\\|[ \t]\\)")
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
547 cmd)
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
548 (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
549 ((string-match (concat "\\`\\(" shell-pushd-regexp
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
550 "\\)\\($\\|[ \t]\\)")
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
551 cmd)
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
552 (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
553 ((string-match (concat "\\`\\(" shell-cd-regexp
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
554 "\\)\\($\\|[ \t]\\)")
a48a0352b344 (shell-directory-tracker): Check for terminator after
Karl Heuer <kwzh@gnu.org>
parents: 12213
diff changeset
555 cmd)
15370
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
556 (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
557 ((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
558 (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
559 "\\)\\($\\|[ \t]\\)")
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
560 cmd))
b75fc8f3b376 (shell-directory-tracker): Use comint-substitute-in-file-name to
Richard M. Stallman <rms@gnu.org>
parents: 15327
diff changeset
561 (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
562 (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
563 (match-end 0)))))
6189
4ff931c18e4b Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents: 6186
diff changeset
564 (error "Couldn't cd"))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
565
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
566 ;;; popd [+n]
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
567 (defun shell-process-popd (arg)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
568 (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
569 (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
570 (shell-cd (car shell-dirstack))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
571 (setq shell-dirstack (cdr shell-dirstack))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
572 (shell-dirstack-message))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
573 ((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
574 (let* ((ds (cons nil shell-dirstack))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
575 (cell (nthcdr (1- num) ds)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
576 (rplacd cell (cdr (cdr cell)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
577 (setq shell-dirstack (cdr ds))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
578 (shell-dirstack-message)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
579 (t
6189
4ff931c18e4b Rename comint-input-filter-functions and
Richard M. Stallman <rms@gnu.org>
parents: 6186
diff changeset
580 (error "Couldn't popd")))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
581
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
582 ;; 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
583 (defun shell-prefixed-directory-name (dir)
bedead77e86f (shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents: 7610
diff changeset
584 (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
585 dir
bedead77e86f (shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents: 7610
diff changeset
586 (if (file-name-absolute-p dir)
bedead77e86f (shell-prefixed-directory-name): Do nothing if
Richard M. Stallman <rms@gnu.org>
parents: 7610
diff changeset
587 ;; 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
588 (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
589 ;; 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
590 (expand-file-name dir))))
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
591
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
592 ;;; cd [dir]
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
593 (defun shell-process-cd (arg)
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
594 (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
595 "~"))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
596 ((string-equal "-" arg) shell-last-dir)
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
597 (t (shell-prefixed-directory-name arg)))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
598 (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
599 (shell-cd new-dir)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
600 (shell-dirstack-message)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
601
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
602 ;;; pushd [+n | dir]
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
603 (defun shell-process-pushd (arg)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
604 (let ((num (shell-extract-num arg)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
605 (cond ((zerop (length arg))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
606 ;; 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
607 (cond (shell-pushd-tohome
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
608 (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
609 (shell-dirstack
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
610 (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
611 (shell-cd (car shell-dirstack))
14476
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
612 (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
613 (shell-dirstack-message)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
614 (t
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
615 (message "Directory stack empty."))))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
616 ((numberp num)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
617 ;; pushd +n
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
618 (cond ((> num (length shell-dirstack))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
619 (message "Directory stack not that deep."))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
620 ((= num 0)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
621 (error (message "Couldn't cd.")))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
622 (shell-pushd-dextract
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
623 (let ((dir (nth (1- num) shell-dirstack)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
624 (shell-process-popd arg)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
625 (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
626 (shell-cd dir)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
627 (shell-dirstack-message)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
628 (t
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
629 (let* ((ds (cons default-directory shell-dirstack))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
630 (dslen (length ds))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
631 (front (nthcdr num ds))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
632 (back (reverse (nthcdr (- dslen num) (reverse ds))))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
633 (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
634 (shell-cd (car new-ds))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
635 (setq shell-dirstack (cdr new-ds))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
636 (shell-dirstack-message)))))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
637 (t
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
638 ;; pushd <dir>
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
639 (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
640 (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
641 (if (or (null shell-pushd-dunique)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
642 (not (member old-wd shell-dirstack)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
643 (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
644 (shell-dirstack-message))))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
645
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
646 ;; If STR is of the form +n, for n>0, return n. Otherwise, nil.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
647 (defun shell-extract-num (str)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
648 (and (string-match "^\\+[1-9][0-9]*$" str)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
649 (string-to-int str)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
650
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
651
20971
22a407edd2f0 (shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents: 19829
diff changeset
652 (defun shell-dirtrack-mode ()
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
653 "Turn directory tracking on and off in a shell buffer."
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
654 (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
655 (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
656 (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
657 (setq list-buffers-directory nil))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
658 (message "Directory tracking %s" (if shell-dirtrackp "ON" "OFF")))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
659
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
660 ;;; For your typing convenience:
20971
22a407edd2f0 (shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents: 19829
diff changeset
661 (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
662 (defalias 'dirtrack-toggle 'shell-dirtrack-mode)
22a407edd2f0 (shell-dirtrack-mode): Renamed from shell-dirtrack-toggle.
Karl Heuer <kwzh@gnu.org>
parents: 19829
diff changeset
663 (defalias 'dirtrack-mode 'shell-dirtrack-mode)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
664
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
665 (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
666 "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
667 (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
668 (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
669 (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
670 (cd dir))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
671
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
672 (defun shell-resync-dirs ()
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
673 "Resync the buffer's idea of the current directory stack.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
674 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
675 `shell-dirstack-query' (default \"dirs\"), reads the next
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
676 line output and parses it to form the new directory stack.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
677 DON'T issue this command unless the buffer is at a shell prompt.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
678 Also, note that if some other subprocess decides to do output
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
679 immediately after the query, its output will be taken as the
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
680 new directory stack -- you lose. If this happens, just do the
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
681 command again."
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
682 (interactive)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
683 (let* ((proc (get-buffer-process (current-buffer)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
684 (pmark (process-mark proc)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
685 (goto-char pmark)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
686 (insert shell-dirstack-query) (insert "\n")
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
687 (sit-for 0) ; force redisplay
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
688 (comint-send-string proc shell-dirstack-query)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
689 (comint-send-string proc "\n")
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
690 (set-marker pmark (point))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
691 (let ((pt (point))) ; wait for 1 line
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
692 ;; This extra newline prevents the user's pending input from spoofing us.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
693 (insert "\n") (backward-char 1)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
694 (while (not (looking-at ".+\n"))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
695 (accept-process-output proc)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
696 (goto-char pt)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
697 (goto-char pmark) (delete-char 1) ; remove the extra newline
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
698 ;; 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
699 (let* ((dl (buffer-substring (match-beginning 0) (1- (match-end 0))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
700 (dl-len (length dl))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
701 (ds '()) ; new dir stack
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
702 (i 0))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
703 (while (< i dl-len)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
704 ;; regexp = optional whitespace, (non-whitespace), optional whitespace
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
705 (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
706 (setq ds (cons (concat comint-file-name-prefix
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
707 (substring dl (match-beginning 1)
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
708 (match-end 1)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
709 ds))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
710 (setq i (match-end 0)))
5474
239620e1795d (shell-cd): Function removed.
Roland McGrath <roland@gnu.org>
parents: 5335
diff changeset
711 (let ((ds (nreverse ds)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
712 (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
713 (progn (shell-cd (car ds))
14476
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
714 (setq shell-dirstack (cdr ds)
63540fa43674 Resync directories properly for the ksh.
Simon Marshall <simon@gnu.org>
parents: 14329
diff changeset
715 shell-last-dir (car shell-dirstack))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
716 (shell-dirstack-message))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
717 (error (message "Couldn't cd.")))))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
718
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
719 ;;; For your typing convenience:
2571
b65cf676a09b All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2557
diff changeset
720 (defalias 'dirs 'shell-resync-dirs)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
721
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
722
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
723 ;;; Show the current dirstack on the message line.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
724 ;;; Pretty up dirs a bit by changing "/usr/jqr/foo" to "~/foo".
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
725 ;;; (This isn't necessary if the dirlisting is generated with a simple "dirs".)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
726 ;;; All the commands that mung the buffer's dirstack finish by calling
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
727 ;;; this guy.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
728 (defun shell-dirstack-message ()
24069
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
729 (when shell-dirtrack-verbose
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
730 (let* ((msg "")
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
731 (ds (cons default-directory shell-dirstack))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
732 (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
733 (homelen (length home)))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
734 (while ds
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
735 (let ((dir (car ds)))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
736 (and (>= (length dir) homelen)
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
737 (string= home (substring dir 0 homelen))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
738 (setq dir (concat "~/" (substring dir homelen))))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
739 ;; 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
740 (and comint-file-name-prefix
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
741 (>= (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
742 (string= comint-file-name-prefix
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
743 (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
744 (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
745 (setcar ds dir))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
746 (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
747 (setq ds (cdr ds))))
8d500ceed9d1 * shell.el (shell-dirtrack-verbose): New custom variable.
Simon Marshall <simon@gnu.org>
parents: 23744
diff changeset
748 (message "%s" msg))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
749
19476
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
750 ;; 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
751 (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
752 "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
753 (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
754 (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
755 (pmark (process-mark proc)))
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
756 (goto-char pmark)
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
757 (insert cmd)
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
758 (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
759 (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
760 (set-marker pmark (point))
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
761 (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
762 ;; 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
763 (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
764 (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
765 (accept-process-output proc)
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
766 (goto-char pt)))
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
767 (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
768 (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
769
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
770 (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
771 "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
772 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
773 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
774 \(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
775 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
776 from Emacs."
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
777 (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
778 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
779 (setenv variable (shell-snarf-envar variable)))
4ae9466b064e (shell-snarf-envar, shell-copy-environment-variable): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 19469
diff changeset
780
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
781 (defun shell-forward-command (&optional arg)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
782 "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
783 See `shell-command-regexp'."
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
784 (interactive "p")
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
785 (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
786 (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
787 limit 'move arg)
5335
abf0d4d01681 (shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents: 5285
diff changeset
788 (skip-syntax-backward " "))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
789
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
790
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
791 (defun shell-backward-command (&optional arg)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
792 "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
793 See `shell-command-regexp'."
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
794 (interactive "p")
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
795 (let ((limit (save-excursion (comint-bol nil) (point))))
5335
abf0d4d01681 (shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents: 5285
diff changeset
796 (if (> limit (point))
abf0d4d01681 (shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents: 5285
diff changeset
797 (save-excursion (beginning-of-line) (setq limit (point))))
abf0d4d01681 (shell-backward-command): If comint-bol moves forward,
Richard M. Stallman <rms@gnu.org>
parents: 5285
diff changeset
798 (skip-syntax-backward " " limit)
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
799 (if (re-search-backward
7377
027616e7b1e4 (shell-forward-command, shell-backward-command): Fix regexp.
Karl Heuer <kwzh@gnu.org>
parents: 7083
diff changeset
800 (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
801 (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
802 (skip-chars-forward ";&|")))))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
803
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
804
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
805 (defun shell-dynamic-complete-command ()
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
806 "Dynamically complete the command at point.
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
807 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
808 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
809 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
810 path.
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
811
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
812 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
813 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
814
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
815 Returns t if successful."
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
816 (interactive)
6186
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
817 (let ((filename (comint-match-partial-filename)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
818 (if (and filename
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
819 (save-match-data (not (string-match "[~/]" filename)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
820 (eq (match-beginning 0)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
821 (save-excursion (shell-backward-command 1) (point))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
822 (prog2 (message "Completing command name...")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
823 (shell-dynamic-complete-as-command)))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
824
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
825
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
826 (defun shell-dynamic-complete-as-command ()
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
827 "Dynamically complete at point as a command.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
828 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
829 (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
830 (pathnondir (file-name-nondirectory filename))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
831 (paths (cdr (reverse exec-path)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
832 (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
833 (ignored-extensions
6295
59a6684e8057 (shell-dynamic-complete-as-command): Make ignored-extensions
Richard M. Stallman <rms@gnu.org>
parents: 6255
diff changeset
834 (and comint-completion-fignore
59a6684e8057 (shell-dynamic-complete-as-command): Make ignored-extensions
Richard M. Stallman <rms@gnu.org>
parents: 6255
diff changeset
835 (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
836 comint-completion-fignore "\\|")))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
837 (path "") (comps-in-path ()) (file "") (filepath "") (completions ()))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
838 ;; 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
839 (while paths
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
840 (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
841 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
842 (file-name-all-completions pathnondir path)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
843 ;; 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
844 (while comps-in-path
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
845 (setq file (car comps-in-path)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
846 filepath (concat path file))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
847 (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
848 (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
849 (string-match ignored-extensions file)))
4871
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
850 (or (string-equal path cwd)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
851 (not (file-directory-p filepath)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
852 (or (null shell-completion-execonly)
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
853 (file-executable-p filepath)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
854 (setq completions (cons file completions)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
855 (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
856 (setq paths (cdr paths)))
30a614eb52f7 (shell-after-partial-filename): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 4679
diff changeset
857 ;; 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
858 (let ((success (let ((comint-completion-addsuffix nil))
965beb0c97d2 (shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents: 6295
diff changeset
859 (comint-dynamic-simple-complete pathnondir completions))))
965beb0c97d2 (shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents: 6295
diff changeset
860 (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
861 (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
862 (insert " "))
965beb0c97d2 (shell-strip-ctrl-m): New command.
Richard M. Stallman <rms@gnu.org>
parents: 6295
diff changeset
863 success)))
6186
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
864
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
865
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
866 (defun shell-match-partial-variable ()
15327
2c508f2c884d (shell-match-partial-variable): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14476
diff changeset
867 "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
868 (save-excursion
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
869 (let ((limit (point)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
870 (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
871 (or (looking-at "\\$") (forward-char 1)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
872 ;; Anchor the search forwards.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
873 (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
874 nil
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
875 (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
876 (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
877
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
878
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
879 (defun shell-dynamic-complete-environment-variable ()
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
880 "Dynamically complete the environment variable at point.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
881 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
882 See `shell-dynamic-complete-as-environment-variable'.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
883
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
884 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
885 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
886 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
887 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
888 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
889 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
890 called `shell-dynamic-complete-process-environment-variable'.
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 non-nil if successful."
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
893 (interactive)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
894 (let ((variable (shell-match-partial-variable)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
895 (if (and variable (string-match "^\\$" variable))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
896 (prog2 (message "Completing variable name...")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
897 (shell-dynamic-complete-as-environment-variable)))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
898
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
899
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
900 (defun shell-dynamic-complete-as-environment-variable ()
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
901 "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
902 Used by `shell-dynamic-complete-environment-variable'.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
903 Uses `comint-dynamic-simple-complete'."
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
904 (let* ((var (or (shell-match-partial-variable) ""))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
905 (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
906 (variables (mapcar (function (lambda (x)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
907 (substring x 0 (string-match "=" x))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
908 process-environment))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
909 (addsuffix comint-completion-addsuffix)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
910 (comint-completion-addsuffix nil)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
911 (success (comint-dynamic-simple-complete variable variables)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
912 (if (memq success '(sole shortest))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
913 (let* ((var (shell-match-partial-variable))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
914 (variable (substring var (string-match "[^$({]" var)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
915 (protection (cond ((string-match "{" var) "}")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
916 ((string-match "(" var) ")")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
917 (t "")))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
918 (suffix (cond ((null addsuffix) "")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
919 ((file-directory-p
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
920 (comint-directory (getenv variable))) "/")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
921 (t " "))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
922 (insert protection suffix)))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
923 success))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
924
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
925
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
926 (defun shell-replace-by-expanded-directory ()
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
927 "Expand directory stack reference before point.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
928 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
929 See `default-directory' and `shell-dirstack'.
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
930
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
931 Returns t if successful."
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
932 (interactive)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
933 (if (comint-match-partial-filename)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
934 (save-excursion
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
935 (goto-char (match-beginning 0))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
936 (let ((stack (cons default-directory shell-dirstack))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
937 (index (cond ((looking-at "=-/?")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
938 (length shell-dirstack))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
939 ((looking-at "=\\([0-9]+\\)")
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
940 (string-to-number
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
941 (buffer-substring
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
942 (match-beginning 1) (match-end 1)))))))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
943 (cond ((null index)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
944 nil)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
945 ((>= index (length stack))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
946 (error "Directory stack not that deep."))
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
947 (t
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
948 (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
949 (message "Directory item: %d" index)
84df7a6f6240 (shell-dynamic-complete-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6155
diff changeset
950 t))))))
252
1ef0a9b58e63 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 114
diff changeset
951
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 252
diff changeset
952 (provide 'shell)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 252
diff changeset
953
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 252
diff changeset
954 ;;; shell.el ends here