aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ediff-mult.el189
1 files changed, 85 insertions, 104 deletions
diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el
index a5a065117e4..79e4e438a84 100644
--- a/lisp/ediff-mult.el
+++ b/lisp/ediff-mult.el
@@ -939,10 +939,9 @@ behavior."
939 (erase-buffer) 939 (erase-buffer)
940 ;; delete phony overlays that used to represent sessions before the buff 940 ;; delete phony overlays that used to represent sessions before the buff
941 ;; was redrawn 941 ;; was redrawn
942 (ediff-cond-compile-for-xemacs-or-emacs 942 (if (featurep 'xemacs)
943 (map-extents 'delete-extent) ; xemacs 943 (map-extents 'delete-extent)
944 (mapc 'delete-overlay (overlays-in 1 1)) ; emacs 944 (mapc 'delete-overlay (overlays-in 1 1)))
945 )
946 945
947 (setq regexp (ediff-get-group-regexp meta-list) 946 (setq regexp (ediff-get-group-regexp meta-list)
948 merge-autostore-dir 947 merge-autostore-dir
@@ -1047,32 +1046,30 @@ behavior."
1047(defun ediff-update-session-marker-in-dir-meta-buffer (session-num) 1046(defun ediff-update-session-marker-in-dir-meta-buffer (session-num)
1048 (let (buffer-meta-overlays session-info overl buffer-read-only) 1047 (let (buffer-meta-overlays session-info overl buffer-read-only)
1049 (setq overl 1048 (setq overl
1050 (ediff-cond-compile-for-xemacs-or-emacs 1049 (if (featurep 'xemacs)
1051 (map-extents ; xemacs 1050 (map-extents
1052 (lambda (ext maparg) 1051 (lambda (ext maparg)
1053 (if (and 1052 (if (and
1054 (ediff-overlay-get ext 'ediff-meta-info) 1053 (ediff-overlay-get ext 'ediff-meta-info)
1055 (eq (ediff-overlay-get ext 'ediff-meta-session-number) 1054 (eq (ediff-overlay-get ext 'ediff-meta-session-number)
1056 session-num)) 1055 session-num))
1057 ext))) 1056 ext)))
1058 ;; Emacs doesn't have map-extents, so try harder 1057 ;; Emacs doesn't have map-extents, so try harder
1059 ;; Splice overlay lists to get all buffer overlays 1058 ;; Splice overlay lists to get all buffer overlays
1060 (progn 1059 (setq buffer-meta-overlays (overlay-lists)
1061 (setq buffer-meta-overlays (overlay-lists) 1060 buffer-meta-overlays (append (car buffer-meta-overlays)
1062 buffer-meta-overlays (append (car buffer-meta-overlays)
1063 (cdr buffer-meta-overlays))) 1061 (cdr buffer-meta-overlays)))
1064 (car 1062 (car
1065 (delq nil 1063 (delq nil
1066 (mapcar 1064 (mapcar
1067 (lambda (overl) 1065 (lambda (overl)
1068 (if (and 1066 (if (and
1069 (ediff-overlay-get overl 'ediff-meta-info) 1067 (ediff-overlay-get overl 'ediff-meta-info)
1070 (eq (ediff-overlay-get 1068 (eq (ediff-overlay-get
1071 overl 'ediff-meta-session-number) 1069 overl 'ediff-meta-session-number)
1072 session-num)) 1070 session-num))
1073 overl)) 1071 overl))
1074 buffer-meta-overlays)))) 1072 buffer-meta-overlays)))))
1075 ))
1076 (or overl 1073 (or overl
1077 (error 1074 (error
1078 "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S" 1075 "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S"
@@ -1388,10 +1385,9 @@ Useful commands:
1388 (erase-buffer) 1385 (erase-buffer)
1389 ;; delete phony overlays that used to represent sessions before the buff 1386 ;; delete phony overlays that used to represent sessions before the buff
1390 ;; was redrawn 1387 ;; was redrawn
1391 (ediff-cond-compile-for-xemacs-or-emacs 1388 (if (featurep 'xemacs)
1392 (map-extents 'delete-extent) ; xemacs 1389 (map-extents 'delete-extent)
1393 (mapc 'delete-overlay (overlays-in 1 1)) ; emacs 1390 (mapc 'delete-overlay (overlays-in 1 1)))
1394 )
1395 1391
1396 (insert "This is a registry of all active Ediff sessions. 1392 (insert "This is a registry of all active Ediff sessions.
1397 1393
@@ -2213,42 +2209,33 @@ If this is a session registry buffer then just bury it."
2213 (let (result olist tmp) 2209 (let (result olist tmp)
2214 (if (and point (ediff-buffer-live-p buf)) 2210 (if (and point (ediff-buffer-live-p buf))
2215 (ediff-with-current-buffer buf 2211 (ediff-with-current-buffer buf
2216 (ediff-cond-compile-for-xemacs-or-emacs 2212 (if (featurep 'xemacs)
2217 (setq result ; xemacs 2213 (setq result
2218 (if (setq tmp (extent-at point buf 'ediff-meta-info)) 2214 (if (setq tmp (extent-at point buf 'ediff-meta-info))
2219 (ediff-overlay-get tmp 'ediff-meta-info))) 2215 (ediff-overlay-get tmp 'ediff-meta-info)))
2220 (progn ; emacs 2216 (setq olist
2221 (setq olist (overlays-at point)) 2217 (mapcar (lambda (elt)
2222 (setq olist 2218 (unless (overlay-get elt 'invisible)
2223 (mapcar (lambda (elt) 2219 (overlay-get elt 'ediff-meta-info)))
2224 (unless (overlay-get elt 'invisible) 2220 (overlays-at point)))
2225 (overlay-get elt 'ediff-meta-info))) 2221 (while (and olist (null (car olist)))
2226 olist)) 2222 (setq olist (cdr olist)))
2227 (while (and olist (null (car olist))) 2223 (setq result (car olist)))))
2228 (setq olist (cdr olist))) 2224 (or result
2229 (setq result (car olist))) 2225 (unless noerror
2230 ) 2226 (ediff-update-registry)
2231 )) 2227 (error "No session info in this line")))))
2232 (if result
2233 result
2234 (if noerror
2235 nil
2236 (ediff-update-registry)
2237 (error "No session info in this line")))))
2238 2228
2239 2229
2240(defun ediff-get-meta-overlay-at-pos (point) 2230(defun ediff-get-meta-overlay-at-pos (point)
2241 (ediff-cond-compile-for-xemacs-or-emacs 2231 (if (featurep 'xemacs)
2242 (extent-at point (current-buffer) 'ediff-meta-info) ; xemacs 2232 (extent-at point (current-buffer) 'ediff-meta-info)
2243 ;; emacs 2233 (let* ((overl-list (overlays-at point))
2244 (let* ((overl-list (overlays-at point)) 2234 (overl (car overl-list)))
2245 (overl (car overl-list))) 2235 (while (and overl (null (overlay-get overl 'ediff-meta-info)))
2246 (while (and overl (null (overlay-get overl 'ediff-meta-info))) 2236 (setq overl-list (cdr overl-list)
2247 (setq overl-list (cdr overl-list) 2237 overl (car overl-list)))
2248 overl (car overl-list))) 2238 overl)))
2249 overl)
2250 )
2251 )
2252 2239
2253(defsubst ediff-get-session-number-at-pos (point &optional meta-buffer) 2240(defsubst ediff-get-session-number-at-pos (point &optional meta-buffer)
2254 (setq meta-buffer (if (ediff-buffer-live-p meta-buffer) 2241 (setq meta-buffer (if (ediff-buffer-live-p meta-buffer)
@@ -2264,52 +2251,46 @@ If this is a session registry buffer then just bury it."
2264 (if (eobp) 2251 (if (eobp)
2265 (goto-char (point-min)) 2252 (goto-char (point-min))
2266 (let ((overl (ediff-get-meta-overlay-at-pos point))) 2253 (let ((overl (ediff-get-meta-overlay-at-pos point)))
2267 (ediff-cond-compile-for-xemacs-or-emacs 2254 (if (featurep 'xemacs)
2268 (progn ; xemacs 2255 (progn ; xemacs
2269 (if overl 2256 (if overl
2270 (setq overl (next-extent overl)) 2257 (setq overl (next-extent overl))
2271 (setq overl (next-extent (current-buffer)))) 2258 (setq overl (next-extent (current-buffer))))
2272 (if overl 2259 (if overl
2273 (extent-start-position overl) 2260 (extent-start-position overl)
2274 (point-max))) 2261 (point-max)))
2275 ;; emacs 2262 ;; emacs
2276 (if overl 2263 (if overl
2277 ;; note: end of current overlay is the beginning of the next one 2264 ;; note: end of current overlay is the beginning of the next one
2278 (overlay-end overl) 2265 (overlay-end overl)
2279 (next-overlay-change point)) 2266 (next-overlay-change point))))))
2280 )
2281 )
2282 ))
2283 2267
2284 2268
2285(defun ediff-previous-meta-overlay-start (point) 2269(defun ediff-previous-meta-overlay-start (point)
2286 (if (bobp) 2270 (if (bobp)
2287 (goto-char (point-max)) 2271 (goto-char (point-max))
2288 (let ((overl (ediff-get-meta-overlay-at-pos point))) 2272 (let ((overl (ediff-get-meta-overlay-at-pos point)))
2289 (ediff-cond-compile-for-xemacs-or-emacs 2273 (if (featurep 'xemacs)
2290 (progn 2274 (progn
2291 (if overl 2275 (if overl
2292 (setq overl (previous-extent overl)) 2276 (setq overl (previous-extent overl))
2293 (setq overl (previous-extent (current-buffer)))) 2277 (setq overl (previous-extent (current-buffer))))
2294 (if overl 2278 (if overl
2295 (extent-start-position overl) 2279 (extent-start-position overl)
2296 (point-min))) 2280 (point-min)))
2297 (progn 2281 (if overl (setq point (overlay-start overl)))
2298 (if overl (setq point (overlay-start overl))) 2282 ;; to get to the beginning of prev overlay
2299 ;; to get to the beginning of prev overlay 2283 (if (not (bobp))
2300 (if (not (bobp)) 2284 ;; trick to overcome an emacs bug--doesn't always find previous
2301 ;; trick to overcome an emacs bug--doesn't always find previous 2285 ;; overlay change correctly
2302 ;; overlay change correctly 2286 (setq point (1- point)))
2303 (setq point (1- point))) 2287 (setq point (previous-overlay-change point))
2304 (setq point (previous-overlay-change point)) 2288 ;; If we are not over an overlay after subtracting 1, it means we are
2305 ;; If we are not over an overlay after subtracting 1, it means we are 2289 ;; in the description area preceding session records. In this case,
2306 ;; in the description area preceding session records. In this case, 2290 ;; goto the top of the registry buffer.
2307 ;; goto the top of the registry buffer. 2291 (or (car (overlays-at point))
2308 (or (car (overlays-at point)) 2292 (setq point (point-min)))
2309 (setq point (point-min))) 2293 point))))
2310 point)
2311 )
2312 )))
2313 2294
2314;; this is the action invoked when the user selects a patch from the meta 2295;; this is the action invoked when the user selects a patch from the meta
2315;; buffer. 2296;; buffer.