emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Kai Großjohann
Subject: [Emacs-diffs] Changes to emacs/lisp/files.el
Date: Sat, 29 Mar 2003 10:31:08 -0500

Index: emacs/lisp/files.el
diff -c emacs/lisp/files.el:1.644 emacs/lisp/files.el:1.645
*** emacs/lisp/files.el:1.644   Tue Mar 25 23:42:29 2003
--- emacs/lisp/files.el Sat Mar 29 10:31:07 2003
***************
*** 2781,2825 ****
    "Return number of names file FILENAME has."
    (car (cdr (file-attributes filename))))
  
  (defun file-relative-name (filename &optional directory)
    "Convert FILENAME to be relative to DIRECTORY (default: 
`default-directory').
  This function returns a relative file name which is equivalent to FILENAME
  when used with that default directory as the default.
! If this is impossible (which can happen on MSDOS and Windows
! when the file name and directory use different drive names)
! then it returns FILENAME."
    (save-match-data
!     (let ((fname (expand-file-name filename)))
!       (setq directory (file-name-as-directory
!                      (expand-file-name (or directory default-directory))))
!       ;; On Microsoft OSes, if FILENAME and DIRECTORY have different
!       ;; drive names, they can't be relative, so return the absolute name.
!       (if (and (or (eq system-type 'ms-dos)
!                  (eq system-type 'cygwin)
!                  (eq system-type 'windows-nt))
!              (not (string-equal (substring fname  0 2)
!                                 (substring directory 0 2))))
          filename
!       (let ((ancestor ".")
!             (fname-dir (file-name-as-directory fname)))
!         (while (and (not (string-match (concat "^" (regexp-quote directory)) 
fname-dir))
!                     (not (string-match (concat "^" (regexp-quote directory)) 
fname)))
!           (setq directory (file-name-directory (substring directory 0 -1))
                  ancestor (if (equal ancestor ".")
                               ".."
                             (concat "../" ancestor))))
!         ;; Now ancestor is empty, or .., or ../.., etc.
!         (if (string-match (concat "^" (regexp-quote directory)) fname)
!             ;; We matched within FNAME's directory part.
!             ;; Add the rest of FNAME onto ANCESTOR.
!             (let ((rest (substring fname (match-end 0))))
!               (if (and (equal ancestor ".")
!                        (not (equal rest "")))
                    ;; But don't bother with ANCESTOR if it would give us `./'.
                    rest
                  (concat (file-name-as-directory ancestor) rest)))
!           ;; We matched FNAME's directory equivalent.
!           ancestor))))))
  
  (defun save-buffer (&optional args)
    "Save current buffer in visited file if modified.  Versions described below.
--- 2781,2891 ----
    "Return number of names file FILENAME has."
    (car (cdr (file-attributes filename))))
  
