182 |
|
|
183 |
;;; Main entry point. |
;;; Main entry point. |
184 |
|
|
185 |
(defun uniquify-rationalize-file-buffer-names (newbuffile newbuf) |
(defun uniquify-rationalize-file-buffer-names (base dirname newbuf) |
186 |
"Make file buffer names unique by adding segments from file name. |
"Make file buffer names unique by adding segments from file name. |
187 |
If `uniquify-min-dir-content' > 0, always pulls that many |
If `uniquify-min-dir-content' > 0, always pulls that many |
188 |
file name elements. |
file name elements. |
189 |
Arguments NEWBUFFILE and NEWBUF cause only a subset of buffers to be renamed." |
Arguments NEWBUFFILE and NEWBUF cause only a subset of buffers to be renamed." |
190 |
(interactive) |
(interactive) |
191 |
(if (null newbuffile) |
(if (null dirname) |
192 |
(with-current-buffer newbuf (setq uniquify-managed nil)) |
(with-current-buffer newbuf (setq uniquify-managed nil)) |
193 |
(setq newbuffile (expand-file-name (directory-file-name newbuffile))) |
(setq dirname (expand-file-name (directory-file-name dirname))) |
194 |
(let ((fix-list nil) |
(let ((fix-list (list (uniquify-make-item base dirname newbuf))) |
195 |
(base (file-name-nondirectory newbuffile))) |
items) |
196 |
(dolist (buffer (buffer-list)) |
(dolist (buffer (buffer-list)) |
197 |
(let ((bufname (buffer-name buffer)) |
(when (and (not (and uniquify-ignore-buffers-re |
198 |
bfn) |
(string-match uniquify-ignore-buffers-re |
199 |
(when (and (not (and uniquify-ignore-buffers-re |
(buffer-name buffer)))) |
200 |
(string-match uniquify-ignore-buffers-re |
;; Only try to rename buffers we actually manage. |
201 |
bufname))) |
(setq items (buffer-local-value 'uniquify-managed buffer)) |
202 |
;; Only try to rename buffers we actually manage. |
(equal base (uniquify-item-base (car items))) |
203 |
(or (buffer-local-value 'uniquify-managed buffer) |
;; Don't re-add stuff we already have. Actually this |
204 |
(eq buffer newbuf)) |
;; whole `and' test should only match at most once. |
205 |
(setq bfn (if (eq buffer newbuf) newbuffile |
(not (memq (car items) fix-list))) |
206 |
(uniquify-buffer-file-name buffer))) |
(setq fix-list (append fix-list items)))) |
|
(equal (file-name-nondirectory bfn) base)) |
|
|
(when (setq bfn (file-name-directory bfn)) ;Strip off the `base'. |
|
|
(setq bfn (directory-file-name bfn))) ;Strip trailing slash. |
|
|
(push (uniquify-make-item base bfn buffer) |
|
|
fix-list)))) |
|
207 |
;; selects buffers whose names may need changing, and others that |
;; selects buffers whose names may need changing, and others that |
208 |
;; may conflict, then bring conflicting names together |
;; may conflict, then bring conflicting names together |
209 |
(uniquify-rationalize fix-list)))) |
(uniquify-rationalize fix-list)))) |
210 |
|
|
211 |
;; uniquify's version of buffer-file-name; result never contains trailing slash |
;; uniquify's version of buffer-file-name; result never contains trailing slash |
212 |
(defun uniquify-buffer-file-name (buffer) |
(defun uniquify-buffer-file-name (buffer) |
213 |
"Return name of file BUFFER is visiting, or nil if none. |
"Return name of directory, file BUFFER is visiting, or nil if none. |
214 |
Works on ordinary file-visiting buffers and buffers whose mode is mentioned |
Works on ordinary file-visiting buffers and buffers whose mode is mentioned |
215 |
in `uniquify-list-buffers-directory-modes', otherwise returns nil." |
in `uniquify-list-buffers-directory-modes', otherwise returns nil." |
216 |
(or (buffer-file-name buffer) |
(with-current-buffer buffer |
217 |
(with-current-buffer buffer |
(let ((filename |
218 |
(if (memq major-mode uniquify-list-buffers-directory-modes) |
(or buffer-file-name |
219 |
(and list-buffers-directory |
(if (memq major-mode uniquify-list-buffers-directory-modes) |
220 |
(directory-file-name list-buffers-directory)))))) |
list-buffers-directory)))) |
221 |
|
(when filename |
222 |
|
(file-name-directory (expand-file-name (directory-file-name filename))))))) |
223 |
|
|
224 |
(defun uniquify-rerationalize-w/o-cb (fix-list) |
(defun uniquify-rerationalize-w/o-cb (fix-list) |
225 |
"Re-rationalize the buffers in FIX-LIST, but ignoring current-buffer." |
"Re-rationalize the buffers in FIX-LIST, but ignoring current-buffer." |
227 |
(dolist (item fix-list) |
(dolist (item fix-list) |
228 |
(let ((buf (uniquify-item-buffer item))) |
(let ((buf (uniquify-item-buffer item))) |
229 |
(unless (or (eq buf (current-buffer)) (not (buffer-live-p buf))) |
(unless (or (eq buf (current-buffer)) (not (buffer-live-p buf))) |
|
;; Reset the proposed names. |
|
|
(setf (uniquify-item-proposed item) |
|
|
(uniquify-get-proposed-name (uniquify-item-base item) |
|
|
(uniquify-item-dirname item))) |
|
230 |
(push item new-fix-list)))) |
(push item new-fix-list)))) |
231 |
(when new-fix-list |
(when new-fix-list |
232 |
(uniquify-rationalize new-fix-list)))) |
(uniquify-rationalize new-fix-list)))) |
402 |
(when uniquify-buffer-name-style |
(when uniquify-buffer-name-style |
403 |
;; Rerationalize w.r.t the new name. |
;; Rerationalize w.r.t the new name. |
404 |
(uniquify-rationalize-file-buffer-names |
(uniquify-rationalize-file-buffer-names |
405 |
(uniquify-buffer-file-name (current-buffer)) (current-buffer)) |
(ad-get-arg 0) |
406 |
|
(uniquify-buffer-file-name (current-buffer)) |
407 |
|
(current-buffer)) |
408 |
(setq ad-return-value (buffer-name (current-buffer)))))) |
(setq ad-return-value (buffer-name (current-buffer)))))) |
409 |
|
|
410 |
(defadvice create-file-buffer (after create-file-buffer-uniquify activate) |
(defadvice create-file-buffer (after create-file-buffer-uniquify activate) |
411 |
"Uniquify buffer names with parts of directory name." |
"Uniquify buffer names with parts of directory name." |
412 |
(if uniquify-buffer-name-style |
(if uniquify-buffer-name-style |
413 |
(uniquify-rationalize-file-buffer-names (ad-get-arg 0) ad-return-value))) |
(let ((filename (expand-file-name (directory-file-name (ad-get-arg 0))))) |
414 |
|
(uniquify-rationalize-file-buffer-names |
415 |
|
(file-name-nondirectory filename) |
416 |
|
(file-name-directory filename) ad-return-value)))) |
417 |
|
|
418 |
;; Buffer deletion |
;; Buffer deletion |
419 |
;; Rerationalize after a buffer is killed, to reduce coinciding buffer names. |
;; Rerationalize after a buffer is killed, to reduce coinciding buffer names. |