From: Phil Hagelberg <phil@hagelb.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: vc-register complains if a file is already registered in a git repository
Date: Tue, 28 Oct 2008 11:19:04 -0700 [thread overview]
Message-ID: <87ej207fc7.fsf@hagelb.org> (raw)
In-Reply-To: <87od147hzj.fsf@hagelb.org> (Phil Hagelberg's message of "Tue, 28 Oct 2008 10:21:52 -0700")
Phil Hagelberg <phil@hagelb.org> writes:
> I've added the vc-git-register-changes command to vc-git-extra-menu-map
> and will start work on creating extra-keys functionality that works like
> extra-menu.
OK, here's the cumulative patch for both features.
I am not sure I completely understand the use of fset for
vc-prefix-map. I tried converting it to a regular function definition,
but that did not work; it made the prefix command essentially a
no-op. So someone who's familiar with prefix keymaps should review this
patch before it's applied.
-Phil
diff --git a/lisp/vc-git.el b/lisp/vc-git.el
index 51ccc5d..d3ac624 100644
--- a/lisp/vc-git.el
+++ b/lisp/vc-git.el
@@ -622,6 +622,9 @@ or BRANCH^ (where \"^\" can be repeated)."
(define-key map [git-grep]
'(menu-item "Git grep..." vc-git-grep
:help "Run the `git grep' command"))
+ (define-key map [git-register-changes]
+ '(menu-item "Register changes" vc-git-register-changes
+ :help "Register the changes in the current buffer"))
map))
(defun vc-git-extra-menu () vc-git-extra-menu-map)
@@ -681,6 +684,18 @@ This command shares argument histories with \\[rgrep] and \\[grep]."
(compilation-start command 'grep-mode))
(if (eq next-error-last-buffer (current-buffer))
(setq default-directory dir))))))
+
+(defun vc-git-register-changes ()
+ "Register the changes in the current file to the staging area."
+ (interactive)
+ (vc-git-register buffer-file-name)
+ (message "Registered changes to %s... " buffer-file-name))
+
+(defun vc-git-append-extra-keys (original-map)
+ (let ((extra-keys-map (copy-keymap original-map)))
+ (define-key extra-keys-map "e" 'vc-git-register-changes)
+ extra-keys-map))
+
\f
;;; Internal commands
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 97dca35..53e0e31 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -970,7 +970,15 @@ Used in `find-file-not-found-functions'."
(define-key map "=" 'vc-diff)
(define-key map "~" 'vc-revision-other-window)
map))
-(fset 'vc-prefix-map vc-prefix-map)
+
+(fset 'vc-prefix-map
+ (when vc-mode
+ (vc-call-backend
+ (if buffer-file-name
+ (vc-backend buffer-file-name)
+ (vc-responsible-backend default-directory))
+ 'append-extra-keys vc-prefix-map)))
+
(define-key global-map "\C-xv" 'vc-prefix-map)
(defvar vc-menu-map
next prev parent reply other threads:[~2008-10-28 18:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-20 20:29 vc-register complains if a file is already registered in a git repository Phil Hagelberg
2008-10-21 21:43 ` Stefan Monnier
2008-10-21 22:23 ` Phil Hagelberg
2008-10-22 1:37 ` Stefan Monnier
2008-10-28 17:21 ` Phil Hagelberg
2008-10-28 18:19 ` Phil Hagelberg [this message]
2008-10-28 22:24 ` Phil Hagelberg
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=87ej207fc7.fsf@hagelb.org \
--to=phil@hagelb.org \
--cc=emacs-devel@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.