Add vc-edit-next-command
* lisp/vc/vc.el (vc-read-revision): Override vc-filter-command-function back to its default value. (vc-print-branch-log): Remove recently-added prefix argument. (vc-edit-next-command): New command. * lisp/vc/vc-hooks.el (vc-prefix-map): Bind it to 'C-x v !'. * etc/NEWS: * doc/emacs/vc1-xtra.texi (Editing Shell Commands): Document it.
This commit is contained in:
parent
16015288e1
commit
fdea378015
4 changed files with 63 additions and 18 deletions
|
@ -15,6 +15,7 @@
|
|||
* VC Delete/Rename:: Deleting and renaming version-controlled files.
|
||||
* Revision Tags:: Symbolic names for revisions.
|
||||
* Version Headers:: Inserting version control headers into working files.
|
||||
* Editing VC Commands:: Editing the VC shell commands that Emacs will run.
|
||||
@end menu
|
||||
|
||||
@node Change Logs and VC
|
||||
|
@ -263,6 +264,23 @@ elements of the form @code{(@var{regexp} . @var{format})}. Whenever
|
|||
part of the version header. A @samp{%s} in @var{format} is replaced
|
||||
with the file's version control type.
|
||||
|
||||
@node Editing VC Commands
|
||||
@subsubsection Editing VC Commands
|
||||
|
||||
@findex vc-edit-next-command
|
||||
@kindex C-x v !
|
||||
You can use the @kbd{C-x v !} (@code{vc-edit-next-command}) prefix
|
||||
command to request an opportunity to edit the VC shell commands that
|
||||
Emacs will run. This is primarily intended to make it possible to
|
||||
access version control system-specific functionality without
|
||||
complexifying either the VC command set or the backend API.
|
||||
|
||||
For example, Git can produce logs of more than one branch, but
|
||||
@kbd{C-x v b l} (@code{vc-print-branch-log}) prompts for the name of
|
||||
just one branch. To obtain a log of more than one branch, you can
|
||||
type @kbd{C-x v ! C-x v b l} and then append the names of additional
|
||||
branches to the end of the 'git log' command that VC prepares.
|
||||
|
||||
@node Customizing VC
|
||||
@subsection Customizing VC
|
||||
|
||||
|
|
7
etc/NEWS
7
etc/NEWS
|
@ -1754,6 +1754,13 @@ commands.
|
|||
This command marks files based on a regexp. If given a prefix
|
||||
argument, unmark instead.
|
||||
|
||||
+++
|
||||
*** New command 'C-x v !' ('vc-edit-next-command')
|
||||
This prefix command requests editing of the next VC shell command
|
||||
before execution. For example, in a Git repository, you can produce a
|
||||
log of more than one branch by typing 'C-x v ! C-x v b l' and then
|
||||
appending additional branch names to the 'git log' command.
|
||||
|
||||
---
|
||||
*** 'C-x v v' in a diffs buffer allows to commit only some of the changes.
|
||||
This command is intended to allow you to commit only some of the
|
||||
|
|
|
@ -882,7 +882,8 @@ In the latter case, VC mode is deactivated for this buffer."
|
|||
"=" #'vc-diff
|
||||
"D" #'vc-root-diff
|
||||
"~" #'vc-revision-other-window
|
||||
"x" #'vc-delete-file)
|
||||
"x" #'vc-delete-file
|
||||
"!" #'vc-edit-next-command)
|
||||
(fset 'vc-prefix-map vc-prefix-map)
|
||||
(define-key ctl-x-map "v" 'vc-prefix-map)
|
||||
|
||||
|
|
|
@ -1917,8 +1917,11 @@ Return t if the buffer had changes, nil otherwise."
|
|||
(setq files (cadr vc-fileset))
|
||||
(setq backend (car vc-fileset))))
|
||||
((null backend) (setq backend (vc-backend (car files)))))
|
||||
(let ((completion-table
|
||||
(vc-call-backend backend 'revision-completion-table files)))
|
||||
;; Override any `vc-filter-command-function' value, as user probably
|
||||
;; doesn't want to edit the command to get the completions.
|
||||
(let* ((vc-filter-command-function #'list)
|
||||
(completion-table
|
||||
(vc-call-backend backend 'revision-completion-table files)))
|
||||
(if completion-table
|
||||
(completing-read prompt completion-table
|
||||
nil nil initial-input 'vc-revision-history default)
|
||||
|
@ -2744,28 +2747,17 @@ with its diffs (if the underlying VCS supports that)."
|
|||
(setq vc-parent-buffer-name nil)))
|
||||
|
||||
;;;###autoload
|
||||
(defun vc-print-branch-log (branch &optional arg)
|
||||
"Show the change log for BRANCH root in a window.
|
||||
Optional prefix ARG non-nil requests an opportunity for the user
|
||||
to edit the VC shell command that will be run to generate the
|
||||
log."
|
||||
;; The original motivation for ARG was to make it possible to
|
||||
;; produce a log of more than one Git branch without modifying the
|
||||
;; print-log VC API. The user can append the other branches to the
|
||||
;; command line arguments to 'git log'. See bug#57807.
|
||||
(defun vc-print-branch-log (branch)
|
||||
"Show the change log for BRANCH root in a window."
|
||||
(interactive
|
||||
(let* ((backend (vc-responsible-backend default-directory))
|
||||
(rootdir (vc-call-backend backend 'root default-directory)))
|
||||
(list
|
||||
(vc-read-revision "Branch to log: " (list rootdir) backend)
|
||||
current-prefix-arg)))
|
||||
(vc-read-revision "Branch to log: " (list rootdir) backend))))
|
||||
(when (equal branch "")
|
||||
(error "No branch specified"))
|
||||
(let* ((backend (vc-responsible-backend default-directory))
|
||||
(rootdir (vc-call-backend backend 'root default-directory))
|
||||
(vc-filter-command-function (if arg
|
||||
#'vc-user-edit-command
|
||||
vc-filter-command-function)))
|
||||
(rootdir (vc-call-backend backend 'root default-directory)))
|
||||
(vc-print-log-internal backend
|
||||
(list rootdir) branch t
|
||||
(when (> vc-log-show-limit 0) vc-log-show-limit))))
|
||||
|
@ -3243,6 +3235,33 @@ log entries should be gathered."
|
|||
(vc-call-backend (vc-responsible-backend default-directory)
|
||||
'update-changelog args))
|
||||
|
||||
(defvar vc-filter-command-function)
|
||||
|
||||
;;;###autoload
|
||||
(defun vc-edit-next-command ()
|
||||
"Request editing the next VC shell command before execution.
|
||||
This is a prefix command. It affects only a VC command executed
|
||||
immediately after this one."
|
||||
(interactive)
|
||||
(letrec ((minibuffer-depth (minibuffer-depth))
|
||||
(command this-command)
|
||||
(keys (key-description (this-command-keys)))
|
||||
(old vc-filter-command-function)
|
||||
(echofun (lambda () keys))
|
||||
(postfun
|
||||
(lambda ()
|
||||
(unless (or (eq this-command command)
|
||||
(> (minibuffer-depth) minibuffer-depth))
|
||||
(remove-hook 'post-command-hook postfun)
|
||||
(remove-hook 'prefix-command-echo-keystrokes-functions
|
||||
echofun)
|
||||
(setq vc-filter-command-function old)))))
|
||||
(add-hook 'post-command-hook postfun)
|
||||
(add-hook 'prefix-command-echo-keystrokes-functions echofun)
|
||||
(setq vc-filter-command-function
|
||||
(lambda (&rest args)
|
||||
(apply #'vc-user-edit-command (apply old args))))))
|
||||
|
||||
(defun vc-default-responsible-p (_backend _file)
|
||||
"Indicate whether BACKEND is responsible for FILE.
|
||||
The default is to return nil always."
|
||||
|
|
Loading…
Add table
Reference in a new issue