# HG changeset patch # User Stefan Monnier # Date 1052590579 0 # Node ID 46d187316243b04c1cf569880ba75f1aba706f18 # Parent 5490960951c17e7da1dff6faea1a18e89c9dc9b8 (uniquify-rationalize-file-buffer-names): Refresh the dirname in the case that rename-buffer was skipped. (uniquify-buffer-file-name): Return a dirname with no trailing slash. diff -r 5490960951c1 -r 46d187316243 lisp/uniquify.el --- a/lisp/uniquify.el Sat May 10 16:36:02 2003 +0000 +++ b/lisp/uniquify.el Sat May 10 18:16:19 2003 +0000 @@ -1,6 +1,6 @@ ;;; uniquify.el --- unique buffer names dependent on file name -;; Copyright (c) 1989, 1995, 1996, 1997, 2001 Free Software Foundation, Inc. +;; Copyright (c) 1989,95,96,97,2001,2003 Free Software Foundation, Inc. ;; Author: Dick King ;; Maintainer: FSF @@ -186,7 +186,8 @@ "Make file buffer names unique by adding segments from file name. If `uniquify-min-dir-content' > 0, always pulls that many file name elements. -Arguments NEWBUFFILE and NEWBUF cause only a subset of buffers to be renamed." +Arguments BASE, DIRNAME, and NEWBUF specify the new buffer that causes +this rationaliztion." (interactive) (if (null dirname) (with-current-buffer newbuf (setq uniquify-managed nil)) @@ -203,6 +204,20 @@ ;; Don't re-add stuff we already have. Actually this ;; whole `and' test should only match at most once. (not (memq (car items) fix-list))) + (unless (cdr items) + ;; If there was no conflict, the buffer-name is equal to the + ;; base-name and we may have missed a rename-buffer because + ;; of code like in set-visited-file-name: + ;; (or (string= new-name (buffer-name)) (rename-buffer new-name t)) + ;; So we need to refresh the dirname of the uniquify-item. + (setf (uniquify-item-dirname (car items)) + (uniquify-buffer-file-name + (uniquify-item-buffer (car items)))) + ;; This shouldn't happen, but maybe there' no dirname any more. + (unless (uniquify-item-dirname (car items)) + (setq items nil) + (with-current-buffer (uniquify-item-buffer (car items)) + (setq uniquify-managed nil)))) (setq fix-list (append fix-list items)))) ;; selects buffers whose names may need changing, and others that ;; may conflict, then bring conflicting names together @@ -219,7 +234,10 @@ (if (memq major-mode uniquify-list-buffers-directory-modes) list-buffers-directory)))) (when filename - (file-name-directory (expand-file-name (directory-file-name filename))))))) + (directory-file-name + (file-name-directory + (expand-file-name + (directory-file-name filename)))))))) (defun uniquify-rerationalize-w/o-cb (fix-list) "Re-rationalize the buffers in FIX-LIST, but ignoring current-buffer." @@ -236,7 +254,7 @@ ;; if there is a conflict. (dolist (item fix-list) (with-current-buffer (uniquify-item-buffer item) - ;; Reset the proposed names. + ;; Refresh the dirnames and proposed names. (setf (uniquify-item-proposed item) (uniquify-get-proposed-name (uniquify-item-base item) (uniquify-item-dirname item)))