Commit graph

120 commits

Author SHA1 Message Date
Dima Kogan
e5ef59b87d diff-mode auto-refines only after a successful motion
Prior to this patch (if enabled) auto-refinement would kick in after all
hunk navigation commands, even if the motion failed.  This would result
in a situation where the hunk navigation would signal an error and beep,
but yet still accomplish potentially useful work, by auto-refining.
This patch moves the auto-refinement code to only run when a motion was
successful

* lisp/vc/diff-mode.el (diff--internal-hunk-next,
  diff--internal-hunk-prev): Removed auto-refinement-triggering code
* lisp/vc/diff-mode.el (diff--wrap-navigation): Added
  auto-refinement-triggering code
2016-12-24 21:42:02 -08:00
Dima Kogan
6b6abe0dba diff-mode is able to better handle file headers
This fixes a regression introduced in

  http://git.savannah.gnu.org/gitweb/?p=emacs.git;a=commit;h=2c8a7e50d24daf19ea7d86f1cfeaa98a41c56085

This bug was filed in

  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25105

Patches generated from a VCS such as git contain a patch message at the
start, and diff-mode is now once-again able to properly able to ignore
this message when issuing navigation commands around the message.

* lisp/vc/diff-mode.el (diff-beginning-of-file-and-junk): More
  thoroughly ignore the header when looking for a beginning of file
  diffs.
