/[emacs]/emacs/lisp/ediff-mult.el
ViewVC logotype

Diff of /emacs/lisp/ediff-mult.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.26 by kifer, Mon Dec 24 05:50:31 2001 UTC revision 1.27 by kifer, Tue Jan 8 04:36:01 2002 UTC
# Line 1  Line 1 
1  ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff  ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
2    
3  ;; Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc.  ;; Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 Free Software Foundation, Inc.
4    
5  ;; Author: Michael Kifer <kifer@cs.sunysb.edu>  ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
6    
7  ;; This file is part of GNU Emacs.  ;; This file is part of GNU Emacs.
8    
# Line 815  behavior." Line 815  behavior."
815        (erase-buffer)        (erase-buffer)
816        ;; delete phony overlays that used to represent sessions before the buff        ;; delete phony overlays that used to represent sessions before the buff
817        ;; was redrawn        ;; was redrawn
818        (if ediff-emacs-p        (ediff-cond-compile-for-xemacs-or-emacs
819            (mapcar 'delete-overlay (overlays-in 1 1))         (map-extents 'delete-extent)   ; xemacs
820          (map-extents 'delete-extent))         (mapcar 'delete-overlay (overlays-in 1 1))  ; emacs
821           )
822                
823        (insert (format ediff-meta-buffer-message        (insert (format ediff-meta-buffer-message
824                        (ediff-abbrev-jobname ediff-metajob-name)))                        (ediff-abbrev-jobname ediff-metajob-name)))
# Line 918  behavior." Line 919  behavior."
919  (defun ediff-update-session-marker-in-dir-meta-buffer (session-num)  (defun ediff-update-session-marker-in-dir-meta-buffer (session-num)
920    (let (buffer-meta-overlays session-info overl buffer-read-only)    (let (buffer-meta-overlays session-info overl buffer-read-only)
921      (setq overl      (setq overl
922            (if ediff-xemacs-p            (ediff-cond-compile-for-xemacs-or-emacs
923                (map-extents             (map-extents ; xemacs
924                 (lambda (ext maparg)              (lambda (ext maparg)
925                   (if (and                (if (and
926                        (ediff-overlay-get ext 'ediff-meta-info)                     (ediff-overlay-get ext 'ediff-meta-info)
927                        (eq (ediff-overlay-get ext 'ediff-meta-session-number)                     (eq (ediff-overlay-get ext 'ediff-meta-session-number)
928                            session-num))                         session-num))
929                       ext)))                    ext)))
930              ;; Emacs doesn't have map-extents, so try harder              ;; Emacs doesn't have map-extents, so try harder
931              ;; Splice overlay lists to get all buffer overlays              ;; Splice overlay lists to get all buffer overlays
932              (setq buffer-meta-overlays (overlay-lists)             (progn
933                    buffer-meta-overlays (append (car buffer-meta-overlays)               (setq buffer-meta-overlays (overlay-lists)
934                                                 (cdr buffer-meta-overlays)))                     buffer-meta-overlays (append (car buffer-meta-overlays)
935              (car                                                  (cdr buffer-meta-overlays)))
936               (delq nil               (car
937                     (mapcar                (delq nil
938                      (lambda (overl)                      (mapcar
939                        (if (and                       (lambda (overl)
940                             (ediff-overlay-get overl 'ediff-meta-info)                         (if (and
941                             (eq (ediff-overlay-get                              (ediff-overlay-get overl 'ediff-meta-info)
942                                  overl 'ediff-meta-session-number)                              (eq (ediff-overlay-get
943                                 session-num))                                   overl 'ediff-meta-session-number)
944                            overl))                                  session-num))
945                      buffer-meta-overlays)))))                             overl))
946                         buffer-meta-overlays))))
947               ))
948      (or overl      (or overl
949          (error          (error
950           "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S"           "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S"
# Line 1179  Useful commands: Line 1182  Useful commands:
1182        (erase-buffer)        (erase-buffer)
1183        ;; delete phony overlays that used to represent sessions before the buff        ;; delete phony overlays that used to represent sessions before the buff
1184        ;; was redrawn        ;; was redrawn
1185        (if ediff-emacs-p        (ediff-cond-compile-for-xemacs-or-emacs
1186            (mapcar 'delete-overlay (overlays-in 1 1))         (map-extents 'delete-extent) ; xemacs
1187          (map-extents 'delete-extent))         (mapcar 'delete-overlay (overlays-in 1 1)) ; emacs
1188           )
1189    
1190        (insert "This is a registry of all active Ediff sessions.        (insert "This is a registry of all active Ediff sessions.
1191    
# Line 1507  all marked sessions must be active." Line 1511  all marked sessions must be active."
1511                                
1512  ;; This function executes in meta buffer.  It knows where event happened.  ;; This function executes in meta buffer.  It knows where event happened.
1513  (defun ediff-filegroup-action ()  (defun ediff-filegroup-action ()
1514    "Execute appropriate action for the selected session."    "Execute appropriate action for a selected session."
1515    (interactive)    (interactive)
1516    (let* ((pos (ediff-event-point last-command-event))    (let* ((pos (ediff-event-point last-command-event))
1517           (meta-buf (ediff-event-buffer last-command-event))           (meta-buf (ediff-event-buffer last-command-event))
# Line 1795  all marked sessions must be active." Line 1799  all marked sessions must be active."
1799            (setq frame (window-frame wind))            (setq frame (window-frame wind))
1800            (raise-frame frame)            (raise-frame frame)
1801            (ediff-reset-mouse frame)))            (ediff-reset-mouse frame)))
1802        (sit-for 0) ; sometimes needed to synch the display and ensure that the
1803                    ; point ends up after the just completed session
1804      (run-hooks 'ediff-show-session-group-hook)      (run-hooks 'ediff-show-session-group-hook)
1805      ))      ))
1806    
# Line 1975  If this is a session registry buffer the Line 1981  If this is a session registry buffer the
1981    (let (result olist tmp)    (let (result olist tmp)
1982      (if (and point (ediff-buffer-live-p buf))      (if (and point (ediff-buffer-live-p buf))
1983          (ediff-with-current-buffer buf          (ediff-with-current-buffer buf
1984            (if ediff-xemacs-p            (ediff-cond-compile-for-xemacs-or-emacs
1985                (setq result             (setq result  ; xemacs
1986                      (if (setq tmp (extent-at point buf 'ediff-meta-info))                   (if (setq tmp (extent-at point buf 'ediff-meta-info))
1987                          (ediff-overlay-get tmp 'ediff-meta-info)))                       (ediff-overlay-get tmp 'ediff-meta-info)))
1988              (setq olist (overlays-at point))             (progn ; emacs
1989              (setq olist               (setq olist (overlays-at point))
1990                    (mapcar (lambda (elt)               (setq olist
1991                              (unless (overlay-get elt 'invisible)                     (mapcar (lambda (elt)
1992                                (overlay-get elt 'ediff-meta-info)))                               (unless (overlay-get elt 'invisible)
1993                            olist))                                 (overlay-get elt 'ediff-meta-info)))
1994              (while (and olist (null (car olist)))                             olist))
1995                (setq olist (cdr olist)))               (while (and olist (null (car olist)))
1996              (setq result (car olist)))))                 (setq olist (cdr olist)))
1997                 (setq result (car olist)))
1998               )
1999              ))
2000      (if result      (if result
2001          result          result
2002        (if noerror        (if noerror
# Line 1997  If this is a session registry buffer the Line 2006  If this is a session registry buffer the
2006    
2007    
2008  (defun ediff-get-meta-overlay-at-pos (point)  (defun ediff-get-meta-overlay-at-pos (point)
2009    (if ediff-xemacs-p    (ediff-cond-compile-for-xemacs-or-emacs
2010        (extent-at point (current-buffer) 'ediff-meta-info)     (extent-at point (current-buffer) 'ediff-meta-info) ; xemacs
2011      (let* ((overl-list (overlays-at point))     ;; emacs
2012             (overl (car overl-list)))     (let* ((overl-list (overlays-at point))
2013        (while (and overl (null (overlay-get overl 'ediff-meta-info)))            (overl (car overl-list)))
2014          (setq overl-list (cdr overl-list)       (while (and overl (null (overlay-get overl 'ediff-meta-info)))
2015                overl (car overl-list)))         (setq overl-list (cdr overl-list)
2016        overl)))               overl (car overl-list)))
2017         overl)
2018       )
2019      )
2020    
2021  (defsubst ediff-get-session-number-at-pos (point &optional meta-buffer)  (defsubst ediff-get-session-number-at-pos (point &optional meta-buffer)
2022    (setq meta-buffer (if (ediff-buffer-live-p meta-buffer)    (setq meta-buffer (if (ediff-buffer-live-p meta-buffer)
# Line 2020  If this is a session registry buffer the Line 2032  If this is a session registry buffer the
2032    (if (eobp)    (if (eobp)
2033        (goto-char (point-min))        (goto-char (point-min))
2034      (let ((overl (ediff-get-meta-overlay-at-pos point)))      (let ((overl (ediff-get-meta-overlay-at-pos point)))
2035        (if ediff-xemacs-p        (ediff-cond-compile-for-xemacs-or-emacs
2036            (progn         (progn ; xemacs
2037              (if overl           (if overl
2038                  (setq overl (next-extent overl))               (setq overl (next-extent overl))
2039                (setq overl (next-extent (current-buffer))))             (setq overl (next-extent (current-buffer))))
2040              (if overl           (if overl
2041                  (extent-start-position overl)               (extent-start-position overl)
2042                (point-max)))             (point-max)))
2043          (if overl         ;; emacs
2044              ;; note: end of current overlay is the beginning of the next one         (if overl
2045              (overlay-end overl)             ;; note: end of current overlay is the beginning of the next one
2046            (next-overlay-change point))))             (overlay-end overl)
2047             (next-overlay-change point))
2048           )
2049          )
2050      ))      ))
2051    
2052    
# Line 2039  If this is a session registry buffer the Line 2054  If this is a session registry buffer the
2054    (if (bobp)    (if (bobp)
2055        (goto-char (point-max))        (goto-char (point-max))
2056      (let ((overl (ediff-get-meta-overlay-at-pos point)))      (let ((overl (ediff-get-meta-overlay-at-pos point)))
2057        (if ediff-xemacs-p        (ediff-cond-compile-for-xemacs-or-emacs
2058            (progn         (progn
2059              (if overl           (if overl
2060                  (setq overl (previous-extent overl))               (setq overl (previous-extent overl))
2061                (setq overl (previous-extent (current-buffer))))             (setq overl (previous-extent (current-buffer))))
2062              (if overl           (if overl
2063                  (extent-start-position overl)               (extent-start-position overl)
2064                (point-min)))             (point-min)))
2065          (if overl (setq point (overlay-start overl)))         (progn
2066          ;; to get to the beginning of prev overlay           (if overl (setq point (overlay-start overl)))
2067          (if (not (bobp))           ;; to get to the beginning of prev overlay
2068              ;; trick to overcome an emacs bug--doesn't always find previous           (if (not (bobp))
2069              ;; overlay change correctly               ;; trick to overcome an emacs bug--doesn't always find previous
2070              (setq point (1- point)))               ;; overlay change correctly
2071          (setq point (previous-overlay-change point))               (setq point (1- point)))
2072          ;; If we are not over an overlay after subtracting 1, it means we are           (setq point (previous-overlay-change point))
2073          ;; in the description area preceding session records.  In this case,           ;; If we are not over an overlay after subtracting 1, it means we are
2074          ;; goto the top of the registry buffer.           ;; in the description area preceding session records.  In this case,
2075          (or (car (overlays-at point))           ;; goto the top of the registry buffer.
2076              (setq point (point-min)))           (or (car (overlays-at point))
2077          point))))               (setq point (point-min)))
2078             point)
2079           )
2080          )))
2081    
2082  ;; this is the action invoked when the user selects a patch from the meta  ;; this is the action invoked when the user selects a patch from the meta
2083  ;; buffer.  ;; buffer.

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26