emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/dirtrack.el


From: Juanma Barranquero
Subject: [Emacs-diffs] Changes to emacs/lisp/dirtrack.el
Date: Fri, 31 Jan 2003 10:15:15 -0500

Index: emacs/lisp/dirtrack.el
diff -c emacs/lisp/dirtrack.el:1.11 emacs/lisp/dirtrack.el:1.12
*** emacs/lisp/dirtrack.el:1.11 Wed Feb  7 18:38:46 2001
--- emacs/lisp/dirtrack.el      Fri Jan 31 10:15:15 2003
***************
*** 5,11 ****
  ;; Author: Peter Breton <address@hidden>
  ;; Created: Sun Nov 17 1996
  ;; Keywords: processes
! ;; Time-stamp: <1999-02-21 01:27:24 pbreton>
  
  ;; This file is part of GNU Emacs.
  
--- 5,11 ----
  ;; Author: Peter Breton <address@hidden>
  ;; Created: Sun Nov 17 1996
  ;; Keywords: processes
! ;; Time-stamp: <2003-01-31 16:15:05 jbarranquero>
  
  ;; This file is part of GNU Emacs.
  
***************
*** 42,49 ****
  ;; 1) Set your shell's prompt to contain the current working directory.
  ;; You may need to consult your shell's documentation to find out how to
  ;; do this.
! ;; 
! ;; Note that directory tracking is done by matching regular expressions, 
  ;; therefore it is *VERY IMPORTANT* for your prompt to be easily
  ;; distinguishable from other output. If your prompt regexp is too general,
  ;; you will see error messages from the dirtrack filter as it attempts to cd
--- 42,49 ----
  ;; 1) Set your shell's prompt to contain the current working directory.
  ;; You may need to consult your shell's documentation to find out how to
  ;; do this.
! ;;
! ;; Note that directory tracking is done by matching regular expressions,
  ;; therefore it is *VERY IMPORTANT* for your prompt to be easily
  ;; distinguishable from other output. If your prompt regexp is too general,
  ;; you will see error messages from the dirtrack filter as it attempts to cd
***************
*** 52,67 ****
  ;; 2) Set the variable `dirtrack-list' to an appropriate value. This
  ;; should be a list of two elements: the first is a regular expression
  ;; which matches your prompt up to and including the pathname part.
! ;; The second is a number which tells which regular expression group to 
  ;; match to extract only the pathname. If you use a multi-line prompt,
  ;; 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.
! ;; 
  ;; 3) Add a hook to shell-mode to enable the directory tracking:
  ;;
  ;; (add-hook 'shell-mode-hook
--- 52,67 ----
  ;; 2) Set the variable `dirtrack-list' to an appropriate value. This
  ;; should be a list of two elements: the first is a regular expression
  ;; which matches your prompt up to and including the pathname part.
! ;; The second is a number which tells which regular expression group to
  ;; match to extract only the pathname. If you use a multi-line prompt,
  ;; 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.