2016-12-24 21:32:34 -08:00
Paul Eggert
73349822cb ; Spelling fixes 2016-12-22 10:14:11 -08:00
Noam Postavsky
a283d655db Fix previous commit
* lisp/vc/diff-mode.el (diff-refine-hunk): Make sure to go to beginning
of hunk before calling `diff-hunk-style'.
2016-11-29 18:59:02 -05:00
Noam Postavsky
61c6a10e31 * lisp/vc/diff-mode.el (diff-refine-hunk): Remove redundant variable. 2016-11-29 18:52:41 -05:00
Dima Kogan
2c8a7e50d2 Improve diff-mode navigation/manipulation
This is Bug #17544.

Navigation and use of diff buffers had several annoying corner cases
that this patch fixes.  These corner cases were largely due to
inconsistent treatment of file headers.  Say you have a diff such as
this:

 --- aaa
 +++ bbb
 @@ -52,7 +52,7 @@
 hunk1
 @@ -74,7 +74,7 @@
 hunk2
 --- ccc
 +++ ddd
 @@ -608,6 +608,6 @@
 hunk3
 @@ -654,7 +654,7 @@
 hunk4

The file headers here are the '---' and '+++' lines.  With the point on
such a line, hunk operations would sometimes refer to the next hunk and
sometimes to the previous hunk.  Most of the time it would be the
previous hunk, which is not what the user would expect.  This patch
consistently treats such headers as the next hunk.  So with this patch,
if the point is on the '--- ccc' line, the point is seen as referring to
hunk3.

Specific behaviors this fixes are:

1. It should be possible to place the point in the middle of a diff
buffer, and press M-k repeatedly to kill hunks in the order they appear
in the buffer.  With the point on hunk1, M-k M-k would kill hunk1 then
hunk2.  With the point on hunk3, it would kill hunk3 then hunk4; this is
fine.  However, with the point on hunk2, it'd kill hunk2 then hunk1.
This is fixed by this patch.

2. Similarly, it should be possible to apply hunks in order.  Previously
with the point at the start, C-c C-a would apply the hunk1, then move
the point to the first @@ header, and thus C-c C-a would try to apply
the same hunk again.

* lisp/vc/diff-mode.el (diff--wrap-navigation): New function to add better
navigation logic to diff-{hunk,file}-{next,prev}.
(diff-hunk-next, diff-hunk-prev):
(diff-file-next, diff-file-prev): Better navigation logic if
skip-hunk-start is true, which happens when called interactively.
(diff-bounds-of-hunk, diff-find-source-location):
(diff-apply-hunk, diff-current-defun, diff-refine-hunk): Small tweaks to
improve hunk navigation.
2016-11-28 22:40:03 -05:00
Stephen Berman
1f55925728 ; Fix breakage from previous commit 2016-06-27 16:50:09 -04:00
Mark Oteiza
c430f7e23f Remove some face aliases obsoleted in 22.1
* lisp/faces.el (modeline-inactive, modeline-highlight, modeline-buffer-id):
* lisp/hilit-chg.el (highlight-changes-face, highlight-changes-delete-face):
* lisp/info.el (Info-title-1-face, Info-title-2-face, Info-title-3-face,
Info-title-4-face, info-menu-5):
* lisp/obsolete/old-whitespace.el (whitespace-highlight-face):
* lisp/paren.el (show-paren-match-face, show-paren-mismatch-face):
* lisp/progmodes/make-mode.el (makefile-space-face):
* lisp/textmodes/texinfo.el (texinfo-heading-face): Remove.
(texinfo-font-lock-keywords): Use texinfo-heading face.
* lisp/vc/add-log.el (change-log-date-face, change-log-name-face,
change-log-email-face, change-log-file-face, change-log-list-face,
change-log-conditionals-face, change-log-function-face,
change-log-acknowledgement-face):
* lisp/vc/diff-mode.el (diff-header-face, diff-file-header-face,
diff-index-face, diff-hunk-header-face, diff-removed-face, diff-added-face,
diff-changed-face, diff-function-face, diff-context-face,
diff-nonexistent-face): Remove.
(diff-use-changed-face, diff-font-lock-keywords): Use non-obsolete face
symbols.
(diff-hunk-file-names): Fix comment.
(diff-refine-change): Remove.
(diff-refine-removed, diff-refine-added, diff-refine-hunk): Use
non-obsolete face.
* lisp/vc/log-view.el (log-view-file-face, log-view-message-face): Remove.
(log-view-font-lock-keywords): Use non-obsolete face names.
* lisp/vc/pcvs-info.el (cvs-header-face, cvs-filename-face, cvs-unknown-face,
cvs-handled-face, cvs-need-action-face, cvs-marked-face, cvs-msg-face):
* lisp/wid-edit.el (widget-documentation-face, widget-button-face,
widget-field-face, widget-single-line-field-face, widget-inactive-face,
widget-button-pressed-face):
* lisp/woman.el (woman-italic-face, woman-bold-face, woman-unknown-face,
woman-addition-face): Remove.
2016-06-23 17:13:11 -04:00
Paul Eggert
0e963201d0 Update copyright year to 2016
Run admin/update-copyright.
2016-01-01 01:34:24 -08:00
Dmitry Gutov
138ad3d93b ; Fix warnings
* lisp/vc/diff-mode.el (diff-kill-applied-hunks):
Fix unused variable warnings.
2015-11-14 03:03:58 +02:00
Paul Eggert
284c470ef7 Backslash cleanup in Elisp source files
This patch should not change behavior.  It typically omits backslashes
where they are redundant (e.g., in the string literal "^\$").
In a few places, insert backslashes where they make regular
expressions clearer: e.g., replace "^\*" (equivalent to "^*") with
"^\\*", which has the same effect as a regular expression.
Also, use ‘\ %’ instead of ‘\%’ when avoiding confusion with SCCS IDs,
and similarly use ‘\ $’ instead of ‘\$’ when avoiding confusion with
RCS IDs, as that makes it clearer that the backslash is intended.
2015-09-17 16:09:39 -07:00
Paul Eggert
5e63c84200 Fix minor text quoting in calc, calendar, vc
* lisp/calc/calc-ext.el (calc-shift-Z-prefix-help):
* lisp/calc/calc-help.el (calc-j-prefix-help):
* lisp/calc/calc-misc.el (calc-help):
* lisp/calc/calc.el (calc-algebraic-mode, calc-mode):
Escape an apostrophe in a docstring.
* lisp/calc/calc-forms.el (calc-hms-notation):
* lisp/calc/calc-mode.el (calc-display-raw, calc-algebraic-mode):
Escape an apostrophe in a diagnostic.
* lisp/calc/calc-misc.el (calc-help):
* lisp/calendar/diary-lib.el (diary-include-files):
* lisp/calendar/todo-mode.el (todo-prefix, todo-item-mark):
* lisp/vc/diff-mode.el (diff-delete-trailing-whitespace):
* lisp/vc/ediff-diff.el (ediff-same-contents):
* lisp/vc/ediff-merg.el (ediff-re-merge):
* lisp/vc/ediff-ptch.el (ediff-patch-file-internal):
* lisp/vc/ediff-util.el (ediff-test-save-region)
(ediff-status-info):
* lisp/vc/ediff.el (ediff-merge-revisions)
(ediff-merge-revisions-with-ancestor):
* lisp/vc/pcvs.el (cvs-mode-checkout, cvs-vc-command-advice):
* lisp/vc/vc-cvs.el (vc-cvs-mode-line-string):
Respect text quoting style in doc string or diagnostic.
* lisp/calc/calc-prog.el (calc-kbd-push, calc-kbd-pop):
* lisp/vc/add-log.el (change-log-goto-source):
Avoid double-formatting.
* lisp/vc/ediff-init.el (format-message):
New backward-compatibility alias.
2015-08-28 22:25:09 -07:00
Gustav Hållberg
3d78c5578c (diff-hunk-file-names): Don't require a TAB after the file name
Fixes: debbugs:20276
2015-04-08 21:47:50 -04:00
Paul Eggert
7e09ef09a4 Update copyright year to 2015
Run admin/update-copyright.
2015-01-01 14:26:41 -08:00
Stefan Monnier
8dac9c34d8 * lisp/vc/diff-mode.el (diff-kill-applied-hunks): New command.
* lisp/vc/smerge-mode.el (smerge-swap): New command.
2014-12-01 13:16:53 -05:00
Stefan Monnier
cbdc06f3be Rename 24.5 to 25.1
Except where we expect to backport the corresponding change.
2014-09-29 14:14:08 -04:00
Andreas Schwab
52e7a5b99f Handle missing space marker in unified diff during header fixup
* vc/diff-mode.el (diff-fixup-modifs): Handle empty line in
context of unified diff.
2014-08-16 21:51:27 +02:00
Juri Linkov
1a63945352 * lisp/vc/diff-mode.el (diff-changed): Empty face definition
to use `diff-removed' and `diff-added' on tty as well. 
(diff-context): Use darker color on light background and
lighter color on dark background.

