comparison lisp/ediff-util.el @ 20206:f44ff2c52fac

new version
author Michael Kifer <kifer@cs.stonybrook.edu>
date Sat, 01 Nov 1997 01:46:51 +0000
parents 9bc6a4017c8c
children f7e788ea680b
comparison
equal deleted inserted replaced
20205:cdaddfc03fe8 20206:f44ff2c52fac
176 (define-key ediff-mode-map ">" 'ediff-scroll-horizontally) 176 (define-key ediff-mode-map ">" 'ediff-scroll-horizontally)
177 (define-key ediff-mode-map "i" 'ediff-status-info) 177 (define-key ediff-mode-map "i" 'ediff-status-info)
178 (define-key ediff-mode-map "E" 'ediff-documentation) 178 (define-key ediff-mode-map "E" 'ediff-documentation)
179 (define-key ediff-mode-map "?" 'ediff-toggle-help) 179 (define-key ediff-mode-map "?" 'ediff-toggle-help)
180 (define-key ediff-mode-map "!" 'ediff-update-diffs) 180 (define-key ediff-mode-map "!" 'ediff-update-diffs)
181 (define-key ediff-mode-map "M" 'ediff-show-meta-buffer) 181 (define-key ediff-mode-map "M" 'ediff-show-current-session-meta-buffer)
182 (define-key ediff-mode-map "R" 'ediff-show-registry) 182 (define-key ediff-mode-map "R" 'ediff-show-registry)
183 (or ediff-word-mode 183 (or ediff-word-mode
184 (define-key ediff-mode-map "*" 'ediff-make-or-kill-fine-diffs)) 184 (define-key ediff-mode-map "*" 'ediff-make-or-kill-fine-diffs))
185 (define-key ediff-mode-map "a" nil) 185 (define-key ediff-mode-map "a" nil)
186 (define-key ediff-mode-map "b" nil) 186 (define-key ediff-mode-map "b" nil)
249 ;; so other functions can do post-processing SETUP-PARAMETERS is a list of the 249 ;; so other functions can do post-processing SETUP-PARAMETERS is a list of the
250 ;; form ((param .val) (param . val)...) This serves a similar purpose to 250 ;; form ((param .val) (param . val)...) This serves a similar purpose to
251 ;; STARTUP-HOOKS, but these parameters are set in the new control buffer right 251 ;; STARTUP-HOOKS, but these parameters are set in the new control buffer right
252 ;; after this buf is created and before any windows are set and such. 252 ;; after this buf is created and before any windows are set and such.
253 (defun ediff-setup (buffer-A file-A buffer-B file-B buffer-C file-C 253 (defun ediff-setup (buffer-A file-A buffer-B file-B buffer-C file-C
254 startup-hooks setup-parameters) 254 startup-hooks setup-parameters
255 &optional merge-buffer-file)
255 ;; ediff-convert-standard-filename puts file names in the form appropriate 256 ;; ediff-convert-standard-filename puts file names in the form appropriate
256 ;; for the OS at hand. 257 ;; for the OS at hand.
257 (setq file-A (ediff-convert-standard-filename (expand-file-name file-A))) 258 (setq file-A (ediff-convert-standard-filename (expand-file-name file-A)))
258 (setq file-B (ediff-convert-standard-filename (expand-file-name file-B))) 259 (setq file-B (ediff-convert-standard-filename (expand-file-name file-B)))
259 (if (stringp file-C) 260 (if (stringp file-C)
260 (setq file-C 261 (setq file-C
261 (ediff-convert-standard-filename (expand-file-name file-C)))) 262 (ediff-convert-standard-filename (expand-file-name file-C))))
263 (if (stringp merge-buffer-file)
264 (progn
265 (setq merge-buffer-file
266 (ediff-convert-standard-filename
267 (expand-file-name merge-buffer-file)))
268 ;; check the directory exists
269 (or (file-exists-p (file-name-directory merge-buffer-file))
270 (error "Directory %s given as place to save the merge doesn't exist."
271 (abbreviate-file-name
272 (file-name-directory merge-buffer-file))))
273 (if (and (file-exists-p merge-buffer-file)
274 (file-directory-p merge-buffer-file))
275 (error "The merge buffer file %s must not be a directory"
276 (abbreviate-file-name merge-buffer-file)))
277 ))
262 (let* ((control-buffer-name 278 (let* ((control-buffer-name
263 (ediff-unique-buffer-name "*Ediff Control Panel" "*")) 279 (ediff-unique-buffer-name "*Ediff Control Panel" "*"))
264 (control-buffer (ediff-with-current-buffer buffer-A 280 (control-buffer (ediff-with-current-buffer buffer-A
265 (get-buffer-create control-buffer-name)))) 281 (get-buffer-create control-buffer-name))))
266 (ediff-with-current-buffer control-buffer 282 (ediff-with-current-buffer control-buffer
325 (ediff-unique-buffer-name "*ediff-merge" "*"))) 341 (ediff-unique-buffer-name "*ediff-merge" "*")))
326 (save-excursion 342 (save-excursion
327 (set-buffer buffer-C) 343 (set-buffer buffer-C)
328 (insert-buffer buf) 344 (insert-buffer buf)
329 (funcall (ediff-with-current-buffer buf major-mode)) 345 (funcall (ediff-with-current-buffer buf major-mode))
330 ;; after Stig@hackvan.com
331 (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t) 346 (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t)
332 ))) 347 )))
333 (setq buffer-read-only nil 348 (setq buffer-read-only nil
334 ediff-buffer-A buffer-A 349 ediff-buffer-A buffer-A
335 ediff-buffer-B buffer-B 350 ediff-buffer-B buffer-B
487 502
488 (select-window ediff-control-window) 503 (select-window ediff-control-window)
489 (ediff-visible-region) 504 (ediff-visible-region)
490 505
491 (run-hooks 'startup-hooks) 506 (run-hooks 'startup-hooks)
507 (ediff-arrange-autosave-in-merge-jobs merge-buffer-file)
508
492 (ediff-refresh-mode-lines) 509 (ediff-refresh-mode-lines)
493 (setq buffer-read-only t) 510 (setq buffer-read-only t)
494 (setq ediff-session-registry 511 (setq ediff-session-registry
495 (cons control-buffer ediff-session-registry)) 512 (cons control-buffer ediff-session-registry))
496 (ediff-update-registry) 513 (ediff-update-registry)
497 (if (ediff-buffer-live-p ediff-meta-buffer) 514 (if (ediff-buffer-live-p ediff-meta-buffer)
498 (ediff-update-meta-buffer ediff-meta-buffer)) 515 (ediff-update-meta-buffer
516 ediff-meta-buffer nil ediff-meta-session-number))
499 (run-hooks 'ediff-startup-hook) 517 (run-hooks 'ediff-startup-hook)
500 ) ; eval in control-buffer 518 ) ; eval in control-buffer
501 control-buffer)) 519 control-buffer))
502 520
503 521
534 (if (not (ediff-multiframe-setup-p)) 552 (if (not (ediff-multiframe-setup-p))
535 (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested 553 (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested
536 (goto-char (point-min)) 554 (goto-char (point-min))
537 (skip-chars-forward ediff-whitespace))) 555 (skip-chars-forward ediff-whitespace)))
538 556
539 557 ;; This executes in control buffer and sets auto-save, visited file name, etc,
558 ;; in the merge buffer
559 (defun ediff-arrange-autosave-in-merge-jobs (merge-buffer-file)
560 (if (not ediff-merge-job)
561 ()
562 (if (stringp merge-buffer-file)
563 (setq ediff-autostore-merges t
564 ediff-merge-store-file merge-buffer-file))
565 (if (stringp ediff-merge-store-file)
566 (progn
567 ;; save before leaving ctl buffer
568 (setq merge-buffer-file ediff-merge-store-file)
569 (ediff-with-current-buffer ediff-buffer-C
570 (set-visited-file-name merge-buffer-file))))
571 (ediff-with-current-buffer ediff-buffer-C
572 (setq buffer-offer-save t) ; ask before killing buffer
573 ;; make sure the contents is auto-saved
574 (auto-save-mode 1))
575 ))
540 576
541 577
542 ;;; Commands for working with Ediff 578 ;;; Commands for working with Ediff
543 579
544 (defun ediff-update-diffs () 580 (defun ediff-update-diffs ()
1328 'B ediff-visible-bounds)) 1364 'B ediff-visible-bounds))
1329 (overl-C (ediff-get-value-according-to-buffer-type 1365 (overl-C (ediff-get-value-according-to-buffer-type
1330 'C ediff-visible-bounds)) 1366 'C ediff-visible-bounds))
1331 ) 1367 )
1332 (ediff-with-current-buffer ediff-buffer-A 1368 (ediff-with-current-buffer ediff-buffer-A
1333 (narrow-to-region 1369 (if (ediff-overlay-buffer overl-A)
1334 (ediff-overlay-start overl-A) (ediff-overlay-end overl-A))) 1370 (narrow-to-region
1371 (ediff-overlay-start overl-A) (ediff-overlay-end overl-A))))
1335 (ediff-with-current-buffer ediff-buffer-B 1372 (ediff-with-current-buffer ediff-buffer-B
1336 (narrow-to-region 1373 (if (ediff-overlay-buffer overl-B)
1337 (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))) 1374 (narrow-to-region
1375 (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))))
1338 1376
1339 (if ediff-3way-job 1377 (if (and ediff-3way-job (ediff-overlay-buffer overl-C))
1340 (ediff-with-current-buffer ediff-buffer-C 1378 (ediff-with-current-buffer ediff-buffer-C
1341 (narrow-to-region 1379 (narrow-to-region
1342 (ediff-overlay-start overl-C) (ediff-overlay-end overl-C)))) 1380 (ediff-overlay-start overl-C) (ediff-overlay-end overl-C))))
1343 ))) 1381 )))
1344 1382
2289 ediff-narrow-bounds) 2327 ediff-narrow-bounds)
2290 2328
2291 ;; restore buffer mode line id's in buffer-A/B/C 2329 ;; restore buffer mode line id's in buffer-A/B/C
2292 (let ((control-buffer ediff-control-buffer) 2330 (let ((control-buffer ediff-control-buffer)
2293 (meta-buffer ediff-meta-buffer) 2331 (meta-buffer ediff-meta-buffer)
2332 (session-number ediff-meta-session-number)
2294 ;; suitable working frame 2333 ;; suitable working frame
2295 (warp-frame (if (and (ediff-window-display-p) (eq ediff-grab-mouse t)) 2334 (warp-frame (if (and (ediff-window-display-p) (eq ediff-grab-mouse t))
2296 (cond ((window-live-p ediff-window-A) 2335 (cond ((window-live-p ediff-window-A)
2297 (window-frame ediff-window-A)) 2336 (window-frame ediff-window-A))
2298 ((window-live-p ediff-window-B) 2337 ((window-live-p ediff-window-B)
2353 (if reverse-default-keep-variants 2392 (if reverse-default-keep-variants
2354 (setq ediff-keep-variants (not ediff-keep-variants))) 2393 (setq ediff-keep-variants (not ediff-keep-variants)))
2355 (or ediff-keep-variants (ediff-janitor 'ask))) 2394 (or ediff-keep-variants (ediff-janitor 'ask)))
2356 2395
2357 (run-hooks 'ediff-quit-hook) 2396 (run-hooks 'ediff-quit-hook)
2358 (ediff-cleanup-meta-buffer meta-buffer) 2397 (ediff-update-meta-buffer meta-buffer nil session-number)
2359 2398
2360 ;; warp mouse into a working window 2399 ;; warp mouse into a working window
2361 (setq warp-frame ; if mouse is over a reasonable frame, use it 2400 (setq warp-frame ; if mouse is over a reasonable frame, use it
2362 (cond ((ediff-good-frame-under-mouse)) 2401 (cond ((ediff-good-frame-under-mouse))
2363 (t warp-frame))) 2402 (t warp-frame)))
2366 warp-frame 2405 warp-frame
2367 (frame-selected-window warp-frame)) 2406 (frame-selected-window warp-frame))
2368 2 1)) 2407 2 1))
2369 2408
2370 (if (ediff-buffer-live-p meta-buffer) 2409 (if (ediff-buffer-live-p meta-buffer)
2371 (ediff-show-meta-buffer meta-buffer)) 2410 (ediff-show-meta-buffer meta-buffer session-number))
2372 )) 2411 ))
2373 2412
2374 ;; Returns frame under mouse, if this frame is not a minibuffer 2413 ;; Returns frame under mouse, if this frame is not a minibuffer
2375 ;; frame. Otherwise: nil 2414 ;; frame. Otherwise: nil
2376 (defun ediff-good-frame-under-mouse () 2415 (defun ediff-good-frame-under-mouse ()
2389 nil 2428 nil
2390 frame))) 2429 frame)))
2391 2430
2392 2431
2393 (defun ediff-delete-temp-files () 2432 (defun ediff-delete-temp-files ()
2394 (if (stringp ediff-temp-file-A) 2433 (if (and (stringp ediff-temp-file-A) (file-exists-p ediff-temp-file-A))
2395 (delete-file ediff-temp-file-A)) 2434 (delete-file ediff-temp-file-A))
2396 (if (stringp ediff-temp-file-B) 2435 (if (and (stringp ediff-temp-file-B) (file-exists-p ediff-temp-file-B))
2397 (delete-file ediff-temp-file-B)) 2436 (delete-file ediff-temp-file-B))
2398 (if (stringp ediff-temp-file-C) 2437 (if (and (stringp ediff-temp-file-C) (file-exists-p ediff-temp-file-C))
2399 (delete-file ediff-temp-file-C))) 2438 (delete-file ediff-temp-file-C)))
2400 2439
2401 2440
2402 ;; Kill control buffer, other auxiliary Ediff buffers. 2441 ;; Kill control buffer, other auxiliary Ediff buffers.
2403 ;; Leave one of the frames split between buffers A/B/C 2442 ;; Leave one of the frames split between buffers A/B/C
2536 (progn 2575 (progn
2537 (write-region (point-min) (point-max) file) 2576 (write-region (point-min) (point-max) file)
2538 (if show-file 2577 (if show-file
2539 (progn 2578 (progn
2540 (message "Merge buffer saved in: %s" file) 2579 (message "Merge buffer saved in: %s" file)
2580 (set-buffer-modified-p nil)
2541 (sit-for 2))) 2581 (sit-for 2)))
2542 (if (and 2582 (if (and
2543 (not save-and-continue) 2583 (not save-and-continue)
2544 (y-or-n-p "Merge buffer saved in file. Now kill the buffer? ")) 2584 (y-or-n-p "Merge buffer saved in file. Now kill the buffer? "))
2545 (ediff-kill-buffer-carefully buf)))))) 2585 (ediff-kill-buffer-carefully buf))))))