diff lisp/dirtrack.el @ 85739:0600735b5f64

Update commentary. (dirtrack-debug): Doc fix. (dirtrack-mode, dirtrack-debug-mode): New names for dirtrack-toggle and dirtrack-debug-toggle. Use define-minor-mode. (dirtrack-toggle, dirtrack-debug-toggle, dirtrackp, dirtrack-debug): Make obsolete. (dirtrack-debug-message): Only print message if dirtrack-debug-mode is non-nil. Use with-current-buffer. (dirtrack): Doc fix. Use dirtrack-mode rather than dirtrackp. Remove dirtrack-debug checks now that dirtrack-debug-message does this.
author Glenn Morris <rgm@gnu.org>
date Mon, 29 Oct 2007 00:40:50 +0000
parents 9355f9b7bbff
children f6d6cf96529d
line wrap: on
line diff
--- a/lisp/dirtrack.el	Mon Oct 29 00:40:27 2007 +0000
+++ b/lisp/dirtrack.el	Mon Oct 29 00:40:50 2007 +0000
@@ -57,18 +57,12 @@
 ;; add 't' as a third element.  Note that some of the functions in
 ;; 'comint.el' assume a single-line prompt (eg, comint-bol).
 ;;
-;; Determining this information may take some experimentation.  Setting
-;; the variable `dirtrack-debug' may help; it causes the directory-tracking
-;; filter to log messages to the buffer `dirtrack-debug-buffer'.  You can easily
-;; toggle this setting with the `dirtrack-debug-toggle' function.
+;; Determining this information may take some experimentation.  Using
+;; `dirtrack-debug-mode' may help; it causes the directory-tracking
+;; filter to log messages to the buffer `dirtrack-debug-buffer'.
 ;;
-;; 3) Add a hook to shell-mode to enable the directory tracking:
-;;
-;; (add-hook 'shell-mode-hook
-;;   (lambda () (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)))
-;;
-;; You may wish to turn ordinary shell tracking off by calling
-;; `shell-dirtrack-toggle' or setting `shell-dirtrackp'.
+;; 3) Activate `dirtrack-mode'.  You may wish to turn ordinary shell
+;; tracking off by calling `shell-dirtrack-mode'.
 ;;
 ;; Examples:
 ;;
@@ -147,7 +141,7 @@
   :type  'boolean)
 
 (defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
-  "Buffer to write directory tracking debug information."
+  "Buffer in which to write directory tracking debug information."
   :group 'dirtrack
   :type  'string)
 
@@ -196,49 +190,49 @@
       (concat (match-string 1 dir) ":" (match-string 2 dir))
     dir))
 
