/[emacs]/emacs/lisp/uniquify.el
ViewVC logotype

Diff of /emacs/lisp/uniquify.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.48 by monnier, Thu May 8 19:39:32 2003 UTC revision 1.49 by monnier, Fri May 9 13:19:15 2003 UTC
# Line 182  It actually holds the list of `uniquify- Line 182  It actually holds the list of `uniquify-
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."
# Line 230  in `uniquify-list-buffers-directory-mode Line 227  in `uniquify-list-buffers-directory-mode
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))))
# Line 409  in `uniquify-list-buffers-directory-mode Line 402  in `uniquify-list-buffers-directory-mode
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.

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.49

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26