Mercurial > emacs
annotate lisp/dirtrack.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | ffe7f17f895f |
children | 2b266010d0b7 |
rev | line source |
---|---|
16817 | 1 ;;; dirtrack.el --- Directory Tracking by watching the prompt |
2 | |
74439 | 3 ;; Copyright (C) 1996, 2001, 2002, 2003, 2004, 2005, |
106815 | 4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
16817 | 5 |
21183 | 6 ;; Author: Peter Breton <pbreton@cs.umb.edu> |
16817 | 7 ;; Created: Sun Nov 17 1996 |
8 ;; Keywords: processes | |
9 | |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
16817 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
15 ;; (at your option) any later version. |
16817 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
16817 | 24 |
25 ;;; Commentary: | |
26 | |
27 ;; Shell directory tracking by watching the prompt. | |
28 ;; | |
29 ;; This is yet another attempt at a directory-tracking package for | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
30 ;; Emacs shell-mode. However, this package makes one strong assumption: |
16817 | 31 ;; that you can customize your shell's prompt to contain the |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
32 ;; current working directory. Most shells do support this, including |
16817 | 33 ;; almost every type of Bourne and C shell on Unix, the native shells on |
34 ;; Windows95 (COMMAND.COM) and Windows NT (CMD.EXE), and most 3rd party | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
35 ;; Windows shells. If you cannot do this, or do not wish to, this package |
16817 | 36 ;; will be useless to you. |
37 ;; | |
38 ;; Installation: | |
39 ;; | |
40 ;; 1) Set your shell's prompt to contain the current working directory. | |
41 ;; You may need to consult your shell's documentation to find out how to | |
42 ;; do this. | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
43 ;; |
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
44 ;; Note that directory tracking is done by matching regular expressions, |
16817 | 45 ;; therefore it is *VERY IMPORTANT* for your prompt to be easily |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
46 ;; distinguishable from other output. If your prompt regexp is too general, |
16817 | 47 ;; you will see error messages from the dirtrack filter as it attempts to cd |
48 ;; to non-existent directories. | |
49 ;; | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
50 ;; 2) Set the variable `dirtrack-list' to an appropriate value. This |
16817 | 51 ;; should be a list of two elements: the first is a regular expression |
52 ;; 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
|
53 ;; The second is a number which tells which regular expression group to |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
54 ;; match to extract only the pathname. If you use a multi-line prompt, |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
55 ;; add 't' as a third element. Note that some of the functions in |
16817 | 56 ;; 'comint.el' assume a single-line prompt (eg, comint-bol). |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
57 ;; |
85739 | 58 ;; Determining this information may take some experimentation. Using |
59 ;; `dirtrack-debug-mode' may help; it causes the directory-tracking | |
60 ;; filter to log messages to the buffer `dirtrack-debug-buffer'. | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
61 ;; |
85739 | 62 ;; 3) Activate `dirtrack-mode'. You may wish to turn ordinary shell |
63 ;; tracking off by calling `shell-dirtrack-mode'. | |
16817 | 64 ;; |
65 ;; Examples: | |
66 ;; | |
67 ;; 1) On Windows NT, my prompt is set to emacs$S$P$G. | |
68 ;; 'dirtrack-list' is set to (list "^emacs \\([a-zA-Z]:.*\\)>" 1) | |
69 ;; | |
70 ;; 2) On Solaris running bash, my prompt is set like this: | |
71 ;; PS1="\w\012emacs@\h(\!) [\t]% " | |
72 ;; 'dirtrack-list' is set to (list "^\\([/~].*\\)\nemacs@[^%]+% *" 1 t) | |
73 ;; | |
74 ;; 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
|
75 ;; |
21183 | 76 ;; Here's one from Stephen Eglen: |
77 ;; | |
78 ;; Running under tcsh: | |
79 ;; (setq-default dirtrack-list '("^%E \\([^ ]+\\)" 1)) | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
80 ;; |
21183 | 81 ;; It might be worth mentioning in your file that emacs sources start up |
82 ;; files of the form: ~/.emacs_<SHELL> where <SHELL> is the name of the | |
83 ;; 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
|
84 ;; |
21183 | 85 ;; set prompt = "%%E %~ %h% " |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
86 ;; |
21183 | 87 ;; This produces a prompt of the form: |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
88 ;; %E /var/spool 10% |
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
89 ;; |
21183 | 90 ;; This saves me from having to use the %E prefix in other non-emacs |
91 ;; shells. | |
23390
ce9dd8548989
Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents:
21183
diff
changeset
|
92 ;; |
ce9dd8548989
Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents:
21183
diff
changeset
|
93 ;; A final note: |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
94 ;; |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
95 ;; 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
|
96 ;; (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
|
97 ;; 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
|
98 ;; this relative to the user which owns the Emacs process, not the user |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
99 ;; who owns the shell buffer. This may cause dirtrack to behave strangely |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
100 ;; (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
|
101 ;; with a ~ in it). |
ce9dd8548989
Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents:
21183
diff
changeset
|
102 ;; |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
103 ;; 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
|
104 ;; (using telnet, rlogin, etc) as Emacs will be checking the local |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
105 ;; filesystem, not the remote one. This problem is not specific to dirtrack, |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
106 ;; but also affects file completion, etc. |
16817 | 107 |
108 ;;; Code: | |
109 | |
110 (eval-when-compile | |
111 (require 'comint) | |
112 (require 'shell)) | |
113 | |
21183 | 114 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
115 ;; Customization Variables | |
116 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
117 | |
118 (defgroup dirtrack nil | |
119 "Directory tracking by watching the prompt." | |
120 :prefix "dirtrack-" | |
121 :group 'shell) | |
122 | |
123 (defcustom dirtrack-list (list "^emacs \\([a-zA-Z]:.*\\)>" 1) | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
124 "List for directory tracking. |
16817 | 125 First item is a regexp that describes where to find the path in a prompt. |
64538
be20990b5d3d
(dirtrack-list): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
126 Second is a number, the regexp group to match. Optional third item is |
be20990b5d3d
(dirtrack-list): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
127 whether the prompt is multi-line. If nil or omitted, prompt is assumed to |
21183 | 128 be on a single line." |
129 :group 'dirtrack | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
130 :type '(sexp (regexp :tag "Prompt Expression") |
21183 | 131 (integer :tag "Regexp Group") |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
132 (boolean :tag "Multiline Prompt"))) |
16817 | 133 |
134 (make-variable-buffer-local 'dirtrack-list) | |
135 | |
21183 | 136 (defcustom dirtrack-debug nil |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
137 "If non-nil, the function `dirtrack' will report debugging info." |
21183 | 138 :group 'dirtrack |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
139 :type 'boolean) |
16817 | 140 |
21183 | 141 (defcustom dirtrack-debug-buffer "*Directory Tracking Log*" |
85739 | 142 "Buffer in which to write directory tracking debug information." |
21183 | 143 :group 'dirtrack |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
144 :type 'string) |
16817 | 145 |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
146 (defcustom dirtrack-directory-function |
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
147 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) |
16817 | 148 'dirtrack-windows-directory-function |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
149 'file-name-as-directory) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
150 "Function to apply to the prompt directory for comparison purposes." |
21183 | 151 :group 'dirtrack |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
152 :type 'function) |
16817 | 153 |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
154 (defcustom dirtrack-canonicalize-function |
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
155 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) |
16817 | 156 'downcase 'identity) |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
157 "Function to apply to the default directory for comparison purposes." |
21183 | 158 :group 'dirtrack |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
159 :type 'function) |
21183 | 160 |
23851
6c6028a96f5a
(dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents:
23390
diff
changeset
|
161 (defcustom dirtrack-directory-change-hook nil |
6c6028a96f5a
(dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents:
23390
diff
changeset
|
162 "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
|
163 :group 'dirtrack |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
164 :type 'hook) |
23851
6c6028a96f5a
(dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents:
23390
diff
changeset
|
165 |
6c6028a96f5a
(dirtrack-directory-change-hook): New hook.
Karl Heuer <kwzh@gnu.org>
parents:
23390
diff
changeset
|
166 |
21183 | 167 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
168 ;; Functions | |
169 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
16817 | 170 |
171 | |
172 (defun dirtrack-windows-directory-function (dir) | |
173 "Return a canonical directory for comparison purposes. | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
35967
diff
changeset
|
174 Such a directory is all lowercase, has forward-slashes as delimiters, |
16817 | 175 and ends with a forward slash." |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
176 (file-name-as-directory (downcase (subst-char-in-string ?\\ ?/ dir)))) |
16817 | 177 |
50264 | 178 (defun dirtrack-cygwin-directory-function (dir) |
179 "Return a canonical directory taken from a Cygwin path for comparison purposes." | |
180 (if (string-match "/cygdrive/\\([A-Z]\\)\\(.*\\)" dir) | |
181 (concat (match-string 1 dir) ":" (match-string 2 dir)) | |
182 dir)) | |
183 | |
85739 | 184 |
185 ;;;###autoload | |
186 (define-minor-mode dirtrack-mode | |
187 "Enable or disable Dirtrack directory tracking in a shell buffer. | |
85790 | 188 This method requires that your shell prompt contain the full |
189 current working directory at all times, and that `dirtrack-list' | |
190 is set to match the prompt. This is an alternative to | |
191 `shell-dirtrack-mode', which works differently, by tracking `cd' | |
192 and similar commands which change the shell working directory." | |
85739 | 193 nil nil nil |
194 (if dirtrack-mode | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
195 (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t) |
85739 | 196 (remove-hook 'comint-preoutput-filter-functions 'dirtrack t))) |
16817 | 197 |
85739 | 198 (define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1") |
199 (define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1") | |
200 | |
201 | |
202 (define-minor-mode dirtrack-debug-mode | |
23390
ce9dd8548989
Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents:
21183
diff
changeset
|
203 "Enable or disable Dirtrack debugging." |
85739 | 204 nil nil nil |
205 (if dirtrack-debug-mode | |
206 (display-buffer (get-buffer-create dirtrack-debug-buffer)))) | |
207 | |
208 (define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode | |
209 "23.1") | |
210 (define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1") | |
211 | |
23390
ce9dd8548989
Mentioned dirtrack-debug-toggle in the docs.
Karl Heuer <kwzh@gnu.org>
parents:
21183
diff
changeset
|
212 |
16817 | 213 (defun dirtrack-debug-message (string) |
85739 | 214 "Insert string at the end of `dirtrack-debug-buffer'." |
215 (when dirtrack-debug-mode | |
216 (with-current-buffer (get-buffer-create dirtrack-debug-buffer) | |
217 (goto-char (point-max)) | |
218 (insert (concat string "\n"))))) | |
16817 | 219 |
220 ;;;###autoload | |
221 (defun dirtrack (input) | |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
222 "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
|
223 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
|
224 |
85739 | 225 You can toggle directory tracking by using the function `dirtrack-mode'. |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
226 |
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
227 If directory tracking does not seem to be working, you can use the |
85739 | 228 function `dirtrack-debug-mode' to turn on debugging output." |
229 (unless (or (null dirtrack-mode) | |
230 (eq (point) (point-min))) ; no output? | |
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
|
231 (let (prompt-path |
16817 | 232 (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
|
233 (dirtrack-regexp (nth 0 dirtrack-list)) |
16817 | 234 (match-num (nth 1 dirtrack-list)) |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
235 ;; Currently unimplemented, it seems. --Stef |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
236 (multi-line (nth 2 dirtrack-list))) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
237 (save-excursion |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
238 ;; No match |
85739 | 239 (if (not (string-match dirtrack-regexp input)) |
240 (dirtrack-debug-message | |
100061
18bc0d1e74ff
(dirtrack): Fix error message.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
241 (format "Input `%s' failed to match `dirtrack-list'" input)) |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
242 (setq prompt-path (match-string match-num input)) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
243 ;; Empty string |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
244 (if (not (> (length prompt-path) 0)) |
85739 | 245 (dirtrack-debug-message "Match is empty string") |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
246 ;; Transform prompts into canonical forms |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
247 (setq prompt-path (funcall dirtrack-directory-function |
85739 | 248 prompt-path) |
249 current-dir (funcall dirtrack-canonicalize-function | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
250 current-dir)) |
85739 | 251 (dirtrack-debug-message |
252 (format "Prompt is %s\nCurrent directory is %s" | |
253 prompt-path current-dir)) | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
254 ;; Compare them |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
255 (if (or (string= current-dir prompt-path) |
85739 | 256 (string= current-dir (abbreviate-file-name prompt-path))) |
257 (dirtrack-debug-message (format "Not changing directory")) | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
258 ;; It's possible that Emacs will think the directory |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
259 ;; won't exist (eg, rlogin buffers) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
260 (if (file-accessible-directory-p prompt-path) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
261 ;; Change directory |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
262 (and (shell-process-cd prompt-path) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
263 (run-hooks 'dirtrack-directory-change-hook) |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
264 (dirtrack-debug-message |
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
265 (format "Changing directory to %s" prompt-path))) |
107046
d9ad62ffa43a
Don't signal error on incorrect dirtrack regexp (Bug#5476)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
266 (warn "Directory %s does not exist" prompt-path))) |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
267 ))))) |
24370
fa97a69b1d3c
(dirtrack): Added docstring. Now returns input.
Richard M. Stallman <rms@gnu.org>
parents:
24355
diff
changeset
|
268 input) |
16817 | 269 |
270 (provide 'dirtrack) | |
271 | |
71666
743b3d313968
(dirtrack-default-directory-function): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
272 ;; arch-tag: 168de071-be88-4937-aff6-2aba9f328d5a |
16817 | 273 ;;; dirtrack.el ends here |