Fixes: debbugs:10181
2014-06-18 11:48:49 +03:00
Juri Linkov
7c6fc37fa9 * lisp/vc/diff-mode.el (diff-refine-changed): Rename from
`diff-refine-change' for consistency with `diff-changed'.
(diff-refine-change): Add obsolete face alias. 

* lisp/vc/smerge-mode.el (smerge-refined-changed): Rename from
`smerge-refined-change'.
(smerge-refined-change): Add obsolete face alias.

Fixes: debbugs:10181
2014-06-18 11:33:57 +03:00
Paul Eggert
ba3189039a Update copyright year to 2014 by running admin/update-copyright. 2014-01-01 07:43:34 +00:00
Ivan Shmakov
e1b01c7fed * vc/diff-mode.el (diff-mode): Tiny change re diff-default-read-only
Only allow diff-default-read-only to set buffer-read-only to t, never to nil.

Fixes: debbugs:15938
2013-11-22 18:55:17 -08:00
Dmitry Gutov
b3082f497c * lisp/vc/diff-mode.el (diff-mode-shared-map): Unbind "/".
Fixes: debbugs:14034
2013-03-23 21:43:18 +04:00
Sam Steingold
3602ccebf6 * lisp/vc/diff-mode.el (diff-hunk-file-names): Handle filenames with spaces.
See <http://stackoverflow.com/questions/14720205>.
2013-02-28 11:34:51 -05:00
Paul Eggert
0877d0dc24 Merge from emacs-24; up to 2012-12-06T01:39:03Z!monnier@iro.umontreal.ca 2013-01-02 08:13:04 -08:00
Paul Eggert
ab422c4d68 Update copyright notices for 2013. 2013-01-01 09:11:05 +00:00
Stefan Monnier
f4d79bd021 * lisp/vc/diff-mode.el (diff-post-command-hook): Don't ignore changes at the
very beginning of a hunk (e.g. killing the first line).
2012-12-19 14:41:43 -05:00
Stefan Monnier
1000d89524 * lisp/vc/diff-mode.el (diff-hunk): Don't make useless timers. 2012-11-19 13:40:18 -05:00
Chong Yidong
9d9e48d904 Rewrite and rename diff-delete-trailing-whitespace.
* lisp/vc/diff-mode.el (diff-delete-trailing-whitespace): Rewrite, and
rename from diff-remove-trailing-whitespace (Bug#12831).

* files.texi (Diff Mode): Doc fixes for
diff-delete-trailing-whitespace.
2012-11-09 01:31:53 +08:00
Glenn Morris
26f596760d Document diff-remove-trailing-whitespace
* doc/emacs/files.texi (Diff Mode): Trailing whitespace updates.

* lisp/vc/diff-mode.el (diff-remove-trailing-whitespace): Doc fix.

* etc/NEWS: Related markup.
2012-11-08 00:14:23 -08:00
Stefan Monnier
d7f9cc8528 * lisp/vc/diff-mode.el (diff-context->unified): Don't get confused by "hunk
header comments".
(diff-unified->context, diff-context->unified)
(diff-reverse-direction, diff-fixup-modifs): Use `use-region-p'.
2012-10-29 11:14:10 -04:00
Stefan Monnier
a2be03575f * lisp/vc/diff-mode.el (diff-end-of-hunk): Also skip potential "no LF at eol".
(diff-refine-hunk): Similarly, handle the "no LF at eol".

