help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: help: howto call ediff from elisp, interactive and multiple args ...


From: Pascal J. Bourguignon
Subject: Re: help: howto call ediff from elisp, interactive and multiple args ...
Date: Wed, 08 Dec 2010 15:35:54 -0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Peter Daum <gator_ml@yahoo.de> writes:

> Sorry, I couldn't find an appropriate subject line:
>
> I have to compare many similar binary files and the best tool I could
> find so far for this purpose is a combination of emacs, hexl-mode and
> ediff. Because this involves far too much typing, I am trying to write a
> little lisp function to set up everything. I already know several ways
> how not to do this ;-)
>
> (defun hexl-ediff (file1 file2)
>   "hexl-find 2 files and run ediff on them"
>   (interactive "fFile 1:" "fFile2:")
>   (hexl-find-file file1)
>   (let*
>       (
>        (buffer1 (last-buffer))
>        (bn1 (buffer-name buffer1))
>        (void (hexl-find-file file2))
>        (buffer2 (last-buffer))
>        (bn2 (buffer-name buffer2))
>        (void (message "b1: %s b2: %s" bn1 bn2))
>        )
>     (ediff-buffers bn1 bn2)
>     ))
>
> There are several problems with this:
>
> 1) I could not find a way how to interactively call this with 2 files.
> I'll get prompted for the 1st file and then I run into an error about
> the wrong #args without any chance to enter the 2nd file name

Have you read the documentation of interactive?

Do you know how to get it?

What word don't you understand in: 

    "To get several arguments, concatenate the individual strings,
    separating them by newline characters."

?



> 2) More severe: I could not come up with any reliable way how to get the
> names of the buffers that the calls to hexl-find-file created (the
> desperate attempt with "last-buffer" will return "*Completions*" ;-)

Have you read the documentation of ediff-buffers?

(Do you know how to get it?)

Now, a lot of functions taking buffers will accept buffer names as
buffer designators, in particular commands, so it wouldn't be wrong, but
you don't have to find the names. Just pass the buffers.

Also see:  (info "(elisp)Buffer Names")


After find-file, or hexl-find-file, the current-buffer will be the one.

(defun hexl-ediff (file1 file2)
  "hexl-find 2 files and run ediff on them"
  (interactive "fFile 1\nfFile2:")
  (ediff-buffers (progn (hexl-find-file file1)
                        (current-buffer))
                 (progn (hexl-find-file file2)
                        (current-buffer))))


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]