comparison lisp/ediff-util.el @ 43714:1c34b0b56515

* ediff-init.el: comments. * ediff-hook.el: Got rid of autoloads. Not needed, since the hook is loaded. * ediff-mult.el (ediff-intersect-directories, ediff-prepare-meta-buffer,ediff-get-directory-files-under-revision): cleanup. (ediff-draw-dir-diffs): now supports the "C" command in directory difference buffer. (ediff-dir-diff-copy-file): new function that implements copying of files from one Ediff dir to another (ediff-bury-dir-diffs-buffer): kills the buffer instead. (ediff-append-custom-diff): better error msgs. * ediff-util.el (ediff-compute-custom-diffs-maybe): buglet fix. (ediff-inferior-compare-regions): Use ediff-clone-buffer-for-region-comparison. Better and simpler interface. * ediff.el (ediff-directories-internal): Cleanup. (ediff-clone-buffer-for-region-comparison): Better interface.
author Michael Kifer <kifer@cs.stonybrook.edu>
date Tue, 05 Mar 2002 05:34:19 +0000
parents 69c91aaa067a
children 182881d68883
comparison
equal deleted inserted replaced
43713:f92c4d87863a 43714:1c34b0b56515
3300 ediff-diff-buffer) 3300 ediff-diff-buffer)
3301 (t (error "Output from `diff' not found")))) 3301 (t (error "Output from `diff' not found"))))
3302 ) 3302 )
3303 (save-buffer))) 3303 (save-buffer)))
3304 3304
3305 ;; This function operates only from an ediff control buffer
3305 (defun ediff-compute-custom-diffs-maybe () 3306 (defun ediff-compute-custom-diffs-maybe ()
3306 (let ((buf-A-file-name (buffer-file-name ediff-buffer-A)) 3307 (let ((buf-A-file-name (buffer-file-name ediff-buffer-A))
3307 (buf-B-file-name (buffer-file-name ediff-buffer-B)) 3308 (buf-B-file-name (buffer-file-name ediff-buffer-B))
3308 file-A file-B) 3309 file-A file-B)
3309 (if (stringp buf-A-file-name) 3310 (if (stringp buf-A-file-name)
3315 3316
3316 (or (ediff-buffer-live-p ediff-custom-diff-buffer) 3317 (or (ediff-buffer-live-p ediff-custom-diff-buffer)
3317 (setq ediff-custom-diff-buffer 3318 (setq ediff-custom-diff-buffer
3318 (get-buffer-create 3319 (get-buffer-create
3319 (ediff-unique-buffer-name "*ediff-custom-diff" "*")))) 3320 (ediff-unique-buffer-name "*ediff-custom-diff" "*"))))
3321 (ediff-with-current-buffer ediff-custom-diff-buffer
3322 (setq buffer-read-only nil)
3323 (erase-buffer))
3320 (ediff-exec-process 3324 (ediff-exec-process
3321 ediff-custom-diff-program ediff-custom-diff-buffer 'synchronize 3325 ediff-custom-diff-program ediff-custom-diff-buffer 'synchronize
3322 ediff-custom-diff-options file-A file-B) 3326 ediff-custom-diff-options file-A file-B)
3323 ;; put the diff file in diff-mode, if it is available 3327 ;; put the diff file in diff-mode, if it is available
3324 (if (fboundp 'diff-mode) 3328 (if (fboundp 'diff-mode)
3371 quit-now 3375 quit-now
3372 begA begB endA endB bufA bufB) 3376 begA begB endA endB bufA bufB)
3373 3377
3374 (cond ((ediff-merge-job) 3378 (cond ((ediff-merge-job)
3375 (setq bufB ediff-buffer-C) 3379 (setq bufB ediff-buffer-C)
3380 ;; ask which buffer to compare to the merge buffer
3376 (while (cond ((eq answer ?A) 3381 (while (cond ((eq answer ?A)
3377 (setq bufA ediff-buffer-A 3382 (setq bufA ediff-buffer-A
3378 possibilities '(?B)) 3383 possibilities '(?B))
3379 nil) 3384 nil)
3380 ((eq answer ?B) 3385 ((eq answer ?B)
3385 (t (beep 1) 3390 (t (beep 1)
3386 (message "Valid values are A or B") 3391 (message "Valid values are A or B")
3387 (sit-for 2) 3392 (sit-for 2)
3388 t)) 3393 t))
3389 (let ((cursor-in-echo-area t)) 3394 (let ((cursor-in-echo-area t))
3390 (message "Which buffer to compare to the merge buffer (A/B)? ") 3395 (message
3396 "Which buffer to compare to the merge buffer (A or B)? ")
3391 (setq answer (capitalize (read-char-exclusive)))))) 3397 (setq answer (capitalize (read-char-exclusive))))))
3392 3398
3393 ((ediff-3way-comparison-job) 3399 ((ediff-3way-comparison-job)
3400 ;; ask which two buffers to compare
3394 (while (cond ((memq answer possibilities) 3401 (while (cond ((memq answer possibilities)
3395 (setq possibilities (delq answer possibilities)) 3402 (setq possibilities (delq answer possibilities))
3396 (setq bufA 3403 (setq bufA
3397 (eval 3404 (eval
3398 (ediff-get-symbol-from-alist 3405 (ediff-get-symbol-from-alist
3405 (mapconcat 'char-to-string possibilities " or ")) 3412 (mapconcat 'char-to-string possibilities " or "))
3406 (sit-for 2) 3413 (sit-for 2)
3407 t)) 3414 t))
3408 (let ((cursor-in-echo-area t)) 3415 (let ((cursor-in-echo-area t))
3409 (message "Enter the 1st buffer you want to compare (%s): " 3416 (message "Enter the 1st buffer you want to compare (%s): "
3410 (mapconcat 'char-to-string possibilities "/")) 3417 (mapconcat 'char-to-string possibilities " or "))
3411 (setq answer (capitalize (read-char-exclusive))))) 3418 (setq answer (capitalize (read-char-exclusive)))))
3412 (setq answer "") ; silence error msg 3419 (setq answer "") ; silence error msg
3413 (while (cond ((memq answer possibilities) 3420 (while (cond ((memq answer possibilities)
3414 (setq possibilities (delq answer possibilities)) 3421 (setq possibilities (delq answer possibilities))
3415 (setq bufB 3422 (setq bufB
3431 (t ; 2way comparison 3438 (t ; 2way comparison
3432 (setq bufA ediff-buffer-A 3439 (setq bufA ediff-buffer-A
3433 bufB ediff-buffer-B 3440 bufB ediff-buffer-B
3434 possibilities nil))) 3441 possibilities nil)))
3435 3442
3443 (setq bufA (ediff-clone-buffer-for-region-comparison
3444 (buffer-name bufA) "-Region.A-"))
3436 (ediff-with-current-buffer bufA 3445 (ediff-with-current-buffer bufA
3437 (or (mark t)
3438 (error "You forgot to specify a region in buffer %s" (buffer-name)))
3439 (setq begA (region-beginning) 3446 (setq begA (region-beginning)
3440 endA (region-end)) 3447 endA (region-end))
3441 (goto-char begA) 3448 (goto-char begA)
3442 (beginning-of-line) 3449 (beginning-of-line)
3443 (setq begA (point)) 3450 (setq begA (point))
3444 (goto-char endA) 3451 (goto-char endA)
3445 (end-of-line) 3452 (end-of-line)
3446 (or (eobp) (forward-char)) ; include the newline char 3453 (or (eobp) (forward-char)) ; include the newline char
3447 (setq endA (point))) 3454 (setq endA (point)))
3455
3456 (setq bufB (ediff-clone-buffer-for-region-comparison
3457 (buffer-name bufB) "-Region.B-"))
3448 (ediff-with-current-buffer bufB 3458 (ediff-with-current-buffer bufB
3449 (or (mark t)
3450 (error "You forgot to specify a region in buffer %s" (buffer-name)))
3451 (setq begB (region-beginning) 3459 (setq begB (region-beginning)
3452 endB (region-end)) 3460 endB (region-end))
3453 (goto-char begB) 3461 (goto-char begB)
3454 (beginning-of-line) 3462 (beginning-of-line)
3455 (setq begB (point)) 3463 (setq begB (point))
3456 (goto-char endB) 3464 (goto-char endB)
3457 (end-of-line) 3465 (end-of-line)
3458 (or (eobp) (forward-char)) ; include the newline char 3466 (or (eobp) (forward-char)) ; include the newline char
3459 (setq endB (point))) 3467 (setq endB (point)))
3460
3461 (ediff-unselect-and-select-difference
3462 ediff-current-difference 'unselect-only)
3463 (ediff-paint-background-regions 'unhighlight)
3464
3465 (ediff-with-current-buffer bufA
3466 (goto-char begA)
3467 (set-mark endA)
3468 (narrow-to-region begA endA)
3469 ;; (ediff-activate-mark)
3470 )
3471 ;; (sit-for 0)
3472 (ediff-with-current-buffer bufB
3473 (goto-char begB)
3474 (set-mark endB)
3475 (narrow-to-region begB endB)
3476 ;; (ediff-activate-mark)
3477 )
3478 ;; (sit-for 0)
3479
3480 ;; At this point, possibilities contains either the window char A/B/C
3481 ;; that was not selected, or it is nil. We delete the window that is not
3482 ;; selected.
3483 (if possibilities
3484 (ediff-with-current-buffer ctl-buf
3485 (let* ((wind-to-delete (eval
3486 (ediff-get-symbol-from-alist
3487 (car possibilities)
3488 ediff-window-alist)))
3489 (frame (window-frame wind-to-delete)))
3490 (delete-window wind-to-delete)
3491 (select-frame frame)
3492 (balance-windows))))
3493 (or (y-or-n-p
3494 "Please check regions selected for comparison. Continue? ")
3495 (setq quit-now t))
3496
3497 (ediff-with-current-buffer bufA
3498 (widen))
3499 (ediff-with-current-buffer bufB
3500 (widen))
3501 (if quit-now
3502 (ediff-with-current-buffer ctl-buf
3503 (ediff-recenter)
3504 (sit-for 0)
3505 (error "All right. Make up your mind and come back...")))
3506 3468
3507 (ediff-regions-internal 3469 (ediff-regions-internal
3508 bufA begA endA bufB begB endB 3470 bufA begA endA bufB begB endB
3509 nil ; setup-hook 3471 nil ; setup-hook
3510 'ediff-regions-linewise ; job name 3472 'ediff-regions-linewise ; job name