annotate lisp/ediff-wind.el @ 18092:8428d56cd207

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