all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Bob Rogers <rogers@rgrjr.dyndns.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 7350@debbugs.gnu.org
Subject: bug#7350: 24.0.50; make vc-deduce-backend smarter
Date: Sun, 7 Nov 2010 16:41:08 -0500	[thread overview]
Message-ID: <19671.7412.608640.593137@rgr.rgrjr.com> (raw)
In-Reply-To: <jwvzktkucku.fsf-monnier+emacs@gnu.org>

   From: Stefan Monnier <monnier@iro.umontreal.ca>
   Date: Sun, 07 Nov 2010 15:03:16 -0500

   >    I notice that vc-root-diff only works if the current buffer is
   > visiting a version-controlled file, and in certain other buffer modes.
   > In particular, it works in dired-mode, where it uses the
   > default-directory, but not in shell-mode, which is not one of the
   > explicit special cases.

   Could you give an example use-case where you'd want vc-deduce-backend to
   be run in a shell-mode buffer?

	   Stefan

I have gotten into the habit of using a shell buffer to disambiguate
which repo I want to use for general VC commands like vc-root-diff and
vc-dir.  Since I bind "shell" to f8, it is often faster to type "f8 C-x
v d RET" than to supply an explicit pathname to vc-dir.  (I'm often in
the right shell buffer already, having just typed "make test".)  Since
vc-root-diff doesn't take a pathname arg, I have to do something
explicit to get into the right tree anyway.  So it makes sense to me
that vc-root-diff should work like vc-dir in a non-VC buffer.  There is
already an exception for dired-mode; why not generalize?

   In fact, this is something of a regression from Emacs 22.x, where
"C-u C-x v = . RET RET RET" would do the equivalent of

	(vc-version-diff (expand-file-name ".") nil nil)

which is nearly vc-root-diff, regardless of buffer mode.  This no longer
works in the brave new world of filesets, so I had to revise my
shorthand command to turn "." into a fileset.  I was hoping that
vc-root-diff (which I only stumbled over recently) would serve as a
replacement, but it doesn't quite match my workflow because of this
insistence on being in a VC buffer.

   As an aside, I often think that VC doesn't have a good enough notion
of "current file set;" there are other times when it doesn't seem to
DTRT.  (Except for the change in vc-diff mentioned in the previous
paragraph, I can't recall any examples off the top of my head).  But so
far I haven't had any ideas.

   In short, I don't have a killer use case -- I could just keep on
using my own command for this -- but on the other hand, I don't see the
need for limiting commands like vc-root-diff in this way.  If you think
that this is the wrong place to make this change, then the alternative
patch below makes the same change to vc-root-diff directly.  (And I'll
let you know if I find any better use cases. ;-)

					-- Bob

------------------------------------------------------------------------
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 665dafb..5c7fa81 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1682,7 +1682,9 @@ saving the buffer."
       ;; that's not what we want here, we want the diff for the VC root dir.
       (call-interactively 'vc-version-diff)
     (when buffer-file-name (vc-buffer-sync not-urgent))
-    (let ((backend (vc-deduce-backend))
+    (let ((backend (or (vc-deduce-backend)
+		       (and default-directory
+			    (vc-responsible-backend default-directory))))
 	  rootdir working-revision)
       (unless backend
 	(error "Buffer is not version controlled"))





  reply	other threads:[~2010-11-07 21:41 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-06 22:18 bug#7350: 24.0.50; make vc-deduce-backend smarter Bob Rogers
2010-11-07 20:03 ` Stefan Monnier
2010-11-07 21:41   ` Bob Rogers [this message]
2010-11-08 17:47     ` Stefan Monnier
2010-11-08 21:05       ` Bob Rogers
2010-11-12 13:48         ` Stefan Monnier
2010-11-14 23:21           ` Bob Rogers
2010-11-15 16:05             ` Stefan Monnier
2010-11-17  4:43               ` Bob Rogers
2010-11-17 13:31                 ` Stefan Monnier
2010-11-19  2:27                   ` Bob Rogers
2010-11-20 19:54           ` Bob Rogers

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=19671.7412.608640.593137@rgr.rgrjr.com \
    --to=rogers@rgrjr.dyndns.org \
    --cc=7350@debbugs.gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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.