Fixes: debbugs:12584
2012-10-26 11:51:42 -04:00
Stefan Monnier
9c3e39f3ff * lisp/vc/diff-mode.el (diff-hunk): `save-excursion' while refining.
Fixes: debbugs:12671
2012-10-23 14:40:23 -04:00
Stefan Monnier
6be9197e60 * lisp/vc/diff-mode.el (diff--auto-refine-data): New var.
(diff-hunk): Use it to delay refinement.
(diff-mode): Remove overlays when we turn off font-lock.
2012-10-01 23:49:28 -04:00
Juri Linkov
d80d54b289 * lisp/facemenu.el (list-colors-sort): Add option "Luminance".
(list-colors-sort-key): Implement it.

* lisp/vc/diff-mode.el (diff-refine-removed):
* lisp/vc/ediff-init.el (ediff-fine-diff-A):
* lisp/vc/smerge-mode.el (smerge-refined-removed):
Change background color "#ffaaaa" to "#ffbbbb".

Fixes: debbugs:10181
2012-09-30 19:36:42 +03:00
Dan Nicolaescu
0780c51704 * vc/diff-mode.el (diff-mode-menu): diff-remove-trailing-whitespace. 2012-09-10 10:40:13 -04:00
Glenn Morris
2a1e24765b Replace version 24.2 with 24.3 where appropriate (hopefully) 2012-08-15 09:29:11 -07:00
Stefan Monnier
aa7c6dbeba * lisp/color.el (color-xyz-to-lab, color-lab-to-xyz, color-cie-de2000):
Prefer pcase-let over destructuring-bind.
* lisp/vc/diff-mode.el (diff-remove-trailing-whitespace): Same.
Also, remove whitespace as we go, rather than after accumulating the
various places.
2012-08-13 15:10:35 -04:00
Oscar Fuentes
2c2d9c9cd0 * vc/diff-mode.el (diff-remove-trailing-whitespace): New function. 2012-08-08 00:41:35 -04:00
Stefan Monnier
f58e0fd503 Reduce use of (require 'cl).
* admin/bzrmerge.el: Use cl-lib.
* leim/quail/hangul.el: Don't require CL.
* leim/quail/ipa.el: Use cl-lib.
* vc/smerge-mode.el, vc/pcvs.el, vc/pcvs-util.el, vc/pcvs-info.el:
* vc/diff-mode.el, vc/cvs-status.el, uniquify.el, scroll-bar.el:
* register.el, progmodes/sh-script.el, net/gnutls.el, net/dbus.el:
* msb.el, mpc.el, minibuffer.el, international/ucs-normalize.el:
* international/quail.el, info-xref.el, imenu.el, image-mode.el:
* font-lock.el, filesets.el, edmacro.el, doc-view.el, bookmark.el:
* battery.el, avoid.el, abbrev.el: Use cl-lib.
* vc/pcvs-parse.el, vc/pcvs-defs.el, vc/log-view.el, vc/log-edit.el:
* vc/diff.el, simple.el, pcomplete.el, lpr.el, comint.el, loadhist.el:
* jit-lock.el, international/iso-ascii.el, info.el, frame.el, bs.el:
* emulation/crisp.el, electric.el, dired.el, cus-dep.el, composite.el:
* calculator.el, autorevert.el, apropos.el: Don't require CL.
* emacs-bytecomp.el (byte-recompile-directory, display-call-tree)
(byte-compile-unfold-bcf, byte-compile-check-variable):
* emacs-byte-opt.el (byte-compile-trueconstp)
(byte-compile-nilconstp):
* emacs-autoload.el (make-autoload): Use pcase.
* face-remap.el (text-scale-adjust): Simplify pcase patterns.
2012-07-10 07:51:54 -04:00
Juri Linkov
bc1b21bb4e Use the same diff color scheme as in modern VCSes (bug#10181).
* lisp/vc/diff-mode.el (diff-header, diff-file-header): Remove "green"
to avoid confusion with `diff-added' that now uses green colors.
(diff-removed): Use shades of red.
(diff-added): Use shades of green.
(diff-changed): Leave just the yellow color.
(diff-use-changed-face): New variable.
(diff-font-lock-keywords): Use `diff-use-changed-face' to decide
how to highlight context diff changes.
(diff-refine-change): Use shades of yellow.
(diff-refine-removed): New face that uses shades of red.
(diff-refine-added): New face that uses shades of green.
(diff-refine-hunk): Use `diff-refine-change', `diff-refine-added',
`diff-refine-removed' in the call to `smerge-refine-subst'
depending on the value of `diff-use-changed-face'.

* lisp/vc/ediff-init.el (ediff-current-diff-A, ediff-fine-diff-A):
Add face condition `min-colors 88' with shades of red.
(ediff-current-diff-B, ediff-fine-diff-B): Add face condition
`min-colors 88' with shades of green.
(ediff-current-diff-C, ediff-fine-diff-C): Add face condition
`min-colors 88' with shades of yellow.

