comparison lisp/ediff-wind.el @ 42602:633233bf2bbf

2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu> * viper-init.el (viper-cond-compile-for-xemacs-or-emacs): new macro that replaces viper-emacs-p and viper-xemacs-p in many cases. Used to reduce the number of warnings. * viper-cmd.el: use viper-cond-compile-for-xemacs-or-emacs. (viper-standard-value): moved here from viper.el. (viper-set-unread-command-events): moved to viper-util.el (viper-check-minibuffer-overlay): make sure viper-minibuffer-overlay is moved to cover the entire input field. * viper-util.el: use viper-cond-compile-for-xemacs-or-emacs. (viper-read-key-sequence, viper-set-unread-command-events, viper-char-symbol-sequence-p, viper-char-array-p): moved here. * viper-ex.el: use viper-cond-compile-for-xemacs-or-emacs. * viper-keym.el: use viper-cond-compile-for-xemacs-or-emacs. * viper-mous.el: use viper-cond-compile-for-xemacs-or-emacs. * viper-macs.el (viper-char-array-p, viper-char-symbol-sequence-p, viper-event-vector-p): moved to viper-util.el * viper.el (viper-standard-value): moved to viper-cmd.el. Use viper-cond-compile-for-xemacs-or-emacs. * ediff-help.el: use ediff-cond-compile-for-xemacs-or-emacs. * ediff-hook.el: use ediff-cond-compile-for-xemacs-or-emacs. * ediff-init.el (ediff-cond-compile-for-xemacs-or-emacs): new macro designed to be used in many places where ediff-emacs-p or ediff-xemacs-p was previously used. Reduces the number of warnings. Use ediff-cond-compile-for-xemacs-or-emacs in many places in lieue of ediff-xemacs-p. (ediff-make-current-diff-overlay, ediff-highlight-diff-in-one-buffer, ediff-convert-fine-diffs-to-overlays, ediff-empty-diff-region-p, ediff-whitespace-diff-region-p, ediff-get-region-contents): moved to ediff-util.el. (ediff-event-key): moved here. * ediff-merge.el: got rid of unreferenced variables. * ediff-mult.el: use ediff-cond-compile-for-xemacs-or-emacs. * ediff-util.el: use ediff-cond-compile-for-xemacs-or-emacs. (ediff-cleanup-mess): improved the way windows are set up after quitting ediff. (ediff-janitor): use ediff-dispose-of-variant-according-to-user. (ediff-dispose-of-variant-according-to-user): new function designed to be smarter and also understands indirect buffers. (ediff-highlight-diff-in-one-buffer, ediff-unhighlight-diff-in-one-buffer, ediff-unhighlight-diffs-totally-in-one-buffer, ediff-highlight-diff, ediff-highlight-diff, ediff-unhighlight-diff, ediff-unhighlight-diffs-totally, ediff-empty-diff-region-p, ediff-whitespace-diff-region-p, ediff-get-region-contents, ediff-make-current-diff-overlay): moved here. (ediff-format-bindings-of): new function by Hannu Koivisto <azure@iki.fi>. (ediff-setup): make sure the merge buffer is always widened and modifiable. (ediff-write-merge-buffer-and-maybe-kill): refuse to write the result of a merge into a file visited by another buffer. (ediff-arrange-autosave-in-merge-jobs): check if the merge file is visited by another buffer and ask to save/delete that buffer. (ediff-verify-file-merge-buffer): new function to do the above. * ediff-vers.el: load ediff-init.el at compile time. * ediff-wind.el: use ediff-cond-compile-for-xemacs-or-emacs. * ediff.el (ediff-windows, ediff-regions-wordwise, ediff-regions-linewise): use indirect buffers to improve robustness and make it possible to compare regions of the same buffer (even overlapping regions). (ediff-clone-buffer-for-region-comparison, ediff-clone-buffer-for-window-comparison): new functions. (ediff-files-internal): refuse to compare identical files. (ediff-regions-internal): get rid of the warning about comparing regions of the same buffer. * ediff-diff.el (ediff-convert-fine-diffs-to-overlays): moved here. Plus the following fixes courtesy of Dave Love: Doc fixes. (ediff-word-1): Use word class and move - to the front per regexp documentation. (ediff-wordify): Bind forward-word-function outside loop. (ediff-copy-to-buffer): Use insert-buffer-substring rather than consing buffer contents. (ediff-goto-word): Move syntax table setting outside loop.
author Michael Kifer <kifer@cs.stonybrook.edu>
date Tue, 08 Jan 2002 04:36:01 +0000
parents 3ce98f3e0608
children 69c91aaa067a
comparison
equal deleted inserted replaced
42601:ddd4802ff361 42602:633233bf2bbf
1 ;;; ediff-wind.el --- window manipulation utilities 1 ;;; ediff-wind.el --- window manipulation utilities
2 2
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. 3 ;; Copyright (C) 1994, 95, 96, 97, 2000, 01, 02 Free Software Foundation, Inc.
4 4
5 ;; Author: Michael Kifer <kifer@cs.sunysb.edu> 5 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
6 6
7 ;; This file is part of GNU Emacs. 7 ;; This file is part of GNU Emacs.
8 8
9 ;; GNU Emacs is free software; you can redistribute it and/or modify 9 ;; GNU Emacs is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by 10 ;; it under the terms of the GNU General Public License as published by
34 (defvar left-toolbar-height) 34 (defvar left-toolbar-height)
35 (defvar right-toolbar-height) 35 (defvar right-toolbar-height)
36 (defvar left-toolbar-width) 36 (defvar left-toolbar-width)
37 (defvar right-toolbar-width) 37 (defvar right-toolbar-width)
38 (defvar default-menubar) 38 (defvar default-menubar)
39 (defvar top-gutter)
39 (defvar frame-icon-title-format) 40 (defvar frame-icon-title-format)
40 (defvar ediff-diff-status) 41 (defvar ediff-diff-status)
41 (defvar ediff-emacs-p) 42 (defvar ediff-emacs-p)
42 43
43 (eval-when-compile 44 (eval-when-compile
269 (while (not (ediff-mouse-event-p (setq event (ediff-read-event)))) 270 (while (not (ediff-mouse-event-p (setq event (ediff-read-event))))
270 (if (sit-for 1) ; if sequence of events, wait till the final word 271 (if (sit-for 1) ; if sequence of events, wait till the final word
271 (beep 1)) 272 (beep 1))
272 (message "Please click on Window %d " wind-number)) 273 (message "Please click on Window %d " wind-number))
273 (ediff-read-event) ; discard event 274 (ediff-read-event) ; discard event
274 (setq wind (if ediff-xemacs-p 275 (setq wind (ediff-cond-compile-for-xemacs-or-emacs
275 (event-window event) 276 (event-window event) ; xemacs
276 (posn-window (event-start event)))) 277 (posn-window (event-start event)) ; emacs
278 )
279 )
277 )) 280 ))
278 281
279 282
280 ;; Select the lowest window on the frame. 283 ;; Select the lowest window on the frame.
281 (defun ediff-select-lowest-window () 284 (defun ediff-select-lowest-window ()
282 (if ediff-xemacs-p 285 (ediff-cond-compile-for-xemacs-or-emacs
283 (select-window (frame-lowest-window)) 286 (select-window (frame-lowest-window)) ; xemacs
284 (let* ((lowest-window (selected-window)) 287 ;; emacs
285 (bottom-edge (car (cdr (cdr (cdr (window-edges)))))) 288 (let* ((lowest-window (selected-window))
286 (last-window (save-excursion 289 (bottom-edge (car (cdr (cdr (cdr (window-edges))))))
287 (other-window -1) (selected-window))) 290 (last-window (save-excursion
288 (window-search t)) 291 (other-window -1) (selected-window)))
289 (while window-search 292 (window-search t))
290 (let* ((this-window (next-window)) 293 (while window-search
291 (next-bottom-edge 294 (let* ((this-window (next-window))
292 (car (cdr (cdr (cdr (window-edges this-window))))))) 295 (next-bottom-edge
293 (if (< bottom-edge next-bottom-edge) 296 (car (cdr (cdr (cdr (window-edges this-window)))))))
294 (progn 297 (if (< bottom-edge next-bottom-edge)
295 (setq bottom-edge next-bottom-edge) 298 (progn
296 (setq lowest-window this-window))) 299 (setq bottom-edge next-bottom-edge)
297 300 (setq lowest-window this-window)))
298 (select-window this-window) 301
299 (if (eq last-window this-window) 302 (select-window this-window)
300 (progn 303 (if (eq last-window this-window)
301 (select-window lowest-window) 304 (progn
302 (setq window-search nil)))))))) 305 (select-window lowest-window)
306 (setq window-search nil))))))
307 ))
303 308
304 309
305 ;;; Common window setup routines 310 ;;; Common window setup routines
306 311
307 ;; Set up the window configuration. If POS is given, set the points to 312 ;; Set up the window configuration. If POS is given, set the points to
843 (while (and (not (memq (selected-window) seen-windows)) 848 (while (and (not (memq (selected-window) seen-windows))
844 (or 849 (or
845 (ediff-frame-has-dedicated-windows (selected-frame)) 850 (ediff-frame-has-dedicated-windows (selected-frame))
846 (ediff-frame-iconified-p (selected-frame)) 851 (ediff-frame-iconified-p (selected-frame))
847 ;; skip small windows 852 ;; skip small windows
848 (< (window-height (selected-window)) 853 (< (frame-height (selected-frame))
849 (* 3 window-min-height)) 854 (* 3 window-min-height))
850 (if ok-unsplittable 855 (if ok-unsplittable
851 nil 856 nil
852 (ediff-frame-unsplittable-p (selected-frame))))) 857 (ediff-frame-unsplittable-p (selected-frame)))))
853 ;; remember where started 858 ;; remember where started
894 ctl-frame old-ctl-frame lines 899 ctl-frame old-ctl-frame lines
895 ;; user-grabbed-mouse 900 ;; user-grabbed-mouse
896 fheight fwidth adjusted-parameters) 901 fheight fwidth adjusted-parameters)
897 902
898 (ediff-with-current-buffer ctl-buffer 903 (ediff-with-current-buffer ctl-buffer
899 (if ediff-xemacs-p (set-buffer-menubar nil)) 904 (ediff-cond-compile-for-xemacs-or-emacs
905 (set-buffer-menubar nil) ; xemacs
906 nil ; emacs
907 )
900 ;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse)) 908 ;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse))
901 (run-hooks 'ediff-before-setup-control-frame-hook)) 909 (run-hooks 'ediff-before-setup-control-frame-hook))
902 910
903 (setq old-ctl-frame (ediff-with-current-buffer ctl-buffer ediff-control-frame)) 911 (setq old-ctl-frame (ediff-with-current-buffer ctl-buffer ediff-control-frame))
904 (ediff-with-current-buffer ctl-buffer 912 (ediff-with-current-buffer ctl-buffer
906 old-ctl-frame 914 old-ctl-frame
907 (make-frame ediff-control-frame-parameters)) 915 (make-frame ediff-control-frame-parameters))
908 ediff-control-frame ctl-frame) 916 ediff-control-frame ctl-frame)
909 ;; protect against undefined face-attribute 917 ;; protect against undefined face-attribute
910 (condition-case nil 918 (condition-case nil
911 (when (and ediff-emacs-p (face-attribute 'mode-line :box)) 919 (ediff-cond-compile-for-xemacs-or-emacs
912 (set-face-attribute 'mode-line ctl-frame :box nil)) 920 nil ; xemacs
921 (when (face-attribute 'mode-line :box)
922 (set-face-attribute 'mode-line ctl-frame :box nil))
923 )
913 (error)) 924 (error))
914 ) 925 )
915 926
916 (setq ctl-frame-iconified-p (ediff-frame-iconified-p ctl-frame)) 927 (setq ctl-frame-iconified-p (ediff-frame-iconified-p ctl-frame))
917 (select-frame ctl-frame) 928 (select-frame ctl-frame)
953 (cons '(auto-raise . nil) adjusted-parameters))) 964 (cons '(auto-raise . nil) adjusted-parameters)))
954 965
955 ;; In XEmacs, buffer menubar needs to be killed before frame parameters 966 ;; In XEmacs, buffer menubar needs to be killed before frame parameters
956 ;; are changed. 967 ;; are changed.
957 (if (ediff-has-toolbar-support-p) 968 (if (ediff-has-toolbar-support-p)
958 (progn 969 (ediff-cond-compile-for-xemacs-or-emacs
959 (set-specifier top-toolbar-height (list ctl-frame 2)) 970 (progn ; xemacs
960 (sit-for 0) 971 (set-specifier top-toolbar-height (list ctl-frame 2))
961 (set-specifier top-toolbar-height (list ctl-frame 0)) 972 (set-specifier top-gutter (list ctl-frame nil))
962 ;;(set-specifier bottom-toolbar-height (list ctl-frame 0)) 973 (sit-for 0)
963 (set-specifier left-toolbar-width (list ctl-frame 0)) 974 (set-specifier top-toolbar-height (list ctl-frame 0))
964 (set-specifier right-toolbar-width (list ctl-frame 0)) 975 ;;(set-specifier bottom-toolbar-height (list ctl-frame 0))
965 )) 976 (set-specifier left-toolbar-width (list ctl-frame 0))
977 (set-specifier right-toolbar-width (list ctl-frame 0))
978 )
979 nil ; emacs
980 )
981 )
966 982
967 ;; Under OS/2 (emx) we have to call modify frame parameters twice, in order 983 ;; Under OS/2 (emx) we have to call modify frame parameters twice, in order
968 ;; to make sure that at least once we do it for non-iconified frame. If 984 ;; to make sure that at least once we do it for non-iconified frame. If
969 ;; appears that in the OS/2 port of Emacs, one can't modify frame 985 ;; appears that in the OS/2 port of Emacs, one can't modify frame
970 ;; parameters of iconified frames. As a precaution, we do likewise for 986 ;; parameters of iconified frames. As a precaution, we do likewise for
1016 (or (eq this-command 'ediff-quit) 1032 (or (eq this-command 'ediff-quit)
1017 (not (eq ediff-grab-mouse t))))) 1033 (not (eq ediff-grab-mouse t)))))
1018 1034
1019 (if ediff-xemacs-p 1035 (if ediff-xemacs-p
1020 (ediff-with-current-buffer ctl-buffer 1036 (ediff-with-current-buffer ctl-buffer
1021 (if ediff-xemacs-p 1037 (ediff-cond-compile-for-xemacs-or-emacs
1022 (make-local-hook 'select-frame-hook)) 1038 (make-local-hook 'select-frame-hook) ; xemacs
1039 nil ; emacs
1040 )
1023 (add-hook 1041 (add-hook
1024 'select-frame-hook 'ediff-xemacs-select-frame-hook nil 'local) 1042 'select-frame-hook 'ediff-xemacs-select-frame-hook nil 'local)
1025 )) 1043 ))
1026 1044
1027 (ediff-with-current-buffer ctl-buffer 1045 (ediff-with-current-buffer ctl-buffer
1031 1049
1032 (defun ediff-destroy-control-frame (ctl-buffer) 1050 (defun ediff-destroy-control-frame (ctl-buffer)
1033 (ediff-with-current-buffer ctl-buffer 1051 (ediff-with-current-buffer ctl-buffer
1034 (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame)) 1052 (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
1035 (let ((ctl-frame ediff-control-frame)) 1053 (let ((ctl-frame ediff-control-frame))
1036 (if ediff-xemacs-p 1054 (ediff-cond-compile-for-xemacs-or-emacs
1037 (set-buffer-menubar default-menubar)) 1055 (set-buffer-menubar default-menubar) ; xemacs
1056 nil ; emacs
1057 )
1038 (setq ediff-control-frame nil) 1058 (setq ediff-control-frame nil)
1039 (delete-frame ctl-frame) 1059 (delete-frame ctl-frame)
1040 ))) 1060 )))
1041 (ediff-skip-unsuitable-frames) 1061 (ediff-skip-unsuitable-frames)
1042 ;;(ediff-reset-mouse nil) 1062 ;;(ediff-reset-mouse nil)