+ ;; (defun file-relative-name (filename &optional directory)
+ ;;   "Convert FILENAME to be relative to DIRECTORY (default: 
`default-directory').
+ ;; This function returns a relative file name which is equivalent to FILENAME
+ ;; when used with that default directory as the default.
+ ;; If this is impossible (which can happen on MSDOS and Windows
+ ;; when the file name and directory use different drive names)
+ ;; then it returns FILENAME."
+ ;;   (save-match-data
+ ;;     (let ((fname (expand-file-name filename)))
+ ;;       (setq directory (file-name-as-directory
+ ;;                   (expand-file-name (or directory default-directory))))
+ ;;       ;; On Microsoft OSes, if FILENAME and DIRECTORY have different
+ ;;       ;; drive names, they can't be relative, so return the absolute name.
+ ;;       (if (and (or (eq system-type 'ms-dos)
+ ;;               (eq system-type 'cygwin)
+ ;;               (eq system-type 'windows-nt))
+ ;;           (not (string-equal (substring fname  0 2)
+ ;;                              (substring directory 0 2))))
+ ;;      filename
+ ;;    (let ((ancestor ".")
+ ;;          (fname-dir (file-name-as-directory fname)))
+ ;;      (while (and (not (string-match (concat "^" (regexp-quote directory)) 
fname-dir))
+ ;;                  (not (string-match (concat "^" (regexp-quote directory)) 
fname)))
+ ;;        (setq directory (file-name-directory (substring directory 0 -1))
+ ;;              ancestor (if (equal ancestor ".")
+ ;;                           ".."
+ ;;                         (concat "../" ancestor))))
+ ;;      ;; Now ancestor is empty, or .., or ../.., etc.
+ ;;      (if (string-match (concat "^" (regexp-quote directory)) fname)
+ ;;          ;; We matched within FNAME's directory part.
+ ;;          ;; Add the rest of FNAME onto ANCESTOR.
+ ;;          (let ((rest (substring fname (match-end 0))))
+ ;;            (if (and (equal ancestor ".")
+ ;;                     (not (equal rest "")))
+ ;;                ;; But don't bother with ANCESTOR if it would give us `./'.
+ ;;                rest
+ ;;              (concat (file-name-as-directory ancestor) rest)))
+ ;;        ;; We matched FNAME's directory equivalent.
+ ;;        ancestor))))))
+ 
  (defun file-relative-name (filename &optional directory)
    "Convert FILENAME to be relative to DIRECTORY (default: 
`default-directory').
  This function returns a relative file name which is equivalent to FILENAME
  when used with that default directory as the default.
! If FILENAME and DIRECTORY lie on different machines or on different drives
! \(DOS/Windows), it returns FILENAME in expanded form."
    (save-match-data
!     (setq directory
!         (file-name-as-directory (expand-file-name (or directory
!                                                       default-directory))))
!     (setq filename (expand-file-name filename))
!     (let ((hf (find-file-name-handler filename 'file-local-copy))
!           (hd (find-file-name-handler directory 'file-local-copy)))
!       (when (and hf (not (get hf 'file-remote-p))) (setq hf nil))
!       (when (and hd (not (get hd 'file-remote-p))) (setq hd nil))
!       (if (and
!          ;; Conditions for separate trees
!          (or
!             ;; Test for different drives on DOS/Windows
!             (and
!            (memq system-type '(ms-dos cygwin windows-nt))
!            (not (string-equal (substring filename  0 2)
!                               (substring directory 0 2))))
!             ;; Test for different remote file handlers
!             (not (eq hf hd))
!             ;; Test for different remote file system identification
!             (and
!            hf
!            (let ((re (car (rassq hf file-name-handler-alist))))
!              (not
!               (equal
!                (and
!                 (string-match re filename)
!                 (substring filename 0 (match-end 0)))
!                (and
!                 (string-match re directory)
!                 (substring directory 0 (match-end 0)))))))))
          filename
!         (unless (eq (aref filename 0) ?/)
!         (setq filename (concat "/" filename)))
!         (unless (eq (aref directory 0) ?/)
!         (setq directory (concat "/" directory)))
!         (let ((ancestor ".")
!             (filename-dir (file-name-as-directory filename)))
!           (while
!             (and
!              (not (string-match (concat "^" (regexp-quote directory))
!                                 filename-dir))
!              (not (string-match (concat "^" (regexp-quote directory))
!                                 filename)))
!             (setq directory (file-name-directory (substring directory 0 -1))
                  ancestor (if (equal ancestor ".")
                               ".."
                             (concat "../" ancestor))))
!           ;; Now ancestor is empty, or .., or ../.., etc.
!           (if (string-match (concat "^" (regexp-quote directory)) filename)
!             ;; We matched within FILENAME's directory part.
!             ;; Add the rest of FILENAME onto ANCESTOR.
!             (let ((rest (substring filename (match-end 0))))
!               (if (and (equal ancestor ".") (not (equal rest "")))
                    ;; But don't bother with ANCESTOR if it would give us `./'.
                    rest
                  (concat (file-name-as-directory ancestor) rest)))
!             ;; We matched FILENAME's directory equivalent.
!             ancestor))))))
  
  (defun save-buffer (&optional args)
    "Save current buffer in visited file if modified.  Versions described below.




reply via email to

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