# HG changeset patch # User Richard M. Stallman # Date 1152119608 0 # Node ID 4a2a2f40a43fcbf07cb2f08a6f03e21a912c929b # Parent 0fc55b1cc3c9bb2ec3bb1cc9023a6db70691572b (abbreviate-file-name): Add save-match-data. diff -r 0fc55b1cc3c9 -r 4a2a2f40a43f lisp/files.el --- a/lisp/files.el Wed Jul 05 17:09:30 2006 +0000 +++ b/lisp/files.el Wed Jul 05 17:13:28 2006 +0000 @@ -1275,48 +1275,49 @@ This also substitutes \"~\" for the user's home directory and removes automounter prefixes (see the variable `automount-dir-prefix')." ;; Get rid of the prefixes added by the automounter. - (if (and automount-dir-prefix - (string-match automount-dir-prefix filename) - (file-exists-p (file-name-directory - (substring filename (1- (match-end 0)))))) - (setq filename (substring filename (1- (match-end 0))))) - (let ((tail directory-abbrev-alist)) - ;; If any elt of directory-abbrev-alist matches this name, - ;; abbreviate accordingly. - (while tail - (if (string-match (car (car tail)) filename) + (save-match-data + (if (and automount-dir-prefix + (string-match automount-dir-prefix filename) + (file-exists-p (file-name-directory + (substring filename (1- (match-end 0)))))) + (setq filename (substring filename (1- (match-end 0))))) + (let ((tail directory-abbrev-alist)) + ;; If any elt of directory-abbrev-alist matches this name, + ;; abbreviate accordingly. + (while tail + (if (string-match (car (car tail)) filename) + (setq filename + (concat (cdr (car tail)) (substring filename (match-end 0))))) + (setq tail (cdr tail))) + ;; Compute and save the abbreviated homedir name. + ;; We defer computing this until the first time it's needed, to + ;; give time for directory-abbrev-alist to be set properly. + ;; We include a slash at the end, to avoid spurious matches + ;; such as `/usr/foobar' when the home dir is `/usr/foo'. + (or abbreviated-home-dir + (setq abbreviated-home-dir + (let ((abbreviated-home-dir "$foo")) + (concat "^" (abbreviate-file-name (expand-file-name "~")) + "\\(/\\|$\\)")))) + + ;; If FILENAME starts with the abbreviated homedir, + ;; make it start with `~' instead. + (if (and (string-match abbreviated-home-dir filename) + ;; If the home dir is just /, don't change it. + (not (and (= (match-end 0) 1) + (= (aref filename 0) ?/))) + ;; MS-DOS root directories can come with a drive letter; + ;; Novell Netware allows drive letters beyond `Z:'. + (not (and (or (eq system-type 'ms-dos) + (eq system-type 'cygwin) + (eq system-type 'windows-nt)) + (save-match-data + (string-match "^[a-zA-`]:/$" filename))))) (setq filename - (concat (cdr (car tail)) (substring filename (match-end 0))))) - (setq tail (cdr tail))) - ;; Compute and save the abbreviated homedir name. - ;; We defer computing this until the first time it's needed, to - ;; give time for directory-abbrev-alist to be set properly. - ;; We include a slash at the end, to avoid spurious matches - ;; such as `/usr/foobar' when the home dir is `/usr/foo'. - (or abbreviated-home-dir - (setq abbreviated-home-dir - (let ((abbreviated-home-dir "$foo")) - (concat "^" (abbreviate-file-name (expand-file-name "~")) - "\\(/\\|$\\)")))) - - ;; If FILENAME starts with the abbreviated homedir, - ;; make it start with `~' instead. - (if (and (string-match abbreviated-home-dir filename) - ;; If the home dir is just /, don't change it. - (not (and (= (match-end 0) 1) - (= (aref filename 0) ?/))) - ;; MS-DOS root directories can come with a drive letter; - ;; Novell Netware allows drive letters beyond `Z:'. - (not (and (or (eq system-type 'ms-dos) - (eq system-type 'cygwin) - (eq system-type 'windows-nt)) - (save-match-data - (string-match "^[a-zA-`]:/$" filename))))) - (setq filename - (concat "~" - (match-string 1 filename) - (substring filename (match-end 0))))) - filename)) + (concat "~" + (match-string 1 filename) + (substring filename (match-end 0))))) + filename))) (defcustom find-file-not-true-dirname-list nil "*List of logical names for which visiting shouldn't save the true dirname.