* lisp/vc/smerge-mode.el (smerge-mine): Use shades of red.
(smerge-other): Use shades of green.
(smerge-base): Use shades of yellow.
(smerge-refined-change): Empty face.
(smerge-refined-removed): New face that uses shades of red.
(smerge-refined-added): New face that uses shades of green.
(smerge-refine-subst): Rename arg `props' to `props-c'.  Add new
args `props-r' and `props-a', and use them.  Doc fix.
(smerge-refine): Evaluate `smerge-use-changed-face' and depending
on its value use different faces `smerge-refined-change',
`smerge-refined-removed', `smerge-refined-added' in the call to
`smerge-refine-subst'.
2012-05-25 03:55:40 +03:00
Chong Yidong
cb3e7ae07a Fixes for diff-hunk-kill.
* lisp/vc/diff-mode.el (diff-beginning-of-hunk): Return a meaningful
value, for symmetry with diff-end-of-hunk.
(diff-split-hunk, diff-find-source-location)
(diff-ignore-whitespace-hunk, diff-refine-hunk): Use it.
(diff-bounds-of-hunk, diff-bounds-of-file): New functions.
(diff-restrict-view, diff-hunk-kill, diff-file-kill): Use them to
compute the relevant hunk or file properly.
(diff-file-junk-re): Add bzr's "modified file" tag.

Fixes: debbugs:6041 debbugs:6005
2012-04-26 16:00:47 +08:00
Chong Yidong
8b71081d30 Allow undoing in read-only diff-mode buffers.
* lisp/vc/diff-mode.el (diff-undo): New command.
(diff-mode-shared-map): Bind it to / and [remap undo].

Fixes: debbugs:5302
2012-04-26 11:43:32 +08:00
Chong Yidong
07875ee72b Fix whitespace highlighting of context diffs.
* lisp/vc/diff-mode.el (diff-setup-whitespace): New function.
(diff-mode): Use it.

* lisp/vc/diff.el (diff-sentinel):
* lisp/vc/vc.el (vc-diff-finish): Call diff-setup-whitespace to assign
Whitespace mode variables based on diff style.

Fixes: debbugs:8612
2012-04-25 23:06:51 +08:00
Leo Liu
d65c95210d * lisp/vc/diff-mode.el (diff-file-prev/next): Fix typo. 2012-04-14 14:28:57 +08:00
Glenn Morris
44e97401cd Standardize possessive apostrophe usage in manuals, docs, and comments
Ref: http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00649.html
2012-02-28 00:17:21 -08:00
Leo Liu
1be3ca5ad7 Rename condition-case-no-debug to condition-case-unless-debug 2012-02-10 23:59:29 +08:00
Glenn Morris
acaf905b11 Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
Michael Albinus
f3af92b794 * vc/diff-mode.el (diff-find-file-name): Make `read-file-name'
aware of remote file names.  (Bug#10124)
2011-11-29 15:59:24 +01:00
Eli Zaretskii
c60c3703ac Prevent Diff Mode from stealing M-z binding.
lisp/vc/diff-mode.el (diff-mode-map): Don't inherit 'z' => 'M-z' from
 special-mode-map.
2011-11-28 20:03:11 +02:00
Chong Yidong
ac6c8639bd Fix more minor mode docstrings.
* lisp/emulation/cua-base.el (cua-mode):
* lisp/mail/footnote.el (footnote-mode):
* lisp/mail/mailabbrev.el (mail-abbrevs-mode):
* lisp/net/xesam.el (xesam-minor-mode):
* lisp/progmodes/bug-reference.el (bug-reference-mode):
* lisp/progmodes/cap-words.el (capitalized-words-mode):
* lisp/progmodes/compile.el (compilation-minor-mode)
(compilation-shell-minor-mode):
* lisp/progmodes/gud.el (gud-tooltip-mode):
* lisp/progmodes/hideif.el (hide-ifdef-mode):
* lisp/progmodes/idlw-shell.el (idlwave-shell-electric-debug-mode):
* lisp/progmodes/subword.el (subword-mode):
* lisp/progmodes/vhdl-mode.el (vhdl-electric-mode, vhdl-stutter-mode):
* lisp/progmodes/which-func.el (which-function-mode):
* lisp/term/tvi970.el (tvi970-set-keypad-mode):
* lisp/term/vt100.el (vt100-wide-mode):
* lisp/textmodes/flyspell.el (flyspell-mode):
* lisp/textmodes/ispell.el (ispell-minor-mode):
* lisp/textmodes/nroff-mode.el (nroff-electric-mode):
* lisp/textmodes/paragraphs.el (use-hard-newlines):
* lisp/textmodes/refill.el (refill-mode):
* lisp/textmodes/reftex.el (reftex-mode):
* lisp/textmodes/rst.el (rst-minor-mode):
* lisp/textmodes/sgml-mode.el (html-autoview-mode)
(sgml-electric-tag-pair-mode):
* lisp/textmodes/tex-mode.el (latex-electric-env-pair-mode):
* lisp/vc/diff-mode.el (diff-auto-refine-mode, diff-minor-mode):
* lisp/emulation/crisp.el (crisp-mode):
* lisp/emacs-lisp/eldoc.el (eldoc-mode):
* lisp/emacs-lisp/checkdoc.el (checkdoc-minor-mode): Doc fixes for new
minor mode behavior.

* lisp/erc/erc-fill.el (erc-fill-mode):
* lisp/erc/erc-track.el (erc-track-minor-mode): Doc fix.

* lisp/erc/erc.el (define-erc-module): Fix autogenerated docstring to
reflect Emacs 24 minor mode changes.

* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Doc fix (in Emacs 24,
calling a minor mode from Lisp with nil arg enables it, so we have to
make the working a bit ambiguous here).
2011-10-19 20:26:14 -04:00