annotate lisp/ediff-wind.el @ 24102:1086aa5db591

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