* ediff maximum line length?
@ 2011-02-11 4:18 Giorgos Keramidas
2011-02-11 4:48 ` Stefan Monnier
0 siblings, 1 reply; 9+ messages in thread
From: Giorgos Keramidas @ 2011-02-11 4:18 UTC (permalink / raw)
To: emacs-devel
ediff-mode highlights nicely all fine diffs within lines, using a
different face and this has proven *very* useful in many cases, but I've
now bumped on a case (and it will be often the case with some of the
stuff I'm lately doing) where ediff does not display fine diffs for
*very* long lines...
I did try setting up `ediff-auto-refine-limit' to a larger value, e.g.:
(setq-default ediff-auto-refine-limit 16000)
But then the entire line is marked as 'fine diff' when I try for example
to diff the following files:
perl -e 'print "x" x 15000 . "\n"' > file-a.txt
perl -e 'print "x" x 8000 . "yyy" . "x" x 6977 . "\n"' > file-b.txt
Is the behavior of highlighting the full line as fine diff bogus when I
have configured `ediff-auto-refine-limit' to 16000?
If this is not a bug, is there any way to really highlight only the
"yyy" characters in the middle of such a huge line?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 4:18 ediff maximum line length? Giorgos Keramidas
@ 2011-02-11 4:48 ` Stefan Monnier
2011-02-11 9:02 ` Giorgos Keramidas
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2011-02-11 4:48 UTC (permalink / raw)
To: Giorgos Keramidas; +Cc: emacs-devel
> ediff-mode highlights nicely all fine diffs within lines, using a
> different face and this has proven *very* useful in many cases, but I've
> now bumped on a case (and it will be often the case with some of the
> stuff I'm lately doing) where ediff does not display fine diffs for
> *very* long lines...
I don't know ediff very much, but diff-mode also highlights fine diffs
(via diff-refine-hunk or diff-auto-refine-mode, for example). I know
this code fairly well since I wrote it, and to the best of my knowledge
it should not care about line-length (tho I haven't checked its
efficiency in the presence of very long lines).
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 4:48 ` Stefan Monnier
@ 2011-02-11 9:02 ` Giorgos Keramidas
2011-02-11 9:06 ` Lennart Borgman
2011-02-11 14:27 ` Stefan Monnier
0 siblings, 2 replies; 9+ messages in thread
From: Giorgos Keramidas @ 2011-02-11 9:02 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On Thu, 10 Feb 2011 23:48:55 -0500, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> ediff-mode highlights nicely all fine diffs within lines, using a
>> different face and this has proven *very* useful in many cases, but
>> I've now bumped on a case (and it will be often the case with some of
>> the stuff I'm lately doing) where ediff does not display fine diffs
>> for *very* long lines...
>
> I don't know ediff very much, but diff-mode also highlights fine diffs
> (via diff-refine-hunk or diff-auto-refine-mode, for example). I know
> this code fairly well since I wrote it, and to the best of my
> knowledge it should not care about line-length (tho I haven't checked
> its efficiency in the presence of very long lines).
That's good to know. Thank you.
I am looking for something that can compare two files, so that I can
launch Emacs as my diff tool, e.g. from Perforce, Subversion, etc. I
don't know if diff-mode can compare two files instead of a buffer and
its file. That's why I used ediff. (Another reason is that I know its
key bindings from vc, but that's not something I can't live without.)
Right now I have a small shell script as a wrapper that does something
like this simplified version:
if test -d "$1"/. && test -d "$2"/. ; then
exec emacs --eval "(ediff-directories \"$1\" \"$2\" nil)"
else
exec emacs --eval "(ediff-files \"$1\" \"$2\")"
fi
Is it possible to use diff-mode for the same sort of comparison?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 9:02 ` Giorgos Keramidas
@ 2011-02-11 9:06 ` Lennart Borgman
2011-02-11 9:17 ` Giorgos Keramidas
2011-02-11 14:27 ` Stefan Monnier
1 sibling, 1 reply; 9+ messages in thread
From: Lennart Borgman @ 2011-02-11 9:06 UTC (permalink / raw)
To: Giorgos Keramidas; +Cc: Stefan Monnier, emacs-devel
On Fri, Feb 11, 2011 at 10:02 AM, Giorgos Keramidas
<keramida@ceid.upatras.gr> wrote:
>
> Right now I have a small shell script as a wrapper that does something
> like this simplified version:
>
> if test -d "$1"/. && test -d "$2"/. ; then
> exec emacs --eval "(ediff-directories \"$1\" \"$2\" nil)"
> else
> exec emacs --eval "(ediff-files \"$1\" \"$2\")"
> fi
>
> Is it possible to use diff-mode for the same sort of comparison?
I never use diff-mode so I know little about that, but I wonder why
you do not use emacsclient in the above script. Would not that be very
much faster?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 9:06 ` Lennart Borgman
@ 2011-02-11 9:17 ` Giorgos Keramidas
0 siblings, 0 replies; 9+ messages in thread
From: Giorgos Keramidas @ 2011-02-11 9:17 UTC (permalink / raw)
To: Lennart Borgman; +Cc: Stefan Monnier, emacs-devel
On Fri, 11 Feb 2011 10:06:49 +0100, Lennart Borgman <lennart.borgman@gmail.com> wrote:
>On Fri, Feb 11, 2011 at 10:02 AM, Giorgos Keramidas <keramida@ceid.upatras.gr> wrote:
>> Right now I have a small shell script as a wrapper that does something
>> like this simplified version:
>>
>> if test -d "$1"/. && test -d "$2"/. ; then
>> exec emacs --eval "(ediff-directories \"$1\" \"$2\" nil)"
>> else
>> exec emacs --eval "(ediff-files \"$1\" \"$2\")"
>> fi
>>
>> Is it possible to use diff-mode for the same sort of comparison?
>
> I never use diff-mode so I know little about that, but I wonder why
> you do not use emacsclient in the above script. Would not that be very
> much faster?
You're right, of course. I'm just trying to keep things 'simple' for
now. Once I get it working, I'll try to make it faster.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 9:02 ` Giorgos Keramidas
2011-02-11 9:06 ` Lennart Borgman
@ 2011-02-11 14:27 ` Stefan Monnier
2011-02-11 21:45 ` Giorgos Keramidas
1 sibling, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2011-02-11 14:27 UTC (permalink / raw)
To: Giorgos Keramidas; +Cc: emacs-devel
> I am looking for something that can compare two files, so that I can
> launch Emacs as my diff tool, e.g. from Perforce, Subversion, etc. I
> don't know if diff-mode can compare two files instead of a buffer and
> its file.
diff-mode is not a replacement for ediff in that it only helps you read
contextual diffs (i.e. the output of `diff' or other tools that output
in the same format).
So, if you do
exec emacs --eval "(diff \"$1\" \"$2\")"
the resulting *diff* buffer will be in diff-mode.
> That's why I used ediff. (Another reason is that I know its
> key bindings from vc, but that's not something I can't live without.)
From VC, C-x v = will give you a diff that's displayed in diff-mode.
For some uses, this is much better than ediff, but for others ediff is
more appropriate. I've gotten so used to reading diffs that I don't use
ediff nearly as much as diff-mode, tho.
> Is it possible to use diff-mode for the same sort of comparison?
Yes, see above.
Stefan
PS: For 3-way "diffs", smerge-mode provides a similar alternative to
ediff3, and also supports highlighting of fine diffs.
And there's probably a way to get diff3-style output from `diff', so as
to use smerge-mode for 2-way comparisons.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 14:27 ` Stefan Monnier
@ 2011-02-11 21:45 ` Giorgos Keramidas
2011-02-11 22:01 ` Andreas Schwab
0 siblings, 1 reply; 9+ messages in thread
From: Giorgos Keramidas @ 2011-02-11 21:45 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On Fri, 11 Feb 2011 09:27:26 -0500, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> I am looking for something that can compare two files, so that I can
>> launch Emacs as my diff tool, e.g. from Perforce, Subversion, etc. I
>> don't know if diff-mode can compare two files instead of a buffer and
>> its file.
>
> diff-mode is not a replacement for ediff in that it only helps you read
> contextual diffs (i.e. the output of `diff' or other tools that output
> in the same format).
> So, if you do
>
> exec emacs --eval "(diff \"$1\" \"$2\")"
>
> the resulting *diff* buffer will be in diff-mode.
Without fine diff highlighting though. In the pathological case of very
long lines that I find myself often into lately (looking at diffs of
auto-generated code), fine diff highlighting is not only convenient, but
often necessary to spot tiny changes in the middle of a long line of
text that includes command-line options, removed arguments, new options
that replace old ones, etc.
>> Is it possible to use diff-mode for the same sort of comparison?
>
> Yes, see above.
>
>
> Stefan
>
>
> PS: For 3-way "diffs", smerge-mode provides a similar alternative to
> ediff3, and also supports highlighting of fine diffs. And there's
> probably a way to get diff3-style output from `diff', so as to use
> smerge-mode for 2-way comparisons.
That's nice. I can produce a diff3 style patch by running:
diff3 -m -L local -L base -L other \
"my-file" /dev/null "other-file"
Then smerge-mode seems to be able to highlight fine diffs, as long as
there are non-word separators somewhere in the line. It may take a bit
of getting used to, but I'll give it a try. In the meantime, I'll try
to read some ediff source to understand where the fine-diff highlighting
limitation comes from.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 21:45 ` Giorgos Keramidas
@ 2011-02-11 22:01 ` Andreas Schwab
2011-02-12 9:00 ` Giorgos Keramidas
0 siblings, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2011-02-11 22:01 UTC (permalink / raw)
To: Giorgos Keramidas; +Cc: Stefan Monnier, emacs-devel
Giorgos Keramidas <keramida@ceid.upatras.gr> writes:
> On Fri, 11 Feb 2011 09:27:26 -0500, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> diff-mode is not a replacement for ediff in that it only helps you read
>> contextual diffs (i.e. the output of `diff' or other tools that output
>> in the same format).
>> So, if you do
>>
>> exec emacs --eval "(diff \"$1\" \"$2\")"
>>
>> the resulting *diff* buffer will be in diff-mode.
>
> Without fine diff highlighting though.
Anything wrong with diff-refine-hunk?
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: ediff maximum line length?
2011-02-11 22:01 ` Andreas Schwab
@ 2011-02-12 9:00 ` Giorgos Keramidas
0 siblings, 0 replies; 9+ messages in thread
From: Giorgos Keramidas @ 2011-02-12 9:00 UTC (permalink / raw)
To: Andreas Schwab; +Cc: Stefan Monnier, emacs-devel
On Fri, 11 Feb 2011 23:01:18 +0100, Andreas Schwab <schwab@linux-m68k.org> wrote:
>Giorgos Keramidas <keramida@ceid.upatras.gr> writes:
>>On Fri, 11 Feb 2011 09:27:26 -0500, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>>> diff-mode is not a replacement for ediff in that it only helps you
>>> read contextual diffs (i.e. the output of `diff' or other tools that
>>> output in the same format). So, if you do
>>>
>>> exec emacs --eval "(diff \"$1\" \"$2\")"
>>>
>>> the resulting *diff* buffer will be in diff-mode.
>>
>> Without fine diff highlighting though.
>
> Anything wrong with diff-refine-hunk?
Now that I've modified the shell wrapper to `diff -u' first, that should
work too. Thanks! :-)
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-02-12 9:00 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-11 4:18 ediff maximum line length? Giorgos Keramidas
2011-02-11 4:48 ` Stefan Monnier
2011-02-11 9:02 ` Giorgos Keramidas
2011-02-11 9:06 ` Lennart Borgman
2011-02-11 9:17 ` Giorgos Keramidas
2011-02-11 14:27 ` Stefan Monnier
2011-02-11 21:45 ` Giorgos Keramidas
2011-02-11 22:01 ` Andreas Schwab
2011-02-12 9:00 ` Giorgos Keramidas
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).