annotate lisp/dirtrack.el @ 50780:3c9a6397c579

Update copyright and maintenance details. Update some package URLs, versions, and maintainers. Remove many references to the Emacs Lisp Archive as it is no longer being updated.
author Glenn Morris <rgm@gnu.org>
date Fri, 02 May 2003 21:59:58 +0000
parents 251a71560199
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; dirtrack.el --- Directory Tracking by watching the prompt
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1996 Free Software Foundation, Inc.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
5 ;; Author: Peter Breton <pbreton@cs.umb.edu>
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Created: Sun Nov 17 1996
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: processes
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; Shell directory tracking by watching the prompt.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; This is yet another attempt at a directory-tracking package for
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; Emacs shell-mode. However, this package makes one strong assumption:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; that you can customize your shell's prompt to contain the
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; current working directory. Most shells do support this, including
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; almost every type of Bourne and C shell on Unix, the native shells on
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Windows95 (COMMAND.COM) and Windows NT (CMD.EXE), and most 3rd party
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; Windows shells. If you cannot do this, or do not wish to, this package
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; will be useless to you.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; Installation:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; 1) Set your shell's prompt to contain the current working directory.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; You may need to consult your shell's documentation to find out how to
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; do this.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
44 ;;
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
45 ;; Note that directory tracking is done by matching regular expressions,
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; therefore it is *VERY IMPORTANT* for your prompt to be easily
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; distinguishable from other output. If your prompt regexp is too general,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; you will see error messages from the dirtrack filter as it attempts to cd
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; to non-existent directories.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
51 ;; 2) Set the variable `dirtrack-list' to an appropriate value. This
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; should be a list of two elements: the first is a regular expression
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; which matches your prompt up to and including the pathname part.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
54 ;; The second is a number which tells which regular expression group to
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; match to extract only the pathname. If you use a multi-line prompt,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; add 't' as a third element. Note that some of the functions in
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; 'comint.el' assume a single-line prompt (eg, comint-bol).
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
58 ;;
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; Determining this information may take some experimentation. Setting
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
60 ;; the variable `dirtrack-debug' may help; it causes the directory-tracking
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
61 ;; filter to log messages to the buffer `dirtrack-debug-buffer'. You can easily
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
62 ;; toggle this setting with the `dirtrack-debug-toggle' function.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
63 ;;
17930
c3daa16fce91 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16960
diff changeset
64 ;; 3) Add a hook to shell-mode to enable the directory tracking:
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; (add-hook 'shell-mode-hook
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; (function (lambda ()
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
68 ;; (setq comint-preoutput-filter-functions
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; (append (list 'dirtrack)
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
70 ;; comint-preoutput-filter-functions)))))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; You may wish to turn ordinary shell tracking off by calling
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
73 ;; `shell-dirtrack-toggle' or setting `shell-dirtrackp'.
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; Examples:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; 1) On Windows NT, my prompt is set to emacs$S$P$G.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; 'dirtrack-list' is set to (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; 2) On Solaris running bash, my prompt is set like this:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; PS1="\w\012emacs@\h(\!) [\t]% "
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; 'dirtrack-list' is set to (list "^\\([/~].*\\)\nemacs@[^%]+% *" 1 t)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; I'd appreciate other examples from people who use this package.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
85 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
86 ;; Here's one from Stephen Eglen:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
87 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
88 ;; Running under tcsh:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
89 ;; (setq-default dirtrack-list '("^%E \\([^ ]+\\)" 1))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
90 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
91 ;; It might be worth mentioning in your file that emacs sources start up
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
92 ;; files of the form: ~/.emacs_<SHELL> where <SHELL> is the name of the
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
93 ;; shell. So for example, I have the following in ~/.emacs_tcsh:
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
94 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
95 ;; set prompt = "%%E %~ %h% "
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
96 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
97 ;; This produces a prompt of the form:
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
98 ;; %E /var/spool 10%
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
99 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
100 ;; This saves me from having to use the %E prefix in other non-emacs
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
101 ;; shells.
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
102 ;;
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
103 ;; A final note:
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
104 ;;
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
105 ;; I run LOTS of shell buffers through Emacs, sometimes as different users
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
106 ;; (eg, when logged in as myself, I'll run a root shell in the same Emacs).
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
107 ;; If you do this, and the shell prompt contains a ~, Emacs will interpret
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
108 ;; this relative to the user which owns the Emacs process, not the user
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
109 ;; who owns the shell buffer. This may cause dirtrack to behave strangely
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
110 ;; (typically it reports that it is unable to cd to a directory
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
111 ;; with a ~ in it).
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
112 ;;
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
113 ;; The same behavior can occur if you use dirtrack with remote filesystems
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
114 ;; (using telnet, rlogin, etc) as Emacs will be checking the local
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
115 ;; filesystem, not the remote one. This problem is not specific to dirtrack,
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
116 ;; but also affects file completion, etc.
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;;; Code:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (eval-when-compile
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (require 'comint)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (require 'shell))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
124 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
125 ;; Customization Variables
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
126 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
127
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
128 (defgroup dirtrack nil
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
129 "Directory tracking by watching the prompt."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
130 :prefix "dirtrack-"
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
131 :group 'shell)
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
132
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
133 (defcustom dirtrack-list (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 "*List for directory tracking.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 First item is a regexp that describes where to find the path in a prompt.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
136 Second is a number, the regexp group to match. Optional third item is
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
137 whether the prompt is multi-line. If nil or omitted, prompt is assumed to
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
138 be on a single line."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
139 :group 'dirtrack
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
140 :type '(sexp (regexp :tag "Prompt Expression")
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
141 (integer :tag "Regexp Group")
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
142 (boolean :tag "Multiline Prompt")
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
143 )
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
144 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (make-variable-buffer-local 'dirtrack-list)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
148 (defcustom dirtrack-debug nil
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
149 "*If non-nil, the function `dirtrack' will report debugging info."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
150 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
151 :type 'boolean
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
152 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
154 (defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
155 "Buffer to write directory tracking debug information."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
156 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
157 :type 'string
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
158 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
160 (defcustom dirtrackp t
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
161 "*If non-nil, directory tracking via `dirtrack' is enabled."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
162 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
163 :type 'boolean
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
164 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (make-variable-buffer-local 'dirtrackp)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
168 (defcustom dirtrack-directory-function
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
169 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 'dirtrack-windows-directory-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 'dirtrack-default-directory-function)
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
172 "*Function to apply to the prompt directory for comparison purposes."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
173 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
174 :type 'function
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
175 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
177 (defcustom dirtrack-canonicalize-function
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
178 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 'downcase 'identity)
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
180 "*Function to apply to the default directory for comparison purposes."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
181 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
182 :type 'function
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
183 )
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
184
23851
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
185 (defcustom dirtrack-directory-change-hook nil
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
186 "Hook that is called when a directory change is made."
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
187 :group 'dirtrack
35967
5f41effdffe6 (dirtrack-directory-change-hook): Fix :type.
Dave Love <fx@gnu.org>
parents: 32664
diff changeset
188 :type 'hook
23851
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
189 )
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
190
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
191
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
192 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
193 ;; Functions
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
194 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (defun dirtrack-default-directory-function (dir)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 "Return a canonical directory for comparison purposes.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 Such a directory ends with a forward slash."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (let ((directory dir))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (if (not (char-equal ?/ (string-to-char (substring directory -1))))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (concat directory "/")
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 directory)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (defun dirtrack-windows-directory-function (dir)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 "Return a canonical directory for comparison purposes.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
206 Such a directory is all lowercase, has forward-slashes as delimiters,
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 and ends with a forward slash."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (let ((directory dir))
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
209 (setq directory (downcase (dirtrack-replace-slash directory t)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (if (not (char-equal ?/ (string-to-char (substring directory -1))))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (concat directory "/")
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 directory)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
50264
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
214 (defun dirtrack-cygwin-directory-function (dir)
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
215 "Return a canonical directory taken from a Cygwin path for comparison purposes."
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
216 (if (string-match "/cygdrive/\\([A-Z]\\)\\(.*\\)" dir)
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
217 (concat (match-string 1 dir) ":" (match-string 2 dir))
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
218 dir))
251a71560199 Remove timestamp
Peter Breton <pbreton@attbi.com>
parents: 49549
diff changeset
219
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
220 (defconst dirtrack-forward-slash (regexp-quote "/"))
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
221 (defconst dirtrack-backward-slash (regexp-quote "\\"))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
223 (defun dirtrack-replace-slash (string &optional opposite)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 "Replace forward slashes with backwards ones.
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
225 If additional argument is non-nil, replace backwards slashes with
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 forward ones."
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
227 (let ((orig (if opposite
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
228 dirtrack-backward-slash
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
229 dirtrack-forward-slash))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
230 (replace (if opposite
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
231 dirtrack-forward-slash
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
232 dirtrack-backward-slash))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (newstring string)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (while (string-match orig newstring)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (setq newstring (replace-match replace nil t newstring)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 newstring))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 ;; Copied from shell.el
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (defun dirtrack-toggle ()
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 "Enable or disable Dirtrack directory tracking in a shell buffer."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (interactive)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (setq dirtrackp (not dirtrackp))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (message "Directory tracking %s" (if dirtrackp "ON" "OFF")))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
246 (defun dirtrack-debug-toggle ()
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
247 "Enable or disable Dirtrack debugging."
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
248 (interactive)
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
249 (setq dirtrack-debug (not dirtrack-debug))
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
250 (message "Directory debugging %s" (if dirtrack-debug "ON" "OFF"))
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
251 (and dirtrack-debug
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
252 (display-buffer (get-buffer-create dirtrack-debug-buffer))))
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
253
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (defun dirtrack-debug-message (string)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (let ((buf (current-buffer))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (debug-buf (get-buffer-create dirtrack-debug-buffer))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (set-buffer debug-buf)
16960
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
259 (goto-char (point-max))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (insert (concat string "\n"))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (set-buffer buf)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;;###autoload
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (defun dirtrack (input)
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
266 "Determine the current directory by scanning the process output for a prompt.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
267 The prompt to look for is the first item in `dirtrack-list'.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
268
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
269 You can toggle directory tracking by using the function `dirtrack-toggle'.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
270
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
271 If directory tracking does not seem to be working, you can use the
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
272 function `dirtrack-debug-toggle' to turn on debugging output.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
273
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
274 You can enable directory tracking by adding this function to
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
275 `comint-output-filter-functions'.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
276 "
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (if (null dirtrackp)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 nil
24355
f0b106582755 (dirtrack): Check for the prompt in the input string instead of the buffer.
Richard M. Stallman <rms@gnu.org>
parents: 23851
diff changeset
279 (let (prompt-path
f0b106582755 (dirtrack): Check for the prompt in the input string instead of the buffer.
Richard M. Stallman <rms@gnu.org>
parents: 23851
diff changeset
280 matched
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (current-dir default-directory)
16960
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
282 (dirtrack-regexp (nth 0 dirtrack-list))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (match-num (nth 1 dirtrack-list))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (multi-line (nth 2 dirtrack-list))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; No output?
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (if (eq (point) (point-min))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 nil
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (save-excursion
24355
f0b106582755 (dirtrack): Check for the prompt in the input string instead of the buffer.
Richard M. Stallman <rms@gnu.org>
parents: 23851
diff changeset
290 (setq matched (string-match dirtrack-regexp input)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 ;; No match
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (if (null matched)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (and dirtrack-debug
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
294 (dirtrack-debug-message
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
295 (format
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
296 "Input `%s' failed to match regexp: %s"
23851
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
297 input dirtrack-regexp)))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
298 (setq prompt-path
24355
f0b106582755 (dirtrack): Check for the prompt in the input string instead of the buffer.
Richard M. Stallman <rms@gnu.org>
parents: 23851
diff changeset
299 (substring input
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (match-beginning match-num) (match-end match-num)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;; Empty string
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 (if (not (> (length prompt-path) 0))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 (and dirtrack-debug
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
304 (dirtrack-debug-message "Match is empty string"))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ;; Transform prompts into canonical forms
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (setq prompt-path (funcall dirtrack-directory-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 prompt-path))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (setq current-dir (funcall dirtrack-canonicalize-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 current-dir))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (and dirtrack-debug
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
311 (dirtrack-debug-message
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (format
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 "Prompt is %s\nCurrent directory is %s"
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
314 prompt-path current-dir)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 ;; Compare them
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (if (or (string= current-dir prompt-path)
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
317 (string= current-dir
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (abbreviate-file-name prompt-path)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (and dirtrack-debug
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
320 (dirtrack-debug-message
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (format "Not changing directory")))
16960
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
322 ;; It's possible that Emacs will think the directory
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
323 ;; won't exist (eg, rlogin buffers)
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
324 (if (file-accessible-directory-p prompt-path)
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
325 ;; Change directory
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
326 (and (shell-process-cd prompt-path)
32664
f2f529ddfb31 (dirtrack): Fix call to run-hooks.
Gerd Moellmann <gerd@gnu.org>
parents: 24370
diff changeset
327 (run-hooks 'dirtrack-directory-change-hook)
16960
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
328 dirtrack-debug
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 35967
diff changeset
329 (dirtrack-debug-message
16960
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
330 (format "Changing directory to %s" prompt-path)))
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
331 (error "Directory %s does not exist" prompt-path)))
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
332 )))))
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
333 input)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (provide 'dirtrack)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;;; dirtrack.el ends here