Mercurial > emacs
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 |