all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Spencer Baugh <sbaugh@janestreet.com>
To: 62621@debbugs.gnu.org
Subject: bug#62621: 29.0.60; uniquify can't make buffers unique based on things other than filename
Date: Fri, 14 Apr 2023 12:08:37 -0400	[thread overview]
Message-ID: <ierttxicupm.fsf@janestreet.com> (raw)
In-Reply-To: <ierfs9i2nj3.fsf@janestreet.com> (Spencer Baugh's message of "Sun, 02 Apr 2023 13:37:36 -0400")


FWIW, here is the (unpolished) patch I'm currently using.

This is correct but it's not what I think the final form of this should
look like.

For better or for worse, I have now Deeply Understood uniquify, and I
have various ideas for things to do to fix bugs in it and simplify it
and add new features... see bug#62732 for my first step.  (Which adds
tests, even!)

After some of those, then I can do this bug.

One sneak peak of a feature which I think I can manage to add with some
improvements to uniquify.el: a user customization which causes a new
behavior in read-buffer, so that when it's running on a subset of
buffers (by passing PREDICATE), it reads buffer names which are only
uniquified among that subset.  (So the buffer names will be shorter when
that doesn't cause ambiguity).  This would be really cool for
project-switch-to-buffer, so that if you have two projects working on
the same source repo with the same files open, you don't have to see the
extra uniquify cruft at the start of the buffer name when you just want
to look at buffers in a single project.

diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index dee9ecba2ea..53b39920820 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -210,8 +210,8 @@ uniquify-rationalize-file-buffer-names
   (with-current-buffer newbuf (setq uniquify-managed nil))
   (when dirname
     (setq dirname (expand-file-name (directory-file-name dirname)))
-    (let ((fix-list (list (uniquify-make-item base dirname newbuf
-                                              nil dirname)))
+    (let ((fix-list (list (let ((dirname (uniquify-buffer-file-name newbuf dirname)))
+                            (uniquify-make-item base dirname newbuf nil dirname))))
 	  items)
       (dolist (buffer (buffer-list))
 	(when (and (not (and uniquify-ignore-buffers-re
@@ -258,20 +258,26 @@ uniquify-rationalize-file-buffer-names
       (uniquify-rationalize fix-list))))
 
 ;; uniquify's version of buffer-file-name; result never contains trailing slash
-(defun uniquify-buffer-file-name (buffer)
+(require 'project)
+(defun uniquify-buffer-file-name (buffer &optional dirname)
   "Return name of directory, file BUFFER is visiting, or nil if none.
 Works on ordinary file-visiting buffers and buffers whose mode is mentioned
 in `uniquify-list-buffers-directory-modes', otherwise returns nil."
   (with-current-buffer buffer
-    (let ((filename
-	   (or buffer-file-name
-	       (if (memq major-mode uniquify-list-buffers-directory-modes)
-		   list-buffers-directory))))
-      (when filename
-	(directory-file-name
-	 (file-name-directory
-	  (expand-file-name
-	   (directory-file-name filename))))))))
+    (let* ((filename
+	    (or buffer-file-name
+	        (if (memq major-mode uniquify-list-buffers-directory-modes)
+		    list-buffers-directory)))
+           (dir (or dirname
+                    (directory-file-name
+	             (file-name-directory
+	              (expand-file-name
+	               (directory-file-name filename)))))))
+      (if-let (pr (project-current nil dir))
+          (let* ((pr-dir (project-root pr))
+                 (pr-rel (file-relative-name dir pr-dir)))
+            (file-name-concat pr-dir (project-name pr) pr-rel))
+        dir))))
 
 (defun uniquify-rerationalize-w/o-cb (fix-list)
   "Re-rationalize the buffers in FIX-LIST, but ignoring `current-buffer'."





  parent reply	other threads:[~2023-04-14 16:08 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-02 17:37 bug#62621: 29.0.60; uniquify can't make buffers unique based on things other than filename Spencer Baugh
2023-04-02 17:57 ` Eli Zaretskii
2023-04-02 21:59   ` Drew Adams
2023-04-02 18:25 ` Juri Linkov
2023-04-14 16:08 ` Spencer Baugh [this message]
2023-07-13 22:51 ` sbaugh
2023-07-14  6:29   ` Eli Zaretskii
2023-07-14 11:28     ` sbaugh
2023-07-14 12:01       ` Eli Zaretskii
2023-07-14 12:20         ` Spencer Baugh
2023-07-14 12:29           ` Eli Zaretskii
2023-07-14 12:46             ` Spencer Baugh
2023-07-14 13:51               ` Eli Zaretskii
2023-07-14 14:14                 ` Spencer Baugh
2023-07-14 19:10                   ` Eli Zaretskii
2023-07-14 19:15                     ` sbaugh
2023-07-15  5:42                       ` Eli Zaretskii
2023-07-15  6:20                         ` Eli Zaretskii
2023-07-18  0:19                       ` Dmitry Gutov
2023-07-18  1:37               ` Dmitry Gutov
2023-07-18 16:03                 ` Spencer Baugh
2023-07-19  2:47                   ` Dmitry Gutov
2023-07-19  6:56                     ` Juri Linkov
2023-07-18 17:51                 ` Juri Linkov
2023-07-19  2:24                   ` Dmitry Gutov
2023-07-14 16:31           ` Juri Linkov
2023-07-18  0:34     ` Dmitry Gutov
2023-07-18 11:07       ` Eli Zaretskii
2023-07-19  2:22         ` Dmitry Gutov
2023-07-19 12:14           ` Eli Zaretskii
2023-07-19 12:31             ` Spencer Baugh
2023-07-19 13:25               ` Eli Zaretskii
2023-07-21 13:34                 ` Spencer Baugh
2023-07-21 14:37                   ` Eli Zaretskii
2023-07-22 18:00                     ` Spencer Baugh
2023-07-24 19:18                       ` Spencer Baugh
2023-07-26 15:18                         ` Eli Zaretskii
2023-08-03  8:00                           ` Eli Zaretskii
2023-08-03 11:54                             ` Spencer Baugh
2023-08-03 14:05                               ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ierttxicupm.fsf@janestreet.com \
    --to=sbaugh@janestreet.com \
    --cc=62621@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.