comparison lisp/ediff/ediff-util.el @ 187:b405438285a2 r20-3b20

Import from CVS: tag r20-3b20
author cvs
date Mon, 13 Aug 2007 09:56:28 +0200
parents 3d6bfa290dbd
children acd284d43ca1
comparison
equal deleted inserted replaced
186:24ac94803b48 187:b405438285a2
686 (defun ediff-recenter (&optional no-rehighlight) 686 (defun ediff-recenter (&optional no-rehighlight)
687 "Bring the highlighted region of all buffers being compared into view. 687 "Bring the highlighted region of all buffers being compared into view.
688 Reestablish the default three-window display." 688 Reestablish the default three-window display."
689 (interactive) 689 (interactive)
690 (ediff-barf-if-not-control-buffer) 690 (ediff-barf-if-not-control-buffer)
691
692 ;; ;; No longer needed: XEmacs has surrogate minibuffers now.
693 ;; (if ediff-xemacs-p (setq synchronize-minibuffers t))
694
695 (let (buffer-read-only) 691 (let (buffer-read-only)
696 (if (and (ediff-buffer-live-p ediff-buffer-A) 692 (if (and (ediff-buffer-live-p ediff-buffer-A)
697 (ediff-buffer-live-p ediff-buffer-B) 693 (ediff-buffer-live-p ediff-buffer-B)
698 (or (not ediff-3way-job) 694 (or (not ediff-3way-job)
699 (ediff-buffer-live-p ediff-buffer-C))) 695 (ediff-buffer-live-p ediff-buffer-C)))
2357 (run-hooks 'ediff-quit-hook) 2353 (run-hooks 'ediff-quit-hook)
2358 (ediff-cleanup-meta-buffer meta-buffer) 2354 (ediff-cleanup-meta-buffer meta-buffer)
2359 2355
2360 ;; warp mouse into a working window 2356 ;; warp mouse into a working window
2361 (setq warp-frame ; if mouse is over a reasonable frame, use it 2357 (setq warp-frame ; if mouse is over a reasonable frame, use it
2362 (cond ((and ediff-xemacs-p (window-live-p (car (mouse-position)))) 2358 (cond ((ediff-good-frame-under-mouse))
2363 (window-frame (car (mouse-position))))
2364 ((frame-live-p (car (mouse-position)))
2365 (car (mouse-position)))
2366 (t warp-frame))) 2359 (t warp-frame)))
2367 (if (frame-live-p warp-frame) 2360 (if (frame-live-p warp-frame)
2368 (set-mouse-position (if ediff-emacs-p 2361 (set-mouse-position (if ediff-emacs-p
2369 warp-frame 2362 warp-frame
2370 (frame-selected-window warp-frame)) 2363 (frame-selected-window warp-frame))
2371 2 1)) 2364 2 1))
2372 2365
2373 (if (ediff-buffer-live-p meta-buffer) 2366 (if (ediff-buffer-live-p meta-buffer)
2374 (ediff-show-meta-buffer meta-buffer)) 2367 (ediff-show-meta-buffer meta-buffer))
2375 )) 2368 ))
2369
2370 ;; Returns frame under mouse, if this frame is not a minibuffer
2371 ;; frame. Otherwise: nil
2372 (defun ediff-good-frame-under-mouse ()
2373 (let ((frame-or-win (car (mouse-position)))
2374 (buf-name "")
2375 frame obj-ok)
2376 (setq obj-ok
2377 (if ediff-emacs-p
2378 (frame-live-p frame-or-win)
2379 (window-live-p frame-or-win)))
2380 (if obj-ok
2381 (setq frame (if ediff-emacs-p frame-or-win (window-frame frame-or-win))
2382 buf-name
2383 (buffer-name (window-buffer (frame-selected-window frame)))))
2384 (if (string-match "Minibuf" buf-name)
2385 nil
2386 frame)))
2376 2387
2377 2388
2378 (defun ediff-delete-temp-files () 2389 (defun ediff-delete-temp-files ()
2379 (if (stringp ediff-temp-file-A) 2390 (if (stringp ediff-temp-file-A)
2380 (delete-file ediff-temp-file-A)) 2391 (delete-file ediff-temp-file-A))
2917 (erase-buffer)) 2928 (erase-buffer))
2918 (revert-buffer t t)) 2929 (revert-buffer t t))
2919 (error "Buffer out of sync for file %s" buffer-file-name)))) 2930 (error "Buffer out of sync for file %s" buffer-file-name))))
2920 2931
2921 2932
2933 (defun ediff-file-compressed-p (file)
2934 (require 'jka-compr)
2935 (string-match (jka-compr-build-file-regexp) file))
2936
2937 (defun ediff-filename-magic-p (file)
2938 (or (ediff-file-compressed-p file)
2939 (ediff-file-remote-p file)))
2940
2941
2922 (defun ediff-save-buffer (arg) 2942 (defun ediff-save-buffer (arg)
2923 "Safe way of saving buffers A, B, C, and the diff output. 2943 "Safe way of saving buffers A, B, C, and the diff output.
2924 `wa' saves buffer A, `wb' saves buffer B, `wc' saves buffer C, 2944 `wa' saves buffer A, `wb' saves buffer B, `wc' saves buffer C,
2925 and `wd' saves the diff output. 2945 and `wd' saves the diff output.
2926 2946
3313 3333
3314 ;; Like other-buffer, but prefers visible buffers and ignores temporary or 3334 ;; Like other-buffer, but prefers visible buffers and ignores temporary or
3315 ;; other insignificant buffers (those beginning with "^[ *]"). 3335 ;; other insignificant buffers (those beginning with "^[ *]").
3316 ;; Gets one arg--buffer name or a list of buffer names (it won't return 3336 ;; Gets one arg--buffer name or a list of buffer names (it won't return
3317 ;; these buffers). 3337 ;; these buffers).
3318 (defun ediff-other-buffer (buff) 3338 (defun ediff-other-buffer (buff-lst)
3319 (if (not (listp buff)) (setq buff (list buff))) 3339 (or (listp buff-lst) (setq buff-lst (list buff-lst)))
3320 (let* ((frame-buffers (buffer-list)) 3340 (let* ((frame-buffers (buffer-list))
3341 (buff-name-list
3342 (mapcar
3343 (function (lambda (b)
3344 (cond ((stringp b) b)
3345 ((bufferp b) (buffer-name b)))))
3346 buff-lst))
3321 (significant-buffers 3347 (significant-buffers
3322 (mapcar 3348 (mapcar
3323 (function (lambda (x) 3349 (function (lambda (x)
3324 (cond ((member (buffer-name x) buff) 3350 (cond ((member (buffer-name x) buff-name-list) nil)
3325 nil) 3351 ((not (ediff-get-visible-buffer-window x)) nil)
3326 ((not (ediff-get-visible-buffer-window x)) 3352 ((string-match "^[ *]" (buffer-name x)) nil)
3327 nil) 3353 ((memq (ediff-with-current-buffer x major-mode)
3328 ((string-match "^ " (buffer-name x)) 3354 '(dired-mode))
3329 nil) 3355 nil)
3330 (t x)))) 3356 (t x))))
3331 frame-buffers)) 3357 frame-buffers))
3332 (buffers (delq nil significant-buffers)) 3358 (buffers (delq nil significant-buffers))
3333 less-significant-buffers) 3359 less-significant-buffers)
3337 ((setq less-significant-buffers 3363 ((setq less-significant-buffers
3338 (delq nil 3364 (delq nil
3339 (mapcar 3365 (mapcar
3340 (function 3366 (function
3341 (lambda (x) 3367 (lambda (x)
3342 (cond ((member (buffer-name x) buff) nil) 3368 (cond ((member (buffer-name x) buff-name-list) nil)
3343 ((string-match "^[ *]" (buffer-name x)) nil) 3369 ((string-match "^[ *]" (buffer-name x)) nil)
3370 ((memq
3371 (ediff-with-current-buffer x major-mode)
3372 '(dired-mode))
3373 nil)
3344 (t x)))) 3374 (t x))))
3345 frame-buffers))) 3375 frame-buffers)))
3346 (car less-significant-buffers)) 3376 (car less-significant-buffers))
3347 (t (other-buffer (current-buffer)))) 3377 (t (other-buffer (current-buffer))))
3348 )) 3378 ))