! ;;
  ;; 3) Add a hook to shell-mode to enable the directory tracking:
  ;;
  ;; (add-hook 'shell-mode-hook
***************
*** 83,108 ****
  ;;    'dirtrack-list' is set to (list "^\\([/~].*\\)address@hidden *" 1 t)
  ;;
  ;; I'd appreciate other examples from people who use this package.
! ;; 
  ;; Here's one from Stephen Eglen:
  ;;
  ;;   Running under tcsh:
  ;;   (setq-default dirtrack-list '("^%E \\([^ ]+\\)" 1))
! ;;   
  ;;   It might be worth mentioning in your file that emacs sources start up
  ;;   files of the form: ~/.emacs_<SHELL> where <SHELL> is the name of the
  ;;   shell.  So for example, I have the following in ~/.emacs_tcsh:
! ;;   
  ;;   set prompt = "%%E %~ %h% "
! ;;   
  ;;   This produces a prompt of the form:
! ;;   %E /var/spool 10% 
! ;;   
  ;;   This saves me from having to use the %E prefix in other non-emacs
  ;;   shells.
  ;;
  ;; A final note:
! ;; 
  ;;   I run LOTS of shell buffers through Emacs, sometimes as different users
  ;;   (eg, when logged in as myself, I'll run a root shell in the same Emacs).
  ;;   If you do this, and the shell prompt contains a ~, Emacs will interpret
--- 83,108 ----
  ;;    'dirtrack-list' is set to (list "^\\([/~].*\\)address@hidden *" 1 t)
  ;;
  ;; I'd appreciate other examples from people who use this package.
! ;;
  ;; Here's one from Stephen Eglen:
  ;;
  ;;   Running under tcsh:
  ;;   (setq-default dirtrack-list '("^%E \\([^ ]+\\)" 1))
! ;;
  ;;   It might be worth mentioning in your file that emacs sources start up
  ;;   files of the form: ~/.emacs_<SHELL> where <SHELL> is the name of the
  ;;   shell.  So for example, I have the following in ~/.emacs_tcsh:
! ;;
  ;;   set prompt = "%%E %~ %h% "
! ;;
  ;;   This produces a prompt of the form:
! ;;   %E /var/spool 10%
! ;;
  ;;   This saves me from having to use the %E prefix in other non-emacs
  ;;   shells.
  ;;
  ;; A final note:
! ;;
  ;;   I run LOTS of shell buffers through Emacs, sometimes as different users
  ;;   (eg, when logged in as myself, I'll run a root shell in the same Emacs).
  ;;   If you do this, and the shell prompt contains a ~, Emacs will interpret
***************
*** 134,144 ****
  (defcustom dirtrack-list (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
    "*List for directory tracking.
  First item is a regexp that describes where to find the path in a prompt.
! Second is a number, the regexp group to match. Optional third item is 
! whether the prompt is multi-line. If nil or omitted, prompt is assumed to 
  be on a single line."
    :group 'dirtrack
!   :type  '(sexp (regexp  :tag "Prompt Expression") 
                (integer :tag "Regexp Group")
                (boolean :tag "Multiline Prompt")
                )
--- 134,144 ----
  (defcustom dirtrack-list (list "^emacs \\([a-zA-Z]:.*\\)>" 1)
    "*List for directory tracking.
  First item is a regexp that describes where to find the path in a prompt.
! Second is a number, the regexp group to match. Optional third item is
! whether the prompt is multi-line. If nil or omitted, prompt is assumed to
  be on a single line."
    :group 'dirtrack
!   :type  '(sexp (regexp  :tag "Prompt Expression")
                (integer :tag "Regexp Group")
                (boolean :tag "Multiline Prompt")
                )
***************
*** 166,173 ****
  
  (make-variable-buffer-local 'dirtrackp)
  
! (defcustom dirtrack-directory-function 
!   (if (memq system-type (list 'ms-dos 'windows-nt))
        'dirtrack-windows-directory-function
      'dirtrack-default-directory-function)
    "*Function to apply to the prompt directory for comparison purposes."
--- 166,173 ----
  
  (make-variable-buffer-local 'dirtrackp)
  
! (defcustom dirtrack-directory-function
!   (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
        'dirtrack-windows-directory-function
      'dirtrack-default-directory-function)
    "*Function to apply to the prompt directory for comparison purposes."
***************
*** 175,182 ****
    :type  'function
    )
  
! (defcustom dirtrack-canonicalize-function  
!   (if (memq system-type (list 'ms-dos 'windows-nt))
        'downcase 'identity)
    "*Function to apply to the default directory for comparison purposes."
    :group 'dirtrack
--- 175,182 ----
    :type  'function
    )
  
! (defcustom dirtrack-canonicalize-function
!   (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
        'downcase 'identity)
    "*Function to apply to the default directory for comparison purposes."
    :group 'dirtrack
***************
*** 204,210 ****
  
  (defun dirtrack-windows-directory-function (dir)
    "Return a canonical directory for comparison purposes.
! Such a directory is all lowercase, has forward-slashes as delimiters, 
  and ends with a forward slash."
    (let ((directory dir))
      (setq directory (downcase (dirtrack-replace-slash directory t)))
--- 204,210 ----
  
  (defun dirtrack-windows-directory-function (dir)
    "Return a canonical directory for comparison purposes.
! Such a directory is all lowercase, has forward-slashes as delimiters,
  and ends with a forward slash."
    (let ((directory dir))
      (setq directory (downcase (dirtrack-replace-slash directory t)))
***************
*** 217,229 ****
  
  (defun dirtrack-replace-slash (string &optional opposite)
    "Replace forward slashes with backwards ones.
! If additional argument is non-nil, replace backwards slashes with 
  forward ones."
!   (let ((orig     (if opposite 
!                     dirtrack-backward-slash 
                    dirtrack-forward-slash))
!       (replace  (if opposite 
!                     dirtrack-forward-slash 
                    dirtrack-backward-slash))
        (newstring string)
        )
--- 217,229 ----
  
  (defun dirtrack-replace-slash (string &optional opposite)
    "Replace forward slashes with backwards ones.
! If additional argument is non-nil, replace backwards slashes with
  forward ones."
!   (let ((orig     (if opposite
!                     dirtrack-backward-slash
                    dirtrack-forward-slash))
!       (replace  (if opposite
!                     dirtrack-forward-slash
                    dirtrack-backward-slash))
        (newstring string)
        )
***************
*** 266,272 ****
  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 (null dirtrackp)
--- 266,272 ----
  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 (null dirtrackp)
***************
*** 286,318 ****
          ;; No match
          (if (null matched)
              (and dirtrack-debug
!                  (dirtrack-debug-message 
!                   (format 
!                    "Input `%s' failed to match regexp: %s" 
                    input dirtrack-regexp)))
!           (setq prompt-path 
                  (substring input
                   (match-beginning match-num) (match-end match-num)))
            ;; Empty string
            (if (not (> (length prompt-path) 0))
                (and dirtrack-debug
!                    (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
                                         current-dir))
              (and dirtrack-debug
!                  (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")))
                ;; It's possible that Emacs will think the directory
                ;; won't exist (eg, rlogin buffers)
--- 286,318 ----
          ;; No match
          (if (null matched)
              (and dirtrack-debug
!                  (dirtrack-debug-message
!                   (format
!                    "Input `%s' failed to match regexp: %s"
                    input dirtrack-regexp)))
!           (setq prompt-path
                  (substring input
                   (match-beginning match-num) (match-end match-num)))
            ;; Empty string
            (if (not (> (length prompt-path) 0))
                (and dirtrack-debug
!                    (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
                                         current-dir))
              (and dirtrack-debug
!                  (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")))
                ;; It's possible that Emacs will think the directory
                ;; won't exist (eg, rlogin buffers)
***************
*** 321,327 ****
                    (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)))
              )))))
--- 321,327 ----
                    (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)))
              )))))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]