1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-30 17:10:51 -08:00
Commit graph

1844 commits

Author SHA1 Message Date
Sean Whitton
b9886bb206 New log-edit-maybe-show-diff option for log-edit-hook
* lisp/vc/log-edit.el (log-edit-maybe-show-diff): New function.
(log-edit-hook): Add it as an option.
(log-edit-diff-function):
* etc/NEWS: Document it.
2025-04-29 09:40:51 +08:00
Sean Whitton
d44c87ceb6 log-edit-diff-function leaves the diff-mode buffer's window selected
This reverts the following two changesets:

    Author:     Sean Whitton <spwhitton@spwhitton.name>
    AuthorDate: Tue Oct 29 09:40:02 2024 +0800

      Fix window selection after log-edit-show-diff

    Author:     Sean Whitton <spwhitton@spwhitton.name>
    AuthorDate: Tue Apr 8 20:36:42 2025 +0800

      Fix window selection after log-edit-show-diff, again

This also replaces the following changeset:

    Author:     Sean Whitton <spwhitton@spwhitton.name>
    AuthorDate: Tue Oct 29 12:52:20 2024 +0800

      * lisp/vc/log-edit.el (log-edit-diff-function): Document.

* lisp/vc/log-edit.el (log-edit-diff-function): Document that
the function *should* leave the window selected when it returns.
(log-edit-diff-fileset):
* lisp/vc/vc.el (vc-modify-change-comment):
Don't use save-selected-window (bug#77946).
(vc-diff-patch-string):
Call pop-to-buffer, not display-buffer (bug#77946).
2025-04-29 09:20:44 +08:00
Sean Whitton
925ac2ef70 Mark vc-dav.el as obsolete (bug#77626)
* lisp/vc/vc-dav.el: Move from here ...
* lisp/obsolete/vc-dav.el: ... to here (bug#77626).
Add Obsolete-since header.
* etc/NEWS: Announce the obsoletion.
2025-04-27 12:30:41 +08:00
Sean Whitton
07c2b169ed Improve syncing VC buffers before generating diffs
* lisp/vc/vc.el (vc-maybe-buffer-sync): Delete.  Correct
handling of indirect buffers is now implicitly achieved by
vc-buffer-sync-fileset.
(vc-buffer-sync-fileset): Make NOT-ESSENTIAL argument optional,
new MISSING-IN-DIRS optional argument.  Rewrite to handle
directories named in the fileset, not only files.
(vc-ediff): Replace call to vc-maybe-buffer-sync with a call to
vc-buffer-sync-fileset.
(vc-root-diff): Similarly replace call to vc-maybe-buffer-sync.
This means the user is prompted to save additional buffers, that
they likely want to save before generating the diffs.
* test/lisp/vc/vc-misc-tests.el: New file.
2025-04-27 11:52:53 +08:00
Sean Whitton
d047a89e76 vc-diff: Delete redundant call to vc-maybe-buffer-sync
This call is redundant with the subsequent call to
vc-buffer-sync-fileset.  I believe this call to
vc-maybe-buffer-sync was reintroduced by accident -- the
changeset adding the call to vc-buffer-sync-fileset deleted a
call to vc-sync-fileset in the same place.

* lisp/vc/vc.el (vc-diff): Delete redundant call to
vc-maybe-buffer-sync.
* lisp/files.el (find-buffer-visiting): Note in docstring that
this function only ever returns base buffers.
2025-04-27 11:52:53 +08:00
Sean Whitton
6b204c2d16 Rename vc-buffer-sync's argument to NOT-ESSENTIAL
* lisp/vc/vc-dispatcher.el (vc-buffer-sync):
* lisp/vc/vc.el (vc-maybe-buffer-sync, vc-diff)
(vc-buffer-sync-fileset, vc-ediff, vc-root-diff):
Rename argument from NOT-URGENT to NOT-ESSENTIAL.
2025-04-27 11:52:53 +08:00
Sean Whitton
19b6c94566 log-edit-insert-message-template: Reorder headers
* lisp/vc/log-edit.el (log-edit-insert-message-template): Put
Author before Summary when both are to be inserted.
2025-04-26 20:28:23 +08:00
Michael Albinus
8c04396b19 Fix emerge.el for remote files
* lisp/vc/emerge.el (emerge-make-diff-list)
(emerge-make-diff3-list): Set proper `default-directory' in order
to support remote files.  (Bug#6850, Bug#74352)

* test/lisp/vc/emerge-tests.el: New file.
2025-04-20 18:16:14 +02:00
Gerd Möllmann
6fb2a4691f ; Pacify free variable warning in vc-git.el
* lisp/vc/vc-git.el (log-edit-font-lock-keywords): Defvar.
2025-04-20 15:06:13 +02:00
Sean Whitton
45232485ae vc-user-edit-command: Add trailing space to initial input
* lisp/vc/vc-dispatcher.el (vc-user-edit-command): Add trailing
space to initial input to ease adding additional flags.
2025-04-20 09:40:36 +08:00
Sean Whitton
9f6eb6cebb ; Fix replacements of old vc-annotate-parent-file
* lisp/vc/vc-annotate.el (vc-annotate-working-revision)
(vc-annotate-extract-revision-at-line)
(vc-annotate-revision-at-line, vc-annotate-warp-revision)
(vc-annotate-goto-line): Fix extracting the file name from
vc-buffer-overriding-fileset.
2025-04-13 14:39:12 +08:00
Sean Whitton
3b841700a8 vc-do-async-command: Ellipse later lines in multiline arguments
* lisp/emacs-lisp/cl-print.el (cl-print-expand-ellipsis): Bind
inhibit-read-only to t.
* lisp/vc/vc-dispatcher.el (require): Require cl-print at
compile time.
(vc-do-async-command): When printing command arguments that
contain multiple lines, use cl-prin1 with cl-print-string-length
bound in order to ellipse lines other than the first.
Switch the outer quotation marks to single quotation marks.
2025-04-12 10:05:57 +08:00
Sean Whitton
95675b4db0 ; Delete FIXME in vc-print-log
This isn't a state-changing operation, indeed, and passing t
here is relevant to dired-vc-deduce-fileset.
2025-04-11 11:47:32 +08:00
Sean Whitton
60530889c3 New buffer-local vc-buffer-overriding-fileset and vc-buffer-revision
* lisp/vc/vc.el (vc-buffer-overriding-fileset)
(vc-buffer-revision): New variables (bug#77529).
(vc-find-revision-save, vc-find-revision-no-save): Set them.
(vc-deduce-fileset): Respect vc-buffer-overriding-fileset.
(vc-print-log): Use vc-buffer-revision as a default working
revision.

* lisp/vc/vc-annotate.el (vc-annotate-parent-file)
(vc-annotate-parent-rev): Delete.
(vc-annotate): Respect vc-buffer-overriding-fileset and
vc-buffer-revision.  This makes 'C-x v g' work from buffers
generated by 'C-x v ~' (bug#5424).
Set the two variables in the newly prepared buffer.
(vc-annotate-working-revision)
(vc-annotate-extract-revision-at-line)
(vc-annotate-revision-at-line, vc-annotate-warp-revision)
(vc-annotate-goto-line):
* lisp/vc/vc-svn.el (vc-svn-annotate-current-time): Use
vc-buffer-overriding-fileset instead of vc-annotate-parent-file,
vc-buffer-revision instead of vc-annotate-parent-rev.
(vc-annotate-parent-rev): Delete declaration.

* etc/NEWS: Announce the new variables.
2025-04-11 11:46:05 +08:00
Sean Whitton
253364e2c7 VC-Dir: Offer to register files before checking in
* lisp/vc/vc.el (vc-only-files-state-and-model): Rewrite
checking that all files are in compatible VC states.  In
particular, consistently return 'edited' when all files are
either added, removed or edited, instead of allowing the return
value to depend on the order of the files in VC-Dir, and offer
to registered unregistered files if doing so would allow the
operation to proceed.
(vc-compatible-state): Delete.
(vc-next-action): Replace call to vc-compatible-state.
Document, in this command's docstring, the new feature
implemented in vc-only-files-state-and-model.
* etc/NEWS: Announce the new feature.
2025-04-09 12:37:32 +08:00
Sean Whitton
2310c12658 ; vc-setup-buffer: Don't pass a string to buffer-live-p. 2025-04-09 11:04:26 +08:00
Sean Whitton
d283db5773 Fix window selection after log-edit-show-diff, again
In October I installed a change to vc-diff-patch-string and
labelled it as "Fix window selection after log-edit-show-diff"
but that change only fixed the problem within
log-view-modify-change-comment.  This change should fix window
selection after C-c C-d in ordinary checkins.

* lisp/vc/log-edit.el (log-edit-diff-fileset): Use
save-selected-window in order to respect the documented
requirement that values of log-edit-diff-function leave the Log
Edit buffer's window selected when they return.
2025-04-08 20:36:42 +08:00
Sean Whitton
577ddbb9b7 ; Fix last change: ensure-list does not ensure a proper list 2025-04-08 15:12:17 +08:00
Sean Whitton
b784f194f8 Factor out vc-only-files-state-and-model
* lisp/dired-aux.el (vc-compatible-state): Delete declaration.
(vc-only-files-state-and-model): Declare.
(dired-vc-deduce-fileset): Factor out vc-only-files-state-and-model.
* lisp/vc/vc-dir.el (require): Require cl-lib at load time, too.
(vc-only-files-state-and-model): Declare.
(vc-dir-deduce-fileset): Factor out vc-only-files-state-and-model.
* lisp/vc/vc.el (vc-only-files-state-and-model): New function,
factored out of dired-vc-deduce-fileset and vc-dir-deduce-fileset.
2025-04-08 14:09:07 +08:00
Sean Whitton
e9e11f7281 Add bindings for vc-git-stash-delete-at-point, vc-git-stash-delete
* lisp/vc/vc-git.el (vc-git-stash-map): Bind "D" to
vc-git-stash-delete-at-point.
(vc-dir-git-mode-map): Bind "z d" to vc-git-stash-delete.
* etc/NEWS: Announce the new bindings.
2025-04-07 11:28:35 +08:00
Sean Whitton
1e100f482c ; * lisp/vc/ediff-wind.el (ediff-with-live-window): Use cl-once-only 2025-04-07 10:19:58 +08:00
Sean Whitton
3ccd25f6b0 * lisp/vc/vc-git.el (vc-git-checkin): Actually pass down TO-STASH. 2025-04-07 10:05:08 +08:00
Sean Whitton
7f60aa45aa vc-git-checkin: Don't relativize names of temporary files
* lisp/vc/vc-git.el (vc-git-checkin)
(vc-git--stash-staged-changes): Don't relativize names of
temporary files passed to 'git apply --cached'.  More generally,
these are not files managed by the underlying VCS, so they
shouldn't go in the FILE-OR-LIST argument to vc-git-command.
2025-04-07 10:03:46 +08:00
Sean Whitton
8ae7224b8f ; VC credits: Add some names 2025-04-06 11:46:23 +08:00
Sean Whitton
936b2efdb3 Teach VC-Dir to automatically add and remove marks on other lines
* lisp/vc/vc-dir.el (vc-dir-allow-mass-mark-changes): New option.
(vc-dir-parent-marked-p): Replace with ...
(vc-dir--parent): ... this.
(vc-dir-children-marked-p): Replace with ...
(vc-dir--children): ... this.
(vc-dir-mark-file): Unmark subitems before marking a directory.
Offer to unmark a directory before marking a subitem.
(vc-dir-unmark-file): For an implicitly marked item, offer to
unmark it by marking everything else that's implicitly marked.
For an unmarked directory with marked subitems, offer to unmark
them all.
* etc/NEWS: Document the changes.
2025-04-06 11:18:57 +08:00
Sean Whitton
c0b1b54d73 Fix dired-vc-next-action generating inconsistent marks
* lisp/vc/vc-dir.el (vc-dir-mark-files): Document that
directories passed to this function must have trailing slashes.
Don't mark both a directory and also items under it (bug#76769).
* lisp/dired-aux.el (dired-vc-next-action): Update docstring.
2025-04-06 11:09:22 +08:00
Sean Whitton
a5f574429d vc-dir-mark-file: Consistently don't allow marking a subdirectory
* lisp/vc/vc-dir.el (vc-dir-mark-file): Don't allow marking a
subdirectory if its parent is already marked.  This fixes an
inconsistency whereby if a subdirectory was already marked then
its parent could not be marked, but not vice-versa (bug #76769).
2025-04-06 09:09:32 +08:00
Paul D. Nelson
2bced74aa9 ediff-current-file: New optional startup-hooks arg
* lisp/vc/ediff.el (ediff-current-file): Add optional
startup-hooks argument, so that the user can write wrapper
commands with more finely customized behavior (bug#77323).
2025-04-05 09:36:29 +08:00
Sean Whitton
91a75c0d46 ; Add a check for liveness to last change 2025-04-03 16:44:10 +08:00
Sean Whitton
4ace02755b vc-setup-buffer: Fix leaving wrong default-directory
* lisp/vc/vc-dispatcher.el (vc-setup-buffer): Use run-with-timer
to ensure the buffer-local value gets set (bug#77306).
2025-04-03 16:31:36 +08:00
Mauro Aranda
883355cef7 Move a vc option to a preloaded file
Since vc-resolve-conflicts is referenced in backend files, which only
require vc at runtime, move it to vc-hooks to avoid a void
variable error.  (Bug#3860)

* lisp/vc/vc.el (vc-resolve-conflicts): Move from here...
* lisp/vc/vc-hooks.el (vc-resolve-conflicts): ...to here.
2025-04-01 14:16:02 -03:00
Stefan Monnier
468c2aebae Replace uses of replace-buffer-contents
* lisp/vc/vc.el (vc-diff-restore-buffer):
* lisp/progmodes/python.el (python--do-isort):
* lisp/progmodes/eglot.el (eglot--apply-text-edits):
* lisp/files.el (revert-buffer-insert-file-contents-delicately):
* lisp/json.el (json-pretty-print): Use `replace-region-contents`.
2025-03-29 17:49:49 -04:00
Sean Whitton
0503766495 log-edit: Don't add rear-nonsticky to font-lock-extra-managed-props
* lisp/vc/log-edit.el (log-edit-mode): Don't add rear-nonsticky
to font-lock-extra-managed-props (bug#77197).  Investigated by
Paul D. Nelson <ultrano@gmail.com>.  Fix due to Stefan Monnier.
2025-03-24 10:32:40 +08:00
Daniel Colascione
e5ee1d2a74 Adapt ediff to nonstandard layouts
Make ediff cope with having some of its windows (especially the control
window) not shown by a custom ediff-window-setup-function.
Modernize relevant adjacent code. After this change, one can write a
custom ediff-window-setup-function that doesn't show the control window.

* doc/misc/ediff.texi (Notes on Heavy-duty Customization): Refine
language to explain that the window setup function doesn't have to show
all windows.
* lisp/vc/ediff-util.el (ediff-select-control-window-on-setup):
New variable.
(ediff-setup, ediff-recenter, ediff-recenter-one-window)
(ediff-recenter-ancestor, ediff-toggle-read-only)
(ediff-operate-on-windows, ediff-jump-to-difference-at-point)
(ediff-default-suspend-function)
(ediff-clone-buffer-for-region-comparison)
(ediff-clone-buffer-for-window-comparison): Modernize control flow;
select only windows that exist.
* lisp/vc/ediff-wind.el (ediff-with-live-window): New convenience macro.
(ediff-window-setup-function): Explain relaxed contract.
2025-03-21 20:56:12 -04:00
Mauro Aranda
acb96a5ca8 Make marking conflicted files as resolved upon saving opt-out
This fixes Bug#3860.

* lisp/vc/vc.el (vc-resolve-conflicts): New user option.
* lisp/vc/vc-bzr.el (vc-bzr-resolve-conflicts): New user option.
(vc-bzr-find-file-hook): Use it.
* lisp/vc/vc-hg.el (vc-hg-resolve-conflicts): New user option.
(vc-hg-find-file-hook): Use it.
* lisp/vc/vc-svn.el (vc-svn-resolve-conflicts): New user option.
(vc-svn-find-file-hook): Use it.
* lisp/vc/vc-git.el (vc-git-resolve-conflicts): Support
'default' as an option.  Adjust docstring and version.
(vc-git-find-file-hook): Respect vc-resolve-conflicts.
* etc/NEWS: Announce the new options.
2025-03-17 06:55:07 -03:00
Stefan Kangas
d8d524071d Use defvar-keymap for some trivial keymaps
* lisp/bindings.el (mode-line-window-dedicated-keymap)
(mode-line-buffer-identification-keymap):
* lisp/emulation/cua-rect.el (cua--overlay-keymap, cua--overlay-key):
* lisp/mh-e/mh-mime.el (mh-mime-security-button-map):
* lisp/mh-e/mh-utils.el (mh-hidden-header-keymap):
* lisp/net/eudc-bob.el (eudc-bob-generic-keymap, eudc-bob-image-keymap)
(eudc-bob-sound-keymap, eudc-bob-url-keymap, eudc-bob-mail-keymap):
* lisp/progmodes/etags-regen.el (etags-regen-mode-map):
* lisp/progmodes/octave.el (octave-help-mode-map):
* lisp/replace.el (multi-query-replace-map):
* lisp/simple.el (process-menu-mode-map, messages-buffer-mode-map):
* lisp/startup.el (splash-screen-keymap):
* lisp/tab-bar.el (tab-bar-mode-map):
* lisp/textmodes/ispell.el (ispell-minor-keymap):
* lisp/textmodes/tex-mode.el (latex-mode-map, plain-tex-mode-map):
* lisp/tree-widget.el (tree-widget-button-keymap):
* lisp/vc/vc-hooks.el (vc-mode-line-map): Use defvar-keymap.
2025-03-16 13:48:11 +01:00
Sean Whitton
6f483ffdc2 vc-revert: Offer to save modified buffers (bug#55310)
* lisp/vc/vc.el (vc-revert): Offer to save modified buffers that
otherwise prevent proceeding with the revert (bug#55310).
2025-03-16 11:27:02 +08:00
Tomas Nordin
4980287e08 Teach diff-apply-hunk to handle hunks with empty context
* lisp/vc/diff-mode.el (diff-find-source-location):
Consider the case when there is no diff context above or below
edited lines.  (bug#72556)

* test/lisp/vc/diff-mode-tests.el: Add tests for undoing hunks
from diffs with addtions only in the beginning or end of the
source file.
2025-03-15 04:54:11 +02:00
Sean Whitton
942bb22c9f diff-apply-buffer: Operate on region, add prefix argument
* lisp/vc/diff-mode.el (diff-apply-buffer): Interactively,
operate on an active region.  Reverse-apply hunks with a prefix
argument, like C-u C-c C-a already does.
2025-03-11 19:17:04 +08:00
Stefan Kangas
bab17c7fb5 ; Add comment to explain recent change
* lisp/vc/log-edit.el (log-edit-font-lock-keywords): Add comment to
explain recent change.  Proposed by Eli Zaretskii <eliz@gnu.org>.
Ref: https://lists.gnu.org/r/emacs-devel/2025-03/msg00587.html
2025-03-10 20:35:28 +01:00
Sean Whitton
6d62a293af vc-setup-buffer: Don't set current buffer as parent (bug#59457)
* lisp/vc/vc-dispatcher.el (vc-setup-buffer): Don't set the
current buffer as parent (bug#59457).
2025-03-10 17:14:33 +08:00
Sean Whitton
e09a80143d vc-setup-buffer: Kill local file-local-variables-alist too
* lisp/vc/vc-dispatcher.el (vc-setup-buffer): Kill
file-local-variables-alist variable, too (bug#44698).
* lisp/vc/vc.el (vc-log-internal-common): Don't call
kill-all-local-variables here, that's vc-setup-buffer's job.
2025-03-10 17:14:33 +08:00
Mauro Aranda
d01b7c85fe Guard against user saving ediff-meta-diff-buffer
* lisp/vc/ediff-mult.el (ediff-collect-custom-diffs): If the
diff buffer is visiting a file, create a new buffer.  (Bug#3348)

* test/lisp/vc/ediff-mult-tests.el: New test file.
2025-03-09 08:10:17 -03:00
Christoph Badura
00e284fc52 VC: New hook to strip CVS template lines when committing
Add a hook function to strip all lines beginning with "CVS:" from the
commit message as CVS does.  Do this only if 'log-edit-vc-backend' is
'CVS'.  (Bug#72341)

* lisp/vc/log-edit.el
(log-edit-done-strip-cvs-lines): New command.
(log-edit-done-hook): Add it as an option.

* test/lisp/vc/log-edit-tests.el
(log-edit-done-strip-cvs-lines-helper): New function.
(log-edit-done-strip-cvs-lines-cvs)
(log-edit-done-strip-cvs-lines-non-cvs)
(log-edit-done-strip-cvs-lines-only-cvs-colon-blank)
(log-edit-done-strip-cvs-lines-only-cvs-colon): New test cases.

* etc/NEWS: Mention log-edit-done-strip-cvs-lines.
2025-03-09 14:28:25 +08:00
Sean Whitton
a546225e1a vc-log-internal-common: Kill all local variables
* lisp/vc/vc.el (vc-log-internal-common): Kill all local
variables, even permanent-local ones (bug#44698).
2025-03-08 17:09:30 +08:00
Stefan Kangas
c6fe5b7795 Fix using log-edit-mode with git-commit-mode
* lisp/vc/log-edit.el (log-edit-font-lock-keywords): Avoid incorrect
fontification when used with the third-party git-commit-mode (part of
Magit).
2025-03-07 09:39:13 +01:00
Sean Whitton
a38ed1618d Fix unwanted revert file prompt after repeated vc-ediff (bug#11605)
* lisp/vc/ediff-vers.el (vc-find-revision-no-save): Declare.
(ediff-vc-internal, ediff-vc-merge-internal): Bind
vc-find-revision-no-save instead of calling
ediff-delete-version-file (bug#11605).
(ediff-delete-version-file): Delete.
2025-03-04 11:58:15 +08:00
Stefan Kangas
10abb87f05 Fix fontification outside hunks in Git patches
* lisp/vc/diff-mode.el (diff-font-lock-keywords): Don't fontify lines in
Git patches starting with + or - as added/removed, if they are either
before the first hunk, or in the email signature.  (Bug#75884)
(diff-buffer-type): Move definition up.
(diff--indicator-added-re, diff--indicator-removed-re): New variables.
(diff--git-preamble-end, diff--git-footer-start)
(diff--indicator-matcher-helper, diff--indicator-added-matcher)
(diff--indicator-removed-matcher): New functions.
* test/lisp/vc/diff-mode-tests.el (diff-mode-test-git-patch)
(diff-mode-test-git-patch/before-first-hunk)
(diff-mode-test-git-patch/signature): New tests.
* test/lisp/vc/diff-mode-resources/git.patch: New file.
2025-03-03 18:57:17 +01:00
Eli Zaretskii
da584ad6fb Merge from origin/emacs-30
b531bbf73e Fix go-ts-mode const_spec highlighting (Bug#76330)
bd1d6761f4 ; Document what happens when 'display' and 'invisible' pr...
526eeedf88 keymaps.texi: Move "Changing Key Bindings" section up
7ec6531c7b keymaps.texi: Move "Key Sequences" section down
8b80401127 Improve process-get/process-put docstrings
73c646b777 Merge branch 'emacs-30' of git.sv.gnu.org:/srv/git/emacs ...
0af5c57499 Fix recent change in diff-no-select
c8cec840d7 Prevent rare freeze on Android 4.2 through 4.4
2025-03-01 10:01:54 -05:00
Michael Albinus
0af5c57499 Fix recent change in diff-no-select
* lisp/vc/diff.el (diff-no-select): Keep initial default directory
in *Diff* buffer.
2025-02-28 18:03:54 +01:00