annotate lisp/ediff-wind.el @ 20279:69a6030e443a

(kill-region): Detect read-only text by getting an error trying to delete it. Handle the cases where we can, and can't, get the killed text from the undo list with much the same code.
author Karl Heuer <kwzh@gnu.org>
date Wed, 19 Nov 1997 21:36:56 +0000
parents f90d40b0bff5
children f7e788ea680b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 ;;; ediff-wind.el --- window manipulation utilities
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13948
diff changeset
2
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5 ;; Author: Michael Kifer <kifer@cs.sunysb.edu>
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 ;; This file is part of GNU Emacs.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 ;; it under the terms of the GNU General Public License as published by
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
12 ;; any later version.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14 ;; GNU Emacs is distributed in the hope that it will be useful,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 ;; GNU General Public License for more details.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
18
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13948
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13948
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13948
diff changeset
22 ;; Boston, MA 02111-1307, USA.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
23
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13948
diff changeset
24 ;;; Code:
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
25
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
26 (provide 'ediff-wind)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
28 ;; Compiler pacifier
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
29 (defvar icon-title-format)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
30 (defvar top-toolbar-height)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
31 (defvar bottom-toolbar-height)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
32 (defvar left-toolbar-height)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
33 (defvar right-toolbar-height)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
34 (defvar left-toolbar-width)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
35 (defvar right-toolbar-width)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
36 (defvar default-menubar)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
37 (defvar frame-icon-title-format)
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
38 (defvar ediff-diff-status)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
39
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
40 (eval-when-compile
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
41 (let ((load-path (cons (expand-file-name ".") load-path)))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
42 (or (featurep 'ediff-init)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
43 (load "ediff-init.el" nil nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
44 (or (featurep 'ediff-util)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
45 (load "ediff-util.el" nil nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
46 (or (featurep 'ediff-help)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
47 (load "ediff-help.el" nil nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
48 (or (featurep 'ediff-tbar)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
49 (load "ediff-tbar.el" 'noerror nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
50 ))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
51 ;; end pacifier
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
52
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
53 (require 'ediff-init)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
55 ;; be careful with ediff-tbar
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
56 (if ediff-xemacs-p
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
57 (condition-case nil
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
58 (require 'ediff-tbar)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
59 (error
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
60 (defun ediff-compute-toolbar-width () 0)))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
61 (defun ediff-compute-toolbar-width () 0))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
62
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
63 (defgroup ediff-window nil
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
64 "Ediff window manipulation"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
65 :prefix "ediff-"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
66 :group 'ediff
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
67 :group 'frames)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
68
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
69
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
70 (defcustom ediff-window-setup-function (if (ediff-window-display-p)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
71 'ediff-setup-windows-multiframe
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
72 'ediff-setup-windows-plain)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
73 "*Function called to set up windows.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
74 Ediff provides a choice of two functions: ediff-setup-windows-plain, for
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
75 doing everything in one frame, and ediff-setup-windows-multiframe,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
76 which sets the control panel in a separate frame. Also, if the latter
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
77 function detects that one of the buffers A/B is seen in some other frame,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
78 it will try to keep that buffer in that frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
79
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
80 If you don't like the two functions provided---write your own one.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 The basic guidelines:
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
82 1. It should leave the control buffer current and the control window
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83 selected.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
84 2. It should set ediff-window-A, ediff-window-B, ediff-window-C,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
85 and ediff-control-window to contain window objects that display
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
86 the corresponding buffers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
87 3. It should accept the following arguments:
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
88 buffer-A, buffer-B, buffer-C, control-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
89 Buffer C may not be used in jobs that compare only two buffers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 If you plan to do something fancy, take a close look at how the two
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
91 provided functions are written."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
92 :type 'function
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
93 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
94
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 ;; indicates if we are in a multiframe setup
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
96 (ediff-defvar-local ediff-multiframe nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
97
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
98 ;; Share of the frame occupied by the merge window (buffer C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
99 (ediff-defvar-local ediff-merge-window-share 0.45 "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
100
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
101 ;; The control window.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
102 (ediff-defvar-local ediff-control-window nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
103 ;; Official window for buffer A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
104 (ediff-defvar-local ediff-window-A nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
105 ;; Official window for buffer B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
106 (ediff-defvar-local ediff-window-B nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
107 ;; Official window for buffer C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
108 (ediff-defvar-local ediff-window-C nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
109 ;; Ediff's window configuration.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
110 ;; Used to minimize the need to rearrange windows.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
111 (ediff-defvar-local ediff-window-config-saved "" "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
112
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
113 ;; Association between buff-type and ediff-window-*
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
114 (defconst ediff-window-alist
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
115 '((A . ediff-window-A)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
116 (?A . ediff-window-A)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
117 (B . ediff-window-B)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
118 (?B . ediff-window-B)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
119 (C . ediff-window-C)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
120 (?C . ediff-window-C)))
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
121
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
122
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
123 (defcustom ediff-split-window-function 'split-window-vertically
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
124 "*The function used to split the main window between buffer-A and buffer-B.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
125 You can set it to a horizontal split instead of the default vertical split
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
126 by setting this variable to `split-window-horizontally'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127 You can also have your own function to do fancy splits.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128 This variable has no effect when buffer-A/B are shown in different frames.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
129 In this case, Ediff will use those frames to display these buffers."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
130 :type 'function
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
131 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
132
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
133 (defcustom ediff-merge-split-window-function 'split-window-horizontally
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
134 "*The function used to split the main window between buffer-A and buffer-B.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
135 You can set it to a vertical split instead of the default horizontal split
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
136 by setting this variable to `split-window-vertically'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
137 You can also have your own function to do fancy splits.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
138 This variable has no effect when buffer-A/B/C are shown in different frames.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
139 In this case, Ediff will use those frames to display these buffers."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
140 :type 'function
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
141 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
142
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
143 (defconst ediff-control-frame-parameters
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
144 (list
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
145 '(name . "Ediff")
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
146 ;;'(unsplittable . t)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
147 '(minibuffer . nil)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
148 '(user-position . t) ; Emacs only
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
149 '(vertical-scroll-bars . nil) ; Emacs only
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
150 '(scrollbar-width . 0) ; XEmacs only
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
151 '(menu-bar-lines . 0) ; Emacs only
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
152 ;; don't lower and auto-raise
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
153 '(auto-lower . nil)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
154 '(auto-raise . t)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
155 ;; this blocks queries from window manager as to where to put
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
156 ;; ediff's control frame. we put the frame outside the display,
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
157 ;; so the initial frame won't jump all over the screen
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
158 (cons 'top (if (fboundp 'ediff-display-pixel-height)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
159 (1+ (ediff-display-pixel-height))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
160 3000))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
161 (cons 'left (if (fboundp 'ediff-display-pixel-width)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
162 (1+ (ediff-display-pixel-width))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
163 3000))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
164 )
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165 "Frame parameters for displaying Ediff Control Panel.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166 Do not specify width and height here. These are computed automatically.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
168 ;; position of the mouse; used to decide whether to warp the mouse into ctl
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
169 ;; frame
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
170 (ediff-defvar-local ediff-mouse-pixel-position nil "")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
171
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
172 ;; not used for now
13948
60556fda3e6f (ediff-mouse-pixel-threshold): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 13132
diff changeset
173 (defvar ediff-mouse-pixel-threshold 30
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
174 "If the user moves mouse more than this many pixels, Ediff won't warp mouse into control window.")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
175
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
176 (defcustom ediff-grab-mouse t
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
177 "*If t, Ediff will always grab the mouse and put it in the control frame.
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
178 If 'maybe, Ediff will do it sometimes, but not after operations that require
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
179 relatively long time. If nil, the mouse will be entirely user's
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
180 responsibility."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
181 :type 'boolean
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
182 :group 'ediff-window)
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
183
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
184 (defcustom ediff-control-frame-position-function 'ediff-make-frame-position
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185 "Function to call to determine the desired location for the control panel.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 Expects three parameters: the control buffer, the desired width and height
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187 of the control frame. It returns an association list
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
188 of the form \(\(top . <position>\) \(left . <position>\)\)"
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
189 :type 'function
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
190 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
192 (defcustom ediff-control-frame-upward-shift (if ediff-xemacs-p 42 14)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
193 "*The upward shift of control frame from the top of buffer A's frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
194 Measured in pixels.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
195 This is used by the default control frame positioning function,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
196 `ediff-make-frame-position'. This variable is provided for easy
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
197 customization of the default."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
198 :type 'integer
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
199 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
200
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
201 (defcustom ediff-narrow-control-frame-leftward-shift (if ediff-xemacs-p 7 3)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
202 "*The leftward shift of control frame from the right edge of buf A's frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203 Measured in characters.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
204 This is used by the default control frame positioning function,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
205 `ediff-make-frame-position' to adjust the position of the control frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
206 when it shows the short menu. This variable is provided for easy
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
207 customization of the default."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
208 :type 'integer
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
209 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
210
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
211 (defcustom ediff-wide-control-frame-rightward-shift 7
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
212 "*The rightward shift of control frame from the left edge of buf A's frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
213 Measured in characters.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
214 This is used by the default control frame positioning function,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
215 `ediff-make-frame-position' to adjust the position of the control frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
216 when it shows the full menu. This variable is provided for easy
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
217 customization of the default."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
218 :type 'integer
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
219 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
220
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
221
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
222 ;; Wide frame display
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
223
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
224 ;; t means Ediff is using wide display
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
225 (ediff-defvar-local ediff-wide-display-p nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
226 ;; keeps frame config for toggling wide display
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
227 (ediff-defvar-local ediff-wide-display-orig-parameters nil
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
228 "Frame parameters to be restored when the user wants to toggle the wide
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
229 display off.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
230 (ediff-defvar-local ediff-wide-display-frame nil
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
231 "Frame to be used for wide display.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
232 (ediff-defvar-local ediff-make-wide-display-function 'ediff-make-wide-display
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
233 "The value is a function that is called to create a wide display.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
234 The function is called without arguments. It should resize the frame in
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
235 which buffers A, B, and C are to be displayed, and it should save the old
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
236 frame parameters in `ediff-wide-display-orig-parameters'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
237 The variable `ediff-wide-display-frame' should be set to contain
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 the frame used for the wide display.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
239
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
240 ;; Frame used for the control panel in a windowing system.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 (ediff-defvar-local ediff-control-frame nil "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
243 (defcustom ediff-prefer-iconified-control-frame nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 "*If t, keep control panel iconified when help message is off.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 This has effect only on a windowing system.
13948
60556fda3e6f (ediff-mouse-pixel-threshold): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 13132
diff changeset
246 If t, hitting `?' to toggle control panel off iconifies it.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
248 This is only useful in Emacs and only for certain kinds of window managers,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
249 such as TWM and its derivatives, since the window manager must permit
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
250 keyboard input to go into icons. XEmacs completely ignores keyboard input
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
251 into icons, regardless of the window manager."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
252 :type 'boolean
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
253 :group 'ediff-window)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
254
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
255 ;;; Functions
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
256
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
257 (defun ediff-get-window-by-clicking (wind prev-wind wind-number)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
258 (let (event)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
259 (message
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 "Select windows by clicking. Please click on Window %d " wind-number)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
261 (while (not (ediff-mouse-event-p (setq event (ediff-read-event))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
262 (if (sit-for 1) ; if sequence of events, wait till the final word
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
263 (beep 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
264 (message "Please click on Window %d " wind-number))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 (ediff-read-event) ; discard event
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266 (setq wind (if ediff-xemacs-p
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
267 (event-window event)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
268 (posn-window (event-start event))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
269 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
270
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
271
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
272 ;; Select the lowest window on the frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
273 (defun ediff-select-lowest-window ()
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
274 (if ediff-xemacs-p
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
275 (select-window (frame-lowest-window))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
276 (let* ((lowest-window (selected-window))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
277 (bottom-edge (car (cdr (cdr (cdr (window-edges))))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
278 (last-window (save-excursion
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
279 (other-window -1) (selected-window)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
280 (window-search t))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
281 (while window-search
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
282 (let* ((this-window (next-window))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
283 (next-bottom-edge
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
284 (car (cdr (cdr (cdr (window-edges this-window)))))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
285 (if (< bottom-edge next-bottom-edge)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
286 (progn
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
287 (setq bottom-edge next-bottom-edge)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
288 (setq lowest-window this-window)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
289
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
290 (select-window this-window)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
291 (if (eq last-window this-window)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
292 (progn
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
293 (select-window lowest-window)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
294 (setq window-search nil))))))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297 ;;; Common window setup routines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 ;; Set up the window configuration. If POS is given, set the points to
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300 ;; the beginnings of the buffers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301 ;; When 3way comparison is added, this will have to choose the appropriate
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
302 ;; setup function based on ediff-job-name
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
303 (defun ediff-setup-windows (buffer-A buffer-B buffer-C control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304 ;; Make sure we are not in the minibuffer window when we try to delete
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
305 ;; all other windows.
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
306 (run-hooks 'ediff-before-setup-windows-hook)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 (if (eq (selected-window) (minibuffer-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
309
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
310 ;; in case user did a no-no on a tty
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
311 (or (ediff-window-display-p)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
312 (setq ediff-window-setup-function 'ediff-setup-windows-plain))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
313
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 (or (ediff-keep-window-config control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 (funcall
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
316 (ediff-with-current-buffer control-buffer ediff-window-setup-function)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317 buffer-A buffer-B buffer-C control-buffer))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
318 (run-hooks 'ediff-after-setup-windows-hook))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
320 ;; Just set up 3 windows.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 ;; Usually used without windowing systems
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322 ;; With windowing, we want to use dedicated frames.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323 (defun ediff-setup-windows-plain (buffer-A buffer-B buffer-C control-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
324 (ediff-with-current-buffer control-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 (setq ediff-multiframe nil))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 (if ediff-merge-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327 (ediff-setup-windows-plain-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 buffer-A buffer-B buffer-C control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329 (ediff-setup-windows-plain-compare
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330 buffer-A buffer-B buffer-C control-buffer)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 (defun ediff-setup-windows-plain-merge (buf-A buf-B buf-C control-buffer)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
333 ;; skip dedicated and unsplittable frames
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
334 (ediff-destroy-control-frame control-buffer)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
335 (let ((window-min-height 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337 merge-window-share merge-window-lines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338 wind-A wind-B wind-C)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
339 (ediff-with-current-buffer control-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340 (setq merge-window-share ediff-merge-window-share
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341 ;; this lets us have local versions of ediff-split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342 split-window-function ediff-split-window-function))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344 (split-window-vertically)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
345 (ediff-select-lowest-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 (ediff-setup-control-buffer control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348 ;; go to the upper window and split it betw A, B, and possibly C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349 (other-window 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350 (setq merge-window-lines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351 (max 2 (round (* (window-height) merge-window-share))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
355 ;; XEmacs used to have a lot of trouble with display
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
356 ;; It did't set things right unless we tell it to sit still
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
357 ;; 19.12 seems ok.
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
358 ;;(if ediff-xemacs-p (sit-for 0))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
359
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
360 (split-window-vertically (max 2 (- (window-height) merge-window-lines)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
361 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 (select-window wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 (funcall split-window-function)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
373
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
374 (ediff-with-current-buffer control-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 (setq ediff-window-A wind-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
376 ediff-window-B wind-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377 ediff-window-C wind-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379 (ediff-select-lowest-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 (ediff-setup-control-buffer control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
381 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
384 ;; This function handles all comparison jobs, including 3way jobs
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
385 (defun ediff-setup-windows-plain-compare (buf-A buf-B buf-C control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
386 ;; skip dedicated and unsplittable frames
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
387 (ediff-destroy-control-frame control-buffer)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
388 (let ((window-min-height 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
389 split-window-function wind-width-or-height
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
390 three-way-comparison
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
391 wind-A-start wind-B-start wind-A wind-B wind-C)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
392 (ediff-with-current-buffer control-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 (setq wind-A-start (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394 (ediff-get-value-according-to-buffer-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
395 'A ediff-narrow-bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 wind-B-start (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 (ediff-get-value-according-to-buffer-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
398 'B ediff-narrow-bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
399 ;; this lets us have local versions of ediff-split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400 split-window-function ediff-split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401 three-way-comparison ediff-3way-comparison-job))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
403 (split-window-vertically)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
404 (ediff-select-lowest-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
405 (ediff-setup-control-buffer control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
406
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
407 ;; go to the upper window and split it betw A, B, and possibly C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
408 (other-window 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
409 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
410 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
411 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
412 (setq wind-width-or-height
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 (/ (if (eq split-window-function 'split-window-vertically)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 (window-height wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 (window-width wind-A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416 3)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
418 ;; XEmacs used to have a lot of trouble with display
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
419 ;; It did't set things right unless we told it to sit still
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
420 ;; 19.12 seems ok.
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
421 ;;(if ediff-xemacs-p (sit-for 0))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
422
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423 (funcall split-window-function wind-width-or-height)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
424
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
425 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
426 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
427 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
428 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
429
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
431 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
432 (funcall split-window-function) ; equally
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433 (if (eq (selected-window) wind-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
435 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436 (setq wind-C (selected-window))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
438 (ediff-with-current-buffer control-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439 (setq ediff-window-A wind-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
440 ediff-window-B wind-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
441 ediff-window-C wind-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443 ;; It is unlikely that we will want to implement 3way window comparison.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 ;; So, only buffers A and B are used here.
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
445 (if ediff-windows-job
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447 (set-window-start wind-A wind-A-start)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
448 (set-window-start wind-B wind-B-start)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
449
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 (ediff-select-lowest-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
451 (ediff-setup-control-buffer control-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
452 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
453
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
455 ;; dispatch an appropriate window setup function
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
456 (defun ediff-setup-windows-multiframe (buf-A buf-B buf-C control-buf)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
457 (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
458 (setq ediff-multiframe t))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459 (if ediff-merge-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 (ediff-setup-windows-multiframe-merge buf-A buf-B buf-C control-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461 (ediff-setup-windows-multiframe-compare buf-A buf-B buf-C control-buf)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
462
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 (defun ediff-setup-windows-multiframe-merge (buf-A buf-B buf-C control-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464 ;;; Algorithm:
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
465 ;;; 1. Never use frames that have dedicated windows in them---it is bad to
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
466 ;;; destroy dedicated windows.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
467 ;;; 2. If A and B are in the same frame but C's frame is different--- use one
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
468 ;;; frame for A and B and use a separate frame for C.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
469 ;;; 3. If C's frame is non-existent, then: if the first suitable
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
470 ;;; non-dedicated frame is different from A&B's, then use it for C.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
471 ;;; Otherwise, put A,B, and C in one frame.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
472 ;;; 4. If buffers A, B, C are is separate frames, use them to display these
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
473 ;;; buffers.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
474
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
475 ;; Skip dedicated or iconified frames.
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
476 ;; Unsplittable frames are taken care of later.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
477 (ediff-skip-unsuitable-frames 'ok-unsplittable)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
479 (let* ((window-min-height 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
480 (wind-A (ediff-get-visible-buffer-window buf-A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
481 (wind-B (ediff-get-visible-buffer-window buf-B))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
482 (wind-C (ediff-get-visible-buffer-window buf-C))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
483 (frame-A (if wind-A (window-frame wind-A)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
484 (frame-B (if wind-B (window-frame wind-B)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
485 (frame-C (if wind-C (window-frame wind-C)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
486 ;; on wide display, do things in one frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
487 (force-one-frame
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
488 (ediff-with-current-buffer control-buf ediff-wide-display-p))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
489 ;; this lets us have local versions of ediff-split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
490 (split-window-function
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
491 (ediff-with-current-buffer control-buf ediff-split-window-function))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492 (orig-wind (selected-window))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
493 (orig-frame (selected-frame))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
494 (use-same-frame (or force-one-frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
495 ;; A and C must be in one frame
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
496 (eq frame-A (or frame-C orig-frame))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
497 ;; B and C must be in one frame
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 (eq frame-B (or frame-C orig-frame))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
499 ;; A or B is not visible
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
500 (not (frame-live-p frame-A))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
501 (not (frame-live-p frame-B))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
502 ;; A or B is not suitable for display
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
503 (not (ediff-window-ok-for-display wind-A))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
504 (not (ediff-window-ok-for-display wind-B))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
505 ;; A and B in the same frame, and no good frame
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
506 ;; for C
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
507 (and (eq frame-A frame-B)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
508 (not (frame-live-p frame-C)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
509 ))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
510 ;; use-same-frame-for-AB implies wind A and B are ok for display
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
511 (use-same-frame-for-AB (and (not use-same-frame)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512 (eq frame-A frame-B)))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
513 (merge-window-share (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
514 ediff-merge-window-share))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 merge-window-lines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516 designated-minibuffer-frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
517 done-A done-B done-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
518
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
519 ;; buf-A on its own
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
520 (if (and (window-live-p wind-A)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
521 (null use-same-frame) ; implies wind-A is suitable
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
522 (null use-same-frame-for-AB))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
523 (progn ; bug A on its own
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
524 ;; buffer buf-A is seen in live wind-A
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
525 (select-window wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
526 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
527 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
528 (setq done-A t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
529
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
530 ;; buf-B on its own
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
531 (if (and (window-live-p wind-B)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
532 (null use-same-frame) ; implies wind-B is suitable
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
533 (null use-same-frame-for-AB))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
534 (progn ; buf B on its own
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
535 ;; buffer buf-B is seen in live wind-B
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536 (select-window wind-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
537 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
538 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
539 (setq done-B t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
540
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541 ;; buf-C on its own
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
542 (if (and (window-live-p wind-C)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
543 (ediff-window-ok-for-display wind-C)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
544 (null use-same-frame)) ; buf C on its own
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
545 (progn
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
546 ;; buffer buf-C is seen in live wind-C
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
547 (select-window wind-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
548 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
549 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
550 (setq done-C t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
551
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
552 (if (and use-same-frame-for-AB ; implies wind A and B are suitable
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
553 (window-live-p wind-A))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554 (progn
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
555 ;; wind-A must already be displaying buf-A
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
556 (select-window wind-A)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
558 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
559
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 (funcall split-window-function)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
563 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 (setq done-A t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567 done-B t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
568
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569 (if use-same-frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
570 (let ((window-min-height 1))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
571 (if (and (eq frame-A frame-B)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
572 (eq frame-B frame-C)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
573 (frame-live-p frame-A))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
574 (select-frame frame-A)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
575 ;; avoid dedicated and non-splittable windows
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
576 (ediff-skip-unsuitable-frames))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
577 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578 (setq merge-window-lines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 (max 2 (round (* (window-height) merge-window-share))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
580 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 (split-window-vertically
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584 (max 2 (- (window-height) merge-window-lines)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
588 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
589
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
590 (select-window wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 (funcall split-window-function)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 (setq done-A t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 done-B t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600 done-C t)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
601 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
602
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
603 (or done-A ; Buf A to be set in its own frame,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
604 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
605 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
606 ;; Buf-A was not set up yet as it wasn't visible,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
607 ;; and use-same-frame = nil, use-same-frame-for-AB = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
608 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
609 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
610 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
611 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
612 ))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
613 (or done-B ; Buf B to be set in its own frame,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
614 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
615 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
616 ;; Buf-B was not set up yet as it wasn't visible
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
617 ;; and use-same-frame = nil, use-same-frame-for-AB = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
618 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
619 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
620 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
621 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
622 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
623
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
624 (or done-C ; Buf C to be set in its own frame,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
625 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
626 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
627 ;; Buf-C was not set up yet as it wasn't visible
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
628 ;; and use-same-frame = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
629 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
630 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
631 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
632 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
634
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
635 (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
636 (setq ediff-window-A wind-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
637 ediff-window-B wind-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
638 ediff-window-C wind-C)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
639 (setq frame-A (window-frame ediff-window-A)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
640 designated-minibuffer-frame
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
641 (window-frame (minibuffer-window frame-A))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
642
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
643 (ediff-setup-control-frame control-buf designated-minibuffer-frame)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
644 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
645
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
646
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647 ;; Window setup for all comparison jobs, including 3way comparisons
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
648 (defun ediff-setup-windows-multiframe-compare (buf-A buf-B buf-C control-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
649 ;;; Algorithm:
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
650 ;;; If a buffer is seen in a frame, use that frame for that buffer.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
651 ;;; If it is not seen, use the current frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
652 ;;; If both buffers are not seen, they share the current frame. If one
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
653 ;;; of the buffers is not seen, it is placed in the current frame (where
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
654 ;;; ediff started). If that frame is displaying the other buffer, it is
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
655 ;;; shared between the two buffers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
656 ;;; However, if we decide to put both buffers in one frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
657 ;;; and the selected frame isn't splittable, we create a new frame and
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
658 ;;; put both buffers there, event if one of this buffers is visible in
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
659 ;;; another frame.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
660
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
661 ;; Skip dedicated or iconified frames.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
662 ;; Unsplittable frames are taken care of later.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
663 (ediff-skip-unsuitable-frames 'ok-unsplittable)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
664
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
665 (let* ((window-min-height 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
666 (wind-A (ediff-get-visible-buffer-window buf-A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
667 (wind-B (ediff-get-visible-buffer-window buf-B))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
668 (wind-C (ediff-get-visible-buffer-window buf-C))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
669 (frame-A (if wind-A (window-frame wind-A)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
670 (frame-B (if wind-B (window-frame wind-B)))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
671 (frame-C (if wind-C (window-frame wind-C)))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
672 (ctl-frame-exists-p (ediff-with-current-buffer control-buf
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
673 (frame-live-p ediff-control-frame)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
674 ;; on wide display, do things in one frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
675 (force-one-frame
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
676 (ediff-with-current-buffer control-buf ediff-wide-display-p))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 ;; this lets us have local versions of ediff-split-window-function
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
678 (split-window-function
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
679 (ediff-with-current-buffer control-buf ediff-split-window-function))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 (three-way-comparison
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
681 (ediff-with-current-buffer control-buf ediff-3way-comparison-job))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
682 (orig-wind (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
683 (use-same-frame (or force-one-frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
684 (eq frame-A frame-B)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
685 (not (ediff-window-ok-for-display wind-A))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
686 (not (ediff-window-ok-for-display wind-B))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 (or (eq frame-A frame-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
689 (eq frame-B frame-C)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
690 (not (ediff-window-ok-for-display wind-C))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
691 (not (frame-live-p frame-A))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
692 (not (frame-live-p frame-B))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
693 (not (frame-live-p frame-C))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
694 (and (not (frame-live-p frame-B))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
695 (or ctl-frame-exists-p
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
696 (eq frame-A (selected-frame))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
697 (and (not (frame-live-p frame-A))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698 (or ctl-frame-exists-p
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
699 (eq frame-B (selected-frame))))))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
700 wind-A-start wind-B-start
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
701 designated-minibuffer-frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702 done-A done-B done-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
703
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
704 (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
705 (setq wind-A-start (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
706 (ediff-get-value-according-to-buffer-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
707 'A ediff-narrow-bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
708 wind-B-start (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
709 (ediff-get-value-according-to-buffer-type
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
710 'B ediff-narrow-bounds))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
711
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712 (if (and (window-live-p wind-A) (null use-same-frame)) ; buf-A on its own
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 (progn
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
714 ;; buffer buf-A is seen in live wind-A
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
715 (select-window wind-A) ; must be displaying buf-A
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
716 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 (setq done-A t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
719
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720 (if (and (window-live-p wind-B) (null use-same-frame)) ; buf B on its own
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
721 (progn
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
722 ;; buffer buf-B is seen in live wind-B
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
723 (select-window wind-B) ; must be displaying buf-B
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
724 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
725 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
726 (setq done-B t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
727
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
728 (if (and (window-live-p wind-C) (null use-same-frame)) ; buf C on its own
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
729 (progn
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
730 ;; buffer buf-C is seen in live wind-C
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
731 (select-window wind-C) ; must be displaying buf-C
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
732 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
733 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
734 (setq done-C t)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
735
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
736 (if use-same-frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
737 (let (wind-width-or-height) ; this affects 3way setups only
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
738 (if (and (eq frame-A frame-B) (frame-live-p frame-A))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
739 (select-frame frame-A)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
740 ;; avoid dedicated and non-splittable windows
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
741 (ediff-skip-unsuitable-frames))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
742 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
743 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
744 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
745
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
746 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
747 (setq wind-width-or-height
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
748 (/
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
749 (if (eq split-window-function 'split-window-vertically)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
750 (window-height wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
751 (window-width wind-A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
752 3)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
754 (funcall split-window-function wind-width-or-height)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
755 (if (eq (selected-window) wind-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
756 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
757 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
758 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
759
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
760 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
761 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
762 (funcall split-window-function) ; equally
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
763 (if (memq (selected-window) (list wind-A wind-B))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
764 (other-window 1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
765 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
766 (setq wind-C (selected-window))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
767 (setq done-A t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
768 done-B t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
769 done-C t)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
770 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
771
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
772 (or done-A ; Buf A to be set in its own frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
773 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
774 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
775 ;; Buf-A was not set up yet as it wasn't visible,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
776 ;; and use-same-frame = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
777 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
778 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
779 (switch-to-buffer buf-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
780 (setq wind-A (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
781 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
782 (or done-B ; Buf B to be set in its own frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
783 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
784 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
785 ;; Buf-B was not set up yet as it wasn't visible,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
786 ;; and use-same-frame = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
787 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
788 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
789 (switch-to-buffer buf-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
790 (setq wind-B (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
791 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
792
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
793 (if three-way-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
794 (or done-C ; Buf C to be set in its own frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
795 ;;; or it was set before because use-same-frame = 1
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
796 (progn
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
797 ;; Buf-C was not set up yet as it wasn't visible,
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
798 ;; and use-same-frame = nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
799 (select-window orig-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
800 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
801 (switch-to-buffer buf-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
802 (setq wind-C (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
803 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
804
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
805 (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
806 (setq ediff-window-A wind-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 ediff-window-B wind-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808 ediff-window-C wind-C)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
809
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
810 (setq frame-A (window-frame ediff-window-A)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
811 designated-minibuffer-frame
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
812 (window-frame (minibuffer-window frame-A))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
813
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
814 ;; It is unlikely that we'll implement a version of ediff-windows that
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
815 ;; would compare 3 windows at once. So, we don't use buffer C here.
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
816 (if ediff-windows-job
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
817 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
818 (set-window-start wind-A wind-A-start)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
819 (set-window-start wind-B wind-B-start)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
820
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
821 (ediff-setup-control-frame control-buf designated-minibuffer-frame)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
822 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
823
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
824 ;; skip unsplittable frames and frames that have dedicated windows.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 ;; create a new splittable frame if none is found
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
826 (defun ediff-skip-unsuitable-frames (&optional ok-unsplittable)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
827 (if (ediff-window-display-p)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
828 (let (last-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
829 (while (and (not (eq (selected-window) last-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 (or
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
831 (ediff-frame-has-dedicated-windows (selected-frame))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
832 (ediff-frame-iconified-p (selected-frame))
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
833 (< (frame-height (selected-frame))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
834 (* 3 window-min-height))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
835 (if ok-unsplittable
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
836 nil
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
837 (ediff-frame-unsplittable-p (selected-frame)))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 ;; remember where started
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
839 (or last-window (setq last-window (selected-window)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
840 ;; try new window
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
841 (other-window 1 t))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
842 (if (eq (selected-window) last-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
843 ;; fed up, no appropriate frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
844 (progn
12559
c4daa54a92fc (ediff-skip-unsuitable-frames): Use make-frame,
Karl Heuer <kwzh@gnu.org>
parents: 12399
diff changeset
845 (select-frame (make-frame '((unsplittable)))))))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
846
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
847 (defun ediff-frame-has-dedicated-windows (frame)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
848 (let ((cur-fr (selected-frame))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
849 ans)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
850 (select-frame frame)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
851 (walk-windows
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
852 (function (lambda (wind)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
853 (if (window-dedicated-p wind)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
854 (setq ans t))))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
855 'ignore-minibuffer
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
856 frame)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
857 (select-frame cur-fr)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
858 ans))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
859
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
860 ;; window is ok, if it is only one window on the frame, not counting the
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
861 ;; minibuffer, or none of the frame's windows is dedicated.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
862 ;; The idea is that it is bad to destroy dedicated windows while creating an
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
863 ;; ediff window setup
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
864 (defun ediff-window-ok-for-display (wind)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
865 (and
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
866 (window-live-p wind)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
867 (or
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
868 ;; only one window
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
869 (eq wind (next-window wind 'ignore-minibuffer (window-frame wind)))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
870 ;; none is dedicated
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
871 (not (ediff-frame-has-dedicated-windows (window-frame wind)))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
872 )))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
873
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
874 ;; Prepare or refresh control frame
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
875 (defun ediff-setup-control-frame (ctl-buffer designated-minibuffer-frame)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
876 (let ((window-min-height 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
877 ctl-frame-iconified-p dont-iconify-ctl-frame deiconify-ctl-frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
878 ctl-frame old-ctl-frame lines
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
879 ;; user-grabbed-mouse
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
880 fheight fwidth adjusted-parameters)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
881
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
882 (ediff-with-current-buffer ctl-buffer
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
883 (if ediff-xemacs-p (set-buffer-menubar nil))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
884 ;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
885 (run-hooks 'ediff-before-setup-control-frame-hook))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
886
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
887 (setq old-ctl-frame (ediff-with-current-buffer ctl-buffer ediff-control-frame))
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
888 (ediff-with-current-buffer ctl-buffer
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
889 (setq ctl-frame (if (frame-live-p old-ctl-frame)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
890 old-ctl-frame
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
891 (make-frame ediff-control-frame-parameters))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
892 ediff-control-frame ctl-frame))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
893
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
894 (setq ctl-frame-iconified-p (ediff-frame-iconified-p ctl-frame))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
895 (select-frame ctl-frame)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
896 (if (window-dedicated-p (selected-window))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
897 ()
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898 (delete-other-windows)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899 (switch-to-buffer ctl-buffer))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
900
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
901 ;; must be before ediff-setup-control-buffer
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
902 ;; just a precaution--we should be in ctl-buffer already
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
903 (ediff-with-current-buffer ctl-buffer
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
904 (make-local-variable 'frame-title-format)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
905 (make-local-variable 'frame-icon-title-format) ; XEmacs
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
906 (make-local-variable 'icon-title-format)) ; Emacs
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
908 (ediff-setup-control-buffer ctl-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 (setq dont-iconify-ctl-frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
910 (not (string= ediff-help-message ediff-brief-help-message)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 (setq deiconify-ctl-frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 (and (eq this-command 'ediff-toggle-help)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 dont-iconify-ctl-frame))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 ;; 1 more line for the modeline
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
916 (setq lines (1+ (count-lines (point-min) (point-max)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 fheight lines
16766
beb94a5271e2 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
918 fwidth (max (+ (ediff-help-message-line-length) 2)
beb94a5271e2 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
919 (ediff-compute-toolbar-width))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
920 adjusted-parameters
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
921 (list
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
922 ;; possibly change surrogate minibuffer
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
923 (cons 'minibuffer
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
924 (minibuffer-window
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
925 designated-minibuffer-frame))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
926 (cons 'width fwidth)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
927 (cons 'height fheight))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
928 )
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
929 (if ediff-use-long-help-message
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
930 (setq adjusted-parameters
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
931 (cons '(auto-raise . nil) adjusted-parameters)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
932
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
933 ;; In XEmacs, buffer menubar needs to be killed before frame parameters
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
934 ;; are changed.
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
935 (if ediff-xemacs-p
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
936 (progn
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
937 (set-specifier top-toolbar-height (list ctl-frame 2))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
938 (sit-for 0)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
939 (set-specifier top-toolbar-height (list ctl-frame 0))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
940 ;;(set-specifier bottom-toolbar-height (list ctl-frame 0))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
941 (set-specifier left-toolbar-width (list ctl-frame 0))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
942 (set-specifier right-toolbar-width (list ctl-frame 0))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
943 ))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
944
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
945 ;; Under OS/2 (emx) we have to call modify frame parameters twice, in order
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
946 ;; to make sure that at least once we do it for non-iconified frame. If
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
947 ;; appears that in the OS/2 port of Emacs, one can't modify frame
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
948 ;; parameters of iconified frames. As a precaution, we do likewise for
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
949 ;; windows-nt.
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
950 (if (memq system-type '(emx windows-nt windows-95))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
951 (modify-frame-parameters ctl-frame adjusted-parameters))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
952
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
953 ;; make or zap toolbar (if not requested)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
954 (ediff-make-bottom-toolbar ctl-frame)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
955
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
956 (goto-char (point-min))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
957
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
958 (modify-frame-parameters ctl-frame adjusted-parameters)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
959 (make-frame-visible ctl-frame)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
960
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
961 ;; This works around a bug in 19.25 and earlier. There, if frame gets
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
962 ;; iconified, the current buffer changes to that of the frame that
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
963 ;; becomes exposed as a result of this iconification.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
964 ;; So, we make sure the current buffer doesn't change.
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
965 (select-frame ctl-frame)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
966 (ediff-refresh-control-frame)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
967
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
968 (cond ((and ediff-prefer-iconified-control-frame
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
969 (not ctl-frame-iconified-p) (not dont-iconify-ctl-frame))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
970 (iconify-frame ctl-frame))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
971 ((or deiconify-ctl-frame (not ctl-frame-iconified-p))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
972 (raise-frame ctl-frame)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
973
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
974 (set-window-dedicated-p (selected-window) t)
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
975
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
976 ;; Now move the frame. We must do it separately due to an obscure bug in
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
977 ;; XEmacs
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
978 (modify-frame-parameters
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
979 ctl-frame
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
980 (funcall ediff-control-frame-position-function ctl-buffer fwidth fheight))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
981
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
982 ;; synchronize so the cursor will move to control frame
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
983 ;; per RMS suggestion
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
984 (if (ediff-window-display-p)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
985 (let ((count 7))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
986 (sit-for .1)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
987 (while (and (not (frame-visible-p ctl-frame)) (> count 0))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
988 (setq count (1- count))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
989 (sit-for .3))))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
990
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
991 (or (ediff-frame-iconified-p ctl-frame)
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
992 ;; don't warp the mouse, unless ediff-grab-mouse = t
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
993 (ediff-reset-mouse ctl-frame
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
994 (or (eq this-command 'ediff-quit)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
995 (not (eq ediff-grab-mouse t)))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
996
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
997 (if ediff-xemacs-p
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
998 (ediff-with-current-buffer ctl-buffer
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
999 (make-local-hook 'select-frame-hook)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1000 (add-hook 'select-frame-hook 'ediff-xemacs-select-frame-hook nil t)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1001 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1002
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1003 (ediff-with-current-buffer ctl-buffer
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1004 (run-hooks 'ediff-after-setup-control-frame-hook))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1005 ))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
1006
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1007
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1008 (defun ediff-destroy-control-frame (ctl-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1009 (ediff-with-current-buffer ctl-buffer
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1010 (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1011 (let ((ctl-frame ediff-control-frame))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1012 (if ediff-xemacs-p
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1013 (set-buffer-menubar default-menubar))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1014 (setq ediff-control-frame nil)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1015 (delete-frame ctl-frame)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1016 )))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1017 (ediff-skip-unsuitable-frames)
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1018 ;;(ediff-reset-mouse nil)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1019 )
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1020
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1021
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1022 ;; finds a good place to clip control frame
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1023 (defun ediff-make-frame-position (ctl-buffer ctl-frame-width ctl-frame-height)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1024 (ediff-with-current-buffer ctl-buffer
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1025 (let* ((frame-A (window-frame ediff-window-A))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1026 (frame-A-parameters (frame-parameters frame-A))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1027 (frame-A-top (eval (cdr (assoc 'top frame-A-parameters))))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1028 (frame-A-left (eval (cdr (assoc 'left frame-A-parameters))))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1029 (frame-A-width (frame-width frame-A))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030 (ctl-frame ediff-control-frame)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1031 horizontal-adjustment upward-adjustment
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1032 ctl-frame-top ctl-frame-left)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1034 ;; Multiple control frames are clipped based on the value of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 ;; ediff-control-buffer-number. This is done in order not to obscure
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1036 ;; other active control panels.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1037 (setq horizontal-adjustment (* 2 ediff-control-buffer-number)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 upward-adjustment (* -14 ediff-control-buffer-number))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1039
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1040 (setq ctl-frame-top
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1041 (- frame-A-top upward-adjustment ediff-control-frame-upward-shift)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1042 ctl-frame-left
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1043 (+ frame-A-left
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1044 (if ediff-use-long-help-message
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1045 (* (ediff-frame-char-width ctl-frame)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1046 (+ ediff-wide-control-frame-rightward-shift
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1047 horizontal-adjustment))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1048 (- (* frame-A-width (ediff-frame-char-width frame-A))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1049 (* (ediff-frame-char-width ctl-frame)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1050 (+ ctl-frame-width
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1051 ediff-narrow-control-frame-leftward-shift
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1052 horizontal-adjustment))))))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1053 (setq ctl-frame-top
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1054 (min ctl-frame-top
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1055 (- (ediff-display-pixel-height)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1056 (* 2 ctl-frame-height
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1057 (ediff-frame-char-height ctl-frame))))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1058 ctl-frame-left
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1059 (min ctl-frame-left
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1060 (- (ediff-display-pixel-width)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1061 (* ctl-frame-width (ediff-frame-char-width ctl-frame)))))
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1062 ;; keep ctl frame within the visible bounds
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1063 (setq ctl-frame-top (max ctl-frame-top 1)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1064 ctl-frame-left (max ctl-frame-left 1))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1065
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1066 (list (cons 'top ctl-frame-top)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1067 (cons 'left ctl-frame-left))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1068 )))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1069
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1070 (defun ediff-xemacs-select-frame-hook ()
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1071 (if (and (equal (selected-frame) ediff-control-frame)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1072 (not ediff-use-long-help-message))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1073 (raise-frame ediff-control-frame)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1074
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1075 (defun ediff-make-wide-display ()
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1076 "Construct an alist of parameters for the wide display.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1077 Saves the old frame parameters in `ediff-wide-display-orig-parameters'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1078 The frame to be resized is kept in `ediff-wide-display-frame'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1079 This function modifies only the left margin and the width of the display.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1080 It assumes that it is called from within the control buffer."
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1081 (if (not (fboundp 'ediff-display-pixel-width))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1082 (error "Can't determine display width."))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1083 (let* ((frame-A (window-frame ediff-window-A))
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1084 (frame-A-params (frame-parameters frame-A))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1085 (cw (ediff-frame-char-width frame-A))
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1086 (wd (- (/ (ediff-display-pixel-width) cw) 5)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1087 (setq ediff-wide-display-orig-parameters
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1088 (list (cons 'left (max 0 (eval (cdr (assoc 'left frame-A-params)))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1089 (cons 'width (cdr (assoc 'width frame-A-params))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1090 ediff-wide-display-frame frame-A)
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1091 (modify-frame-parameters frame-A (list (cons 'left cw)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1092 (cons 'width wd)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1093
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1094
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1095
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1096 ;; Revise the mode line to display which difference we have selected
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1097 ;; Also resets modelines of buffers A/B, since they may be clobbered by
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1098 ;; anothe invocations of Ediff.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1099 (defun ediff-refresh-mode-lines ()
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1100 (let (buf-A-state-diff buf-B-state-diff buf-C-state-diff buf-C-state-merge)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1101
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1102 (if (ediff-valid-difference-p)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1103 (setq
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1104 buf-C-state-diff (ediff-get-state-of-diff ediff-current-difference 'C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1105 buf-C-state-merge (ediff-get-state-of-merge ediff-current-difference)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1106 buf-A-state-diff (ediff-get-state-of-diff ediff-current-difference 'A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1107 buf-B-state-diff (ediff-get-state-of-diff ediff-current-difference 'B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1108 buf-A-state-diff (if buf-A-state-diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1109 (format "[%s] " buf-A-state-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1110 "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1111 buf-B-state-diff (if buf-B-state-diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1112 (format "[%s] " buf-B-state-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1113 "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1114 buf-C-state-diff (if (and (ediff-buffer-live-p ediff-buffer-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1115 (or buf-C-state-diff buf-C-state-merge))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1116 (format "[%s%s%s] "
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1117 (or buf-C-state-diff "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1118 (if buf-C-state-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1119 (concat " " buf-C-state-merge)
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1120 "")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1121 (if (ediff-get-state-of-ancestor
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1122 ediff-current-difference)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1123 " AncestorEmpty"
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1124 "")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1125 )
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1126 ""))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1127 (setq buf-A-state-diff ""
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 buf-B-state-diff ""
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1129 buf-C-state-diff ""))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1130
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131 ;; control buffer format
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1132 (setq mode-line-format
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
1133 (if (ediff-narrow-control-frame-p)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
1134 (list " " mode-line-buffer-identification)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
1135 (list "-- " mode-line-buffer-identification " Quick Help")))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1136 ;; control buffer id
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1137 (setq mode-line-buffer-identification
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1138 (if (ediff-narrow-control-frame-p)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139 (ediff-make-narrow-control-buffer-id 'skip-name)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 (ediff-make-wide-control-buffer-id)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1141 ;; Force mode-line redisplay
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1142 (force-mode-line-update)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1143
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1144 (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1145 (ediff-refresh-control-frame))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1146
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1147 (ediff-with-current-buffer ediff-buffer-A
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1148 (setq ediff-diff-status buf-A-state-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 (ediff-strip-mode-line-format)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1150 (setq mode-line-format
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1151 (list " A: " 'ediff-diff-status mode-line-format))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 (force-mode-line-update))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1153 (ediff-with-current-buffer ediff-buffer-B
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 (setq ediff-diff-status buf-B-state-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1155 (ediff-strip-mode-line-format)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1156 (setq mode-line-format
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1157 (list " B: " 'ediff-diff-status mode-line-format))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1158 (force-mode-line-update))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1159 (if ediff-3way-job
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1160 (ediff-with-current-buffer ediff-buffer-C
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1161 (setq ediff-diff-status buf-C-state-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1162 (ediff-strip-mode-line-format)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1163 (setq mode-line-format
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1164 (list " C: " 'ediff-diff-status mode-line-format))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1165 (force-mode-line-update)))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1166 (if (ediff-buffer-live-p ediff-ancestor-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1167 (ediff-with-current-buffer ediff-ancestor-buffer
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1168 (ediff-strip-mode-line-format)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1169 ;; we keep the second dummy string in the mode line format of the
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1170 ;; ancestor, since for other buffers Ediff prepends 2 strings and
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1171 ;; ediff-strip-mode-line-format expects that.
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1172 (setq mode-line-format
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1173 (list " Ancestor: "
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1174 (cond ((not (stringp buf-C-state-merge))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1175 "")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1176 ((string-match "prefer-A" buf-C-state-merge)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1177 "[=diff(B)] ")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1178 ((string-match "prefer-B" buf-C-state-merge)
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1179 "[=diff(A)] ")
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1180 (t ""))
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1181 mode-line-format))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1183
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1184
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185 (defun ediff-refresh-control-frame ()
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1186 (if ediff-emacs-p
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1187 ;; set frame/icon titles for Emacs
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1188 (modify-frame-parameters
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1189 ediff-control-frame
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1190 (list (cons 'title (ediff-make-base-title))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1191 (cons 'icon-name (ediff-make-narrow-control-buffer-id))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1192 ))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1193 ;; set frame/icon titles for XEmacs
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1194 (setq frame-title-format (ediff-make-base-title)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1195 frame-icon-title-format (ediff-make-narrow-control-buffer-id))
13132
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1196 ;; force an update of the frame title
7ed272c3c177 (ediff-make-frame-position): fixed bugs.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12559
diff changeset
1197 (modify-frame-parameters ediff-control-frame '(()))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1198
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1199
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 (defun ediff-make-narrow-control-buffer-id (&optional skip-name)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1201 (concat
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1202 (if skip-name
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203 " "
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1204 (ediff-make-base-title))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 (cond ((< ediff-current-difference 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 (format " _/%d" ediff-number-of-differences))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1207 ((>= ediff-current-difference ediff-number-of-differences)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1208 (format " $/%d" ediff-number-of-differences))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1209 (t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1210 (format " %d/%d"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211 (1+ ediff-current-difference)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 ediff-number-of-differences)))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1213
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1214 (defun ediff-make-base-title ()
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1215 (concat
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1216 (cdr (assoc 'name ediff-control-frame-parameters))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1217 ediff-control-buffer-suffix))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1219 (defun ediff-make-wide-control-buffer-id ()
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1220 (cond ((< ediff-current-difference 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221 (list (format "%%b At start of %d diffs"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222 ediff-number-of-differences)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 ((>= ediff-current-difference ediff-number-of-differences)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 (list (format "%%b At end of %d diffs"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 ediff-number-of-differences)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226 (t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227 (list (format "%%b diff %d of %d"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228 (1+ ediff-current-difference)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1229 ediff-number-of-differences)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1230
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 ;; If buff is not live, return nil
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234 (defun ediff-get-visible-buffer-window (buff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 (if (ediff-buffer-live-p buff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 (if ediff-xemacs-p
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 (get-buffer-window buff t)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 (get-buffer-window buff 'visible))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1240
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 ;;; Functions to decide when to redraw windows
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 (defun ediff-keep-window-config (control-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 (and (eq control-buf (current-buffer))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 (/= (buffer-size) 0)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1246 (ediff-with-current-buffer control-buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 (let ((ctl-wind ediff-control-window)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 (A-wind ediff-window-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249 (B-wind ediff-window-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 (C-wind ediff-window-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252 (and
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1253 (ediff-window-visible-p A-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254 (ediff-window-visible-p B-wind)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255 ;; if buffer C is defined then take it into account
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 (or (not ediff-3way-job)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1257 (ediff-window-visible-p C-wind))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 (eq (window-buffer A-wind) ediff-buffer-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259 (eq (window-buffer B-wind) ediff-buffer-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1260 (or (not ediff-3way-job)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1261 (eq (window-buffer C-wind) ediff-buffer-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1262 (string= ediff-window-config-saved
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1263 (format "%S%S%S%S%S%S%S"
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1264 ctl-wind A-wind B-wind C-wind
12084
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1265 ediff-split-window-function
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1266 (ediff-multiframe-setup-p)
4a13777b153b (ediff-make-control-frame): optimized for display.
Karl Heuer <kwzh@gnu.org>
parents: 12020
diff changeset
1267 ediff-wide-display-p)))))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1270 ;;; Local Variables:
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1271 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1272 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1273 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1274 ;;; End:
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
1275
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 ;;; ediff-wind.el ends here