-;; Copied from shell.el
-(defun dirtrack-toggle ()
-  "Enable or disable Dirtrack directory tracking in a shell buffer."
-  (interactive)
-  (if (setq dirtrackp (not dirtrackp))
+
+;;;###autoload
+(define-minor-mode dirtrack-mode
+  "Enable or disable Dirtrack directory tracking in a shell buffer.
+This provides an alternative to `shell-dirtrack-mode'."
+  nil nil nil
+  (if dirtrack-mode
       (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)
-    (remove-hook 'comint-preoutput-filter-functions 'dirtrack t))
-  (message "Directory tracking %s" (if dirtrackp "ON" "OFF")))
+    (remove-hook 'comint-preoutput-filter-functions 'dirtrack t)))
 
-(defun dirtrack-debug-toggle ()
+(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1")
+(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1")
+
+
+(define-minor-mode dirtrack-debug-mode
   "Enable or disable Dirtrack debugging."
-  (interactive)
-  (setq dirtrack-debug (not dirtrack-debug))
-  (message "Directory debugging %s" (if dirtrack-debug "ON" "OFF"))
-  (and dirtrack-debug
-       (display-buffer (get-buffer-create dirtrack-debug-buffer))))
+  nil nil nil
+  (if dirtrack-debug-mode
+      (display-buffer (get-buffer-create dirtrack-debug-buffer))))
+
+(define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode
+  "23.1")
+(define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1")
+
 
 (defun dirtrack-debug-message (string)
-  (let ((buf (current-buffer))
-	(debug-buf (get-buffer-create dirtrack-debug-buffer))
-	)
-    (set-buffer debug-buf)
-    (goto-char (point-max))
-    (insert (concat string "\n"))
-    (set-buffer buf)
-  ))
+  "Insert string at the end of `dirtrack-debug-buffer'."
+  (when dirtrack-debug-mode
+    (with-current-buffer (get-buffer-create dirtrack-debug-buffer)
+      (goto-char (point-max))
+      (insert (concat string "\n")))))
 
 ;;;###autoload
 (defun dirtrack (input)
   "Determine the current directory by scanning the process output for a prompt.
 The prompt to look for is the first item in `dirtrack-list'.
 
-You can toggle directory tracking by using the function `dirtrack-toggle'.
+You can toggle directory tracking by using the function `dirtrack-mode'.
 
 If directory tracking does not seem to be working, you can use the
-function `dirtrack-debug-toggle' to turn on debugging output.
-
-You can enable directory tracking by adding this function to
-`comint-output-filter-functions'."
-  (if (or (null dirtrackp)
-          ;; No output?
-          (eq (point) (point-min)))
-      nil
+function `dirtrack-debug-mode' to turn on debugging output."
+  (unless (or (null dirtrack-mode)
+              (eq (point) (point-min)))     ; no output?
     (let (prompt-path
 	  (current-dir default-directory)
 	  (dirtrack-regexp    (nth 0 dirtrack-list))
@@ -247,40 +241,31 @@
 	  (multi-line	      (nth 2 dirtrack-list)))
       (save-excursion
         ;; No match
-        (if (null (string-match dirtrack-regexp input))
-            (and dirtrack-debug
-                 (dirtrack-debug-message
-                  (format
-                   "Input `%s' failed to match `dirtrack-regexp'" input)))
+        (if (not (string-match dirtrack-regexp input))
+            (dirtrack-debug-message
+             (format "Input `%s' failed to match `dirtrack-regexp'" input))
           (setq prompt-path (match-string match-num input))
           ;; Empty string
           (if (not (> (length prompt-path) 0))
-              (and dirtrack-debug
-                   (dirtrack-debug-message "Match is empty string"))
+              (dirtrack-debug-message "Match is empty string")
             ;; Transform prompts into canonical forms
             (setq prompt-path (funcall dirtrack-directory-function
-                                       prompt-path))
-            (setq current-dir (funcall dirtrack-canonicalize-function
+                                       prompt-path)
+                  current-dir (funcall dirtrack-canonicalize-function
                                        current-dir))
-            (and dirtrack-debug
-                 (dirtrack-debug-message
-                  (format
-                   "Prompt is %s\nCurrent directory is %s"
-                   prompt-path current-dir)))
+            (dirtrack-debug-message
+             (format "Prompt is %s\nCurrent directory is %s"
+                     prompt-path current-dir))
             ;; Compare them
             (if (or (string= current-dir prompt-path)
-                    (string= current-dir
-                             (abbreviate-file-name prompt-path)))
-                (and dirtrack-debug
-                     (dirtrack-debug-message
-                      (format "Not changing directory")))
+                    (string= current-dir (abbreviate-file-name prompt-path)))
+                (dirtrack-debug-message (format "Not changing directory"))
               ;; It's possible that Emacs will think the directory
               ;; won't exist (eg, rlogin buffers)
               (if (file-accessible-directory-p prompt-path)
                   ;; Change directory
                   (and (shell-process-cd prompt-path)
                        (run-hooks 'dirtrack-directory-change-hook)
-                       dirtrack-debug
                        (dirtrack-debug-message
                         (format "Changing directory to %s" prompt-path)))
                 (error "Directory %s does not exist" prompt-path)))