annotate lisp/dirtrack.el @ 42307:922f0ef2951b

(balance-windows): Use new PRESERVE-BEFORE arg to enlarge-window. Use save-selected-window. Don't try to resize windows that end at the bottom "level". Retry changing the sizes until the windows get the desired sizes. Discount the minibuffer when computing total height available.
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Dec 2001 10:34:39 +0000
parents 5f41effdffe6
children 99be3a1e2589
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
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
8 ;; Time-stamp: <1999-02-21 01:27:24 pbreton>
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; 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
14 ;; the Free Software Foundation; either version 2, or (at your option)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; 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
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; Shell directory tracking by watching the prompt.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; This is yet another attempt at a directory-tracking package for
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; Emacs shell-mode. However, this package makes one strong assumption:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; that you can customize your shell's prompt to contain the
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; current working directory. Most shells do support this, including
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; 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
36 ;; Windows95 (COMMAND.COM) and Windows NT (CMD.EXE), and most 3rd party
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; 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
38 ;; will be useless to you.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; Installation:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; 1) Set your shell's prompt to contain the current working directory.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; 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
44 ;; do this.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; Note that directory tracking is done by matching regular expressions,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; therefore it is *VERY IMPORTANT* for your prompt to be easily
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; distinguishable from other output. If your prompt regexp is too general,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; 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
50 ;; to non-existent directories.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;;
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
52 ;; 2) Set the variable `dirtrack-list' to an appropriate value. This
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; 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
54 ;; which matches your prompt up to and including the pathname part.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; The second is a number which tells which regular expression group to
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; 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
57 ;; 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
58 ;; 'comint.el' assume a single-line prompt (eg, comint-bol).
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; Determining this information may take some experimentation. Setting
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
61 ;; 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
62 ;; 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
63 ;; toggle this setting with the `dirtrack-debug-toggle' function.
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;
17930
c3daa16fce91 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16960
diff changeset
65 ;; 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
66 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; (add-hook 'shell-mode-hook
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; (function (lambda ()
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
69 ;; (setq comint-preoutput-filter-functions
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; (append (list 'dirtrack)
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
71 ;; comint-preoutput-filter-functions)))))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; You may wish to turn ordinary shell tracking off by calling
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
74 ;; `shell-dirtrack-toggle' or setting `shell-dirtrackp'.
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; Examples:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; 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
79 ;; 'dirtrack-list' is set to (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; 2) On Solaris running bash, my prompt is set like this:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; PS1="\w\012emacs@\h(\!) [\t]% "
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; 'dirtrack-list' is set to (list "^\\([/~].*\\)\nemacs@[^%]+% *" 1 t)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;;
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; I'd appreciate other examples from people who use this package.
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
86 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
87 ;; Here's one from Stephen Eglen:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
88 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
89 ;; Running under tcsh:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
90 ;; (setq-default dirtrack-list '("^%E \\([^ ]+\\)" 1))
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
91 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
92 ;; 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
93 ;; 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
94 ;; shell. So for example, I have the following in ~/.emacs_tcsh:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
95 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
96 ;; set prompt = "%%E %~ %h% "
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
97 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
98 ;; This produces a prompt of the form:
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
99 ;; %E /var/spool 10%
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
100 ;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
101 ;; 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
102 ;; shells.
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
103 ;;
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
104 ;; A final note:
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
105 ;;
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
106 ;; 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
107 ;; (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
108 ;; 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
109 ;; 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
110 ;; 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
111 ;; (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
112 ;; with a ~ in it).
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
113 ;;
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
114 ;; 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
115 ;; (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
116 ;; 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
117 ;; but also affects file completion, etc.
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;;; Code:
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (eval-when-compile
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (require 'comint)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (require 'shell))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
125 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
126 ;; Customization Variables
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
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
129 (defgroup dirtrack nil
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
130 "Directory tracking by watching the prompt."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
131 :prefix "dirtrack-"
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
132 :group 'shell)
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
133
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
134 (defcustom dirtrack-list (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "*List for directory tracking.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 First item is a regexp that describes where to find the path in a prompt.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 Second is a number, the regexp group to match. Optional third item is
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 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
139 be on a single line."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
140 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
141 :type '(sexp (regexp :tag "Prompt Expression")
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
142 (integer :tag "Regexp Group")
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
143 (boolean :tag "Multiline Prompt")
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
144 )
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
145 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (make-variable-buffer-local 'dirtrack-list)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
149 (defcustom dirtrack-debug nil
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
150 "*If non-nil, the function `dirtrack' will report debugging info."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
151 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
152 :type 'boolean
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
153 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
155 (defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
156 "Buffer to write directory tracking debug information."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
157 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
158 :type 'string
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
159 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
161 (defcustom dirtrackp t
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
162 "*If non-nil, directory tracking via `dirtrack' is enabled."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
163 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
164 :type 'boolean
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
165 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (make-variable-buffer-local 'dirtrackp)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
169 (defcustom dirtrack-directory-function
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (if (memq system-type (list 'ms-dos 'windows-nt))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 'dirtrack-windows-directory-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 'dirtrack-default-directory-function)
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
173 "*Function to apply to the prompt directory for comparison purposes."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
174 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
175 :type 'function
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
176 )
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
178 (defcustom dirtrack-canonicalize-function
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (if (memq system-type (list 'ms-dos 'windows-nt))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 'downcase 'identity)
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
181 "*Function to apply to the default directory for comparison purposes."
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
182 :group 'dirtrack
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
183 :type 'function
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
184 )
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
185
23851
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
186 (defcustom dirtrack-directory-change-hook nil
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
187 "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
188 :group 'dirtrack
35967
5f41effdffe6 (dirtrack-directory-change-hook): Fix :type.
Dave Love <fx@gnu.org>
parents: 32664
diff changeset
189 :type 'hook
23851
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
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
192
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
193 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
194 ;; Functions
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
195 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (defun dirtrack-default-directory-function (dir)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 "Return a canonical directory for comparison purposes.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 Such a directory ends with a forward slash."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (let ((directory dir))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (if (not (char-equal ?/ (string-to-char (substring directory -1))))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (concat directory "/")
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 directory)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (defun dirtrack-windows-directory-function (dir)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 "Return a canonical directory for comparison purposes.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 Such a directory is all lowercase, has forward-slashes as delimiters,
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 and ends with a forward slash."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (let ((directory dir))
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
210 (setq directory (downcase (dirtrack-replace-slash directory t)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (if (not (char-equal ?/ (string-to-char (substring directory -1))))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (concat directory "/")
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 directory)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
215 (defconst dirtrack-forward-slash (regexp-quote "/"))
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
216 (defconst dirtrack-backward-slash (regexp-quote "\\"))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
218 (defun dirtrack-replace-slash (string &optional opposite)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 "Replace forward slashes with backwards ones.
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 If additional argument is non-nil, replace backwards slashes with
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 forward ones."
21183
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
222 (let ((orig (if opposite
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
223 dirtrack-backward-slash
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
224 dirtrack-forward-slash))
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
225 (replace (if opposite
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
226 dirtrack-forward-slash
934132d62987 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
227 dirtrack-backward-slash))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (newstring string)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (while (string-match orig newstring)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (setq newstring (replace-match replace nil t newstring)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 newstring))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;; Copied from shell.el
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (defun dirtrack-toggle ()
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 "Enable or disable Dirtrack directory tracking in a shell buffer."
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (interactive)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 (setq dirtrackp (not dirtrackp))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (message "Directory tracking %s" (if dirtrackp "ON" "OFF")))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
23390
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
241 (defun dirtrack-debug-toggle ()
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
242 "Enable or disable Dirtrack debugging."
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
243 (interactive)
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
244 (setq dirtrack-debug (not dirtrack-debug))
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
245 (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
246 (and dirtrack-debug
ce9dd8548989 Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents: 21183
diff changeset
247 (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
248
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (defun dirtrack-debug-message (string)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (let ((buf (current-buffer))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (debug-buf (get-buffer-create dirtrack-debug-buffer))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (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
254 (goto-char (point-max))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (insert (concat string "\n"))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (set-buffer buf)
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
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 ;;;###autoload
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (defun dirtrack (input)
24370
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
261 "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
262 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
263
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
264 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
265
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
266 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
267 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
268
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
269 You can enable directory tracking by adding this function to
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
270 `comint-output-filter-functions'.
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
271 "
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (if (null dirtrackp)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 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
274 (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
275 matched
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (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
277 (dirtrack-regexp (nth 0 dirtrack-list))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 (match-num (nth 1 dirtrack-list))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (multi-line (nth 2 dirtrack-list))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 )
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ;; No output?
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (if (eq (point) (point-min))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 nil
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (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
285 (setq matched (string-match dirtrack-regexp input)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; No match
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (if (null matched)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 (and dirtrack-debug
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (dirtrack-debug-message
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (format
23851
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
291 "Input `%s' failed to match regexp: %s"
6c6028a96f5a (dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents: 23390
diff changeset
292 input dirtrack-regexp)))
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (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
294 (substring input
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (match-beginning match-num) (match-end match-num)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 ;; Empty string
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (if (not (> (length prompt-path) 0))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (and dirtrack-debug
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (dirtrack-debug-message "Match is empty string"))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;; Transform prompts into canonical forms
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 (setq prompt-path (funcall dirtrack-directory-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 prompt-path))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 (setq current-dir (funcall dirtrack-canonicalize-function
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 current-dir))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (and dirtrack-debug
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (dirtrack-debug-message
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (format
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 "Prompt is %s\nCurrent directory is %s"
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 prompt-path current-dir)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 ;; Compare them
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (if (or (string= current-dir prompt-path)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (string= current-dir
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (abbreviate-file-name prompt-path)))
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (and dirtrack-debug
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (dirtrack-debug-message
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (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
317 ;; 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
318 ;; 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
319 (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
320 ;; Change directory
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
321 (and (shell-process-cd prompt-path)
32664
f2f529ddfb31 (dirtrack): Fix call to run-hooks.
Gerd Moellmann <gerd@gnu.org>
parents: 24370
diff changeset
322 (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
323 dirtrack-debug
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
324 (dirtrack-debug-message
8c56da3f7f7f (dirtrack-debug-message): Put output at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16817
diff changeset
325 (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
326 (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
327 )))))
fa97a69b1d3c (dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents: 24355
diff changeset
328 input)
16817
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 (provide 'dirtrack)
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
40eaf36862f4 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 ;;; dirtrack.el ends here