emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: buttons for the ediff control frame


From: Dan Nicolaescu
Subject: Re: buttons for the ediff control frame
Date: Tue, 28 Mar 2006 11:20:49 -0800

Dan Nicolaescu <address@hidden> writes:

  > Understanding how to use the ediff little control frame is kind of
  > hard for first time users. 
  > It might help if it had some graphical buttons... 
  > A few buttons for the most used functions should be enough.
  > Something like:
  >           -next + previous
  >           -copy A->B, B->A
  >           -revert A, revert B
  >           -quit
  >           -help
  > 

The implementation for this proposal seems to work correctly, both
with the default settings and with:

(setq  ediff-split-window-function        'split-window-horizontally)
(setq  ediff-window-setup-function        'ediff-setup-windows-plain)

The problems left to solve are: 
    - Icons: where can we get some well designed icons? 
    
    - Decide exactly what buttons to include. If the number is more
    than 8, then the control frame becomes too big... 
    
    - There's a widget infrastructure problem: for adjacent buttons
    putting the mouse over one of the will highlight all the buttons.


Please give this patch a try and let me know what you think. 

Thanks
                --dan


*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/tmp-ediff-refine.xpm     Sun Mar 26 21:01:48 2006
***************
*** 0 ****
--- 1,29 ----
+ /* XPM */
+ static char * tmp_ediff_refine_xpm[] = {
+ "24 24 2 1",
+ "     c None",
+ ".    c #FF0000",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "           ..           ",
+ " ....      ..           ",
+ " .  .  ..  .. . .. ..   ",
+ " ...  .. . .. .  ... .  ",
+ " .  . .    .. .  ..     ",
+ " .  .  ..  .. .  . ..   ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        "};
*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/tmp-ediff-toggle-split.xpm       Sun Mar 26 21:01:44 2006
***************
*** 0 ****
--- 1,29 ----
+ /* XPM */
+ static char * tmp_ediff_toggle_split_xpm[] = {
+ "24 24 2 1",
+ "     c None",
+ ".    c #0000FF",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                        ",
+ "                .       ",
+ "....            .       ",
+ " .   ..  . . . ..  ..   ",
+ " .  .  ..  ..  .. .. .  ",
+ " .  .  ..  ..  .. .     ",
+ " .   ..  ... ....  ..   ",
+ "           .   .        ",
+ "         ..  ..         ",
+ "                        ",
+ "                        ",
+ "       .                ",
+ "       . . .            ",
+ ".. ... . . .            ",
+ ".  .  .. . .            ",
+ "  ..  .. . .            ",
+ "...... . . .            ",
+ "   .                    ",
+ "                        ",
+ "                        ",
+ "                        "};
*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/ediff-revert-A.xpm       Mon Mar 27 15:31:18 2006
***************
*** 0 ****
--- 1,63 ----
+ /* XPM */
+ static char * ediff_revert_A_xpm[] = {
+ "24 24 36 1",
+ "     c None",
+ ".    c #FF0000",
+ "+    c #000000",
+ "@    c #EFE5BA",
+ "#    c #EFE7C1",
+ "$    c #EED680",
+ "%    c #EFE4B6",
+ "&    c #D5B75D",
+ "*    c #B29544",
+ "=    c #D90000",
+ "-    c #EFE4B9",
+ ";    c #D1B051",
+ ">    c #010000",
+ ",    c #F51A11",
+ "'    c #F1A462",
+ ")    c #C0A048",
+ "!    c #986B07",
+ "~    c #D1940C",
+ "{    c #E0B74C",
+ "]    c #D9C374",
+ "^    c #8F6406",
+ "/    c #D59D1C",
+ "(    c #B1933F",
+ "_    c #DFB74A",
+ ":    c #CCB76D",
+ "<    c #B8820A",
+ "[    c #D9A72E",
+ "}    c #D7A62C",
+ "|    c #C7B26A",
+ "1    c #D4B150",
+ "2    c #A39256",
+ "3    c #E2CB79",
+ "4    c #C9B46B",
+ "5    c #8D7E4A",
+ "6    c #AE9C5C",
+ "7    c #96864F",
+ "                        ",
+ "                        ",
+ "                        ",
+ "   .      +             ",
+ "  ..     ++             ",
+ "  . .   address@hidden             ",
+ " .  .  +#$++++          ",
+ " .... +%$$$$&*+         ",
+ " .   =-$$$$$$$;+        ",
+ ".   >,'$$$$$$$$)+       ",
+ "     +!~~~~~~{$]++      ",
+ "      +^~~~~~~/$(+      ",
+ "       +^~+++!~_:+      ",
+ "        +!+ ++<[$+      ",
+ "         ++  ++~$+      ",
+ "          +   +}|+      ",
+ "              +12+      ",
+ "              +3+       ",
+ "             +45+       ",
+ "            +67+        ",
+ "             ++         ",
+ "                        ",
+ "                        ",
+ "                        "};
*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/ediff-revert-B.xpm       Mon Mar 27 15:32:09 2006
***************
*** 0 ****
--- 1,61 ----
+ /* XPM */
+ static char * ediff_revert_B_xpm[] = {
+ "24 24 34 1",
+ "     c None",
+ ".    c #FF0000",
+ "+    c #000000",
+ "@    c #EFE5BA",
+ "#    c #EFE7C1",
+ "$    c #EED680",
+ "%    c #EFE4B6",
+ "&    c #D5B75D",
+ "*    c #B29544",
+ "=    c #EA0000",
+ "-    c #D1B051",
+ ";    c #D90000",
+ ">    c #DA6442",
+ ",    c #C0A048",
+ "'    c #986B07",
+ ")    c #D1940C",
+ "!    c #E0B74C",
+ "~    c #D9C374",
+ "{    c #8F6406",
+ "]    c #D59D1C",
+ "^    c #B1933F",
+ "/    c #DFB74A",
+ "(    c #CCB76D",
+ "_    c #B8820A",
+ ":    c #D9A72E",
+ "<    c #D7A62C",
+ "[    c #C7B26A",
+ "}    c #D4B150",
+ "|    c #A39256",
+ "1    c #E2CB79",
+ "2    c #C9B46B",
+ "3    c #8D7E4A",
+ "4    c #AE9C5C",
+ "5    c #96864F",
+ "                        ",
+ "                        ",
+ "                        ",
+ " ....     +             ",
+ " .   .   ++             ",
+ " .   .  address@hidden             ",
+ " ....  +#$++++          ",
+ " .   .+%$$$$&*+         ",
+ " .   address@hidden        ",
+ " ...;>$$$$$$$$$,+       ",
+ "     +'))))))!$~++      ",
+ "      +{))))))]$^+      ",
+ "       +{)+++')/(+      ",
+ "        +'+ ++_:$+      ",
+ "         ++  ++)$+      ",
+ "          +   +<[+      ",
+ "              +}|+      ",
+ "              +1+       ",
+ "             +23+       ",
+ "            +45+        ",
+ "             ++         ",
+ "                        ",
+ "                        ",
+ "                        "};
*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/copy-A-B.xpm     Thu Mar 23 12:02:32 2006
***************
*** 0 ****
--- 1,114 ----
+ /* XPM */
+ static char * save_copy_A_B_xpm[] = {
+ "24 24 87 1",
+ "     c None",
+ ".    c #000000",
+ "+    c #B4B4B4",
+ "@    c #F8F8F8",
+ "#    c #F6F6F6",
+ "$    c #C3C3C3",
+ "%    c #E9E9E9",
+ "&    c #989898",
+ "*    c #828282",
+ "=    c #8A8A8A",
+ "-    c #E8E8E8",
+ ";    c #636363",
+ ">    c #5A5A5A",
+ ",    c #6B6B6B",
+ "'    c #B3B3B3",
+ ")    c #FFFFFF",
+ "!    c #D6D6D6",
+ "~    c #828080",
+ "{    c #EE1010",
+ "]    c #F93E3E",
+ "^    c #818181",
+ "/    c #FF0000",
+ "(    c #FF1A1A",
+ "_    c #FF1E1E",
+ ":    c #FF1919",
+ "<    c #FF2424",
+ "[    c #6B0000",
+ "}    c #EFA8A8",
+ "|    c #FD1313",
+ "1    c #EBC9C9",
+ "2    c #A7A7A7",
+ "3    c #8F8F8F",
+ "4    c #C6C6C6",
+ "5    c #FFD7D7",
+ "6    c #FFB0B0",
+ "7    c #F80000",
+ "8    c #CA1C1C",
+ "9    c #A33232",
+ "0    c #FA2F2F",
+ "a    c #B83232",
+ "b    c #808080",
+ "c    c #FFFDFD",
+ "d    c #FFE4E4",
+ "e    c #FF6C6C",
+ "f    c #B00000",
+ "g    c #EBD1D1",
+ "h    c #FE0A0A",
+ "i    c #EAD6D6",
+ "j    c #F18A8A",
+ "k    c #FC1515",
+ "l    c #E7E2E2",
+ "m    c #6D6D6D",
+ "n    c #767676",
+ "o    c #FF4D4D",
+ "p    c #060000",
+ "q    c #CA4E4E",
+ "r    c #D32C2C",
+ "s    c #EADCDC",
+ "t    c #FA0505",
+ "u    c #A95858",
+ "v    c #FFF9F9",
+ "w    c #FFCDCD",
+ "x    c #FF3A3A",
+ "y    c #990000",
+ "z    c #F5F2F2",
+ "A    c #FC1B1B",
+ "B    c #F84242",
+ "C    c #FFC7C7",
+ "D    c #F70000",
+ "E    c #D48A8A",
+ "F    c #FC1C1C",
+ "G    c #E9E5E5",
+ "H    c #EEABAB",
+ "I    c #FE0000",
+ "J    c #1F0000",
+ "K    c #FFFEFE",
+ "L    c #FF9999",
+ "M    c #E30000",
+ "N    c #B10000",
+ "O    c #710000",
+ "P    c #010000",
+ "Q    c #D10000",
+ "R    c #810000",
+ "S    c #F81616",
+ "T    c #F80808",
+ "U    c #FF2020",
+ "V    c #4A0000",
+ "                        ",
+ "                        ",
+ "                        ",
+ ".............           ",
+ ".+@@@@@@@@@#$.          ",
+ "address@hidden          ",
+ ".@&**=%+*%*+%.          ",
+ "address@hidden          ",
+ ".@;>%,*+-............   ",
+ "address@hidden'))))))))))!.  ",
+ ".@&~{]*^.)))))))/(_:<[  ",
+ "address@hidden|/1-.)233&)4/53467  ",
+ ".@;890ab.)))))))/5cdef  ",
+ "address@hidden)m;)n34////op  ",
+ "address@hidden)))))))/5vwxy  ",
+ ".zA////B.)233)33/5&3CD  ",
+ ".EFG%%HIJ)))))))/5)KLM  ",
+ " NO...PQR)m;;)n3/(STUV  ",
+ "        .)))))))))))).  ",
+ "        .)233)334)&3).  ",
+ "        .)))))))))))).  ",
+ "        .!))))))))))!.  ",
+ "        ..............  ",
+ "                        "};
*** /dev/null   Mon Mar 20 17:02:17 2006
--- etc/images/copy-B-A.xpm     Thu Mar 23 12:03:13 2006
***************
*** 0 ****
--- 1,114 ----
+ /* XPM */
+ static char * save_copy_B_A_xpm[] = {
+ "24 24 87 1",
+ "     c None",
+ ".    c #000000",
+ "+    c #B4B4B4",
+ "@    c #F8F8F8",
+ "#    c #F6F6F6",
+ "$    c #C3C3C3",
+ "%    c #E9E9E9",
+ "&    c #989898",
+ "*    c #828282",
+ "=    c #8A8A8A",
+ "-    c #E8E8E8",
+ ";    c #636363",
+ ">    c #5A5A5A",
+ ",    c #6B6B6B",
+ "'    c #B3B3B3",
+ ")    c #FFFFFF",
+ "!    c #D6D6D6",
+ "~    c #FF0000",
+ "{    c #F20D0D",
+ "]    c #F00F0F",
+ "^    c #FC1616",
+ "/    c #ED1212",
+ "(    c #B54A4A",
+ "_    c #FFFDFD",
+ ":    c #FF2121",
+ "<    c #FF4444",
+ "[    c #ECC4C4",
+ "}    c #EFA0A0",
+ "|    c #FE0606",
+ "1    c #A7A7A7",
+ "2    c #8F8F8F",
+ "3    c #C6C6C6",
+ "4    c #FFB8B8",
+ "5    c #F50B0B",
+ "6    c #FFDDDD",
+ "7    c #734B4B",
+ "8    c #5B5959",
+ "9    c #EBD0D0",
+ "0    c #C02D2D",
+ "a    c #D72727",
+ "b    c #FF5151",
+ "c    c #FF8E8E",
+ "d    c #FF3434",
+ "e    c #FF7979",
+ "f    c #F84646",
+ "g    c #E7E1E1",
+ "h    c #6D6D6D",
+ "i    c #767676",
+ "j    c #FFE5E5",
+ "k    c #FC0808",
+ "l    c #978383",
+ "m    c #FF9898",
+ "n    c #FF1818",
+ "o    c #050000",
+ "p    c #956D6D",
+ "q    c #847E7E",
+ "r    c #EDBBBB",
+ "s    c #E21D1D",
+ "t    c #CC3333",
+ "u    c #FF8383",
+ "v    c #FF5858",
+ "w    c #FFF1F1",
+ "x    c #FF0A0A",
+ "y    c #510000",
+ "z    c #F5F5F5",
+ "A    c #EDB5B5",
+ "B    c #FE0707",
+ "C    c #908D8D",
+ "D    c #F81717",
+ "E    c #B60000",
+ "F    c #E9E8E8",
+ "G    c #F18B8B",
+ "H    c #FC1919",
+ "I    c #FFB5B5",
+ "J    c #FF1F1F",
+ "K    c #FFFBFB",
+ "L    c #FFBCBC",
+ "M    c #FE0000",
+ "N    c #E50000",
+ "O    c #E20000",
+ "P    c #F00000",
+ "Q    c #DF0000",
+ "R    c #4A0000",
+ "S    c #DC2B2B",
+ "T    c #DF6E6E",
+ "U    c #FFFEFE",
+ "V    c #D10000",
+ "                        ",
+ "                        ",
+ "                        ",
+ ".............           ",
+ ".+@@@@@@@@@#$.          ",
+ "address@hidden          ",
+ ".@&**=%+*%*+%.          ",
+ "address@hidden          ",
+ ".@;>%,*+-............   ",
+ "address@hidden'))))))))))!.  ",
+ "address@hidden/(.))))))))_:<).  ",
+ "address@hidden|.)122&)3245~6.  ",
+ "address@hidden))))))))bcde.  ",
+ "address@hidden)h;)i23jklmno  ",
+ "address@hidden)))))))uv)wxy  ",
+ ".z~[%%AB.)122)2CD~~~~E  ",
+ ".$~[%FGH.))))))IJK))LM  ",
+ " .~NOPQR.)h;;)iST)32UV~ ",
+ "        .)))))))))))).  ",
+ "        .)122)223)&2).  ",
+ "        .)))))))))))).  ",
+ "        .!))))))))))!.  ",
+ "        ..............  ",
+ "                        "};
Index: lisp/ediff-util.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/ediff-util.el,v
retrieving revision 1.68
diff -c -3 -p -r1.68 ediff-util.el
*** lisp/ediff-util.el  19 Feb 2006 03:16:44 -0000      1.68
--- lisp/ediff-util.el  28 Mar 2006 18:42:31 -0000
***************
*** 30,36 ****
  ;; Compiler pacifier
  (defvar ediff-patch-diagnostics)
  (defvar ediff-patchbufer)
! (defvar ediff-use-toolbar-p)
  (defvar ediff-toolbar-height)
  (defvar ediff-toolbar)
  (defvar ediff-toolbar-3way)
--- 30,36 ----
  ;; Compiler pacifier
  (defvar ediff-patch-diagnostics)
  (defvar ediff-patchbufer)
! (defvar ediff-use-toolbar-p t)
  (defvar ediff-toolbar-height)
  (defvar ediff-toolbar)
  (defvar ediff-toolbar-3way)
*************** to invocation.")
*** 147,156 ****
--- 147,166 ----
    (setq ediff-mode-map nil)
    (ediff-set-keys))
  
+ (defun ediff-add-buttons ()
+   (require 'cus-edit)
+   (goto-char 1)
+   (set (make-local-variable 'widget-button-pressed-face) 
custom-button-pressed)
+   (mapc (lambda (arg) (widget-create arg)) ediff-button-list)
+   (when (ediff-multiframe-setup-p) (widget-insert "\n"))
+   (goto-char (point-min))
+   (widget-setup))
  
  (defun ediff-setup-keymap ()
    "Set up the keymap used in the control buffer of Ediff."
+   (require 'wid-edit)
    (setq ediff-mode-map (make-sparse-keymap))
+   (set-keymap-parent ediff-mode-map widget-keymap)
    (suppress-keymap ediff-mode-map)
  
    (define-key ediff-mode-map
*************** to invocation.")
*** 254,259 ****
--- 264,271 ----
        ))
  
    (define-key ediff-mode-map "m" 'ediff-toggle-wide-display)
+   
+ ;  (add-hook 'ediff-after-setup-control-frame-hook 'ediff-add-buttons)
  
    ;; Allow ediff-mode-map to be referenced indirectly
    (fset 'ediff-mode-map ediff-mode-map)
*************** to invocation.")
*** 566,574 ****
      (erase-buffer)
      (ediff-set-help-message)
      (insert ediff-help-message)
!     (shrink-window-if-larger-than-buffer)
!     (or (ediff-multiframe-setup-p)
!       (ediff-indent-help-message))
      (ediff-set-help-overlays)
  
      (set-buffer-modified-p nil)
--- 578,586 ----
      (erase-buffer)
      (ediff-set-help-message)
      (insert ediff-help-message)
! ;;     (shrink-window-if-larger-than-buffer)
!     (unless (or (ediff-multiframe-setup-p) ediff-use-toolbar-p)
!       (ediff-indent-help-message))
      (ediff-set-help-overlays)
  
      (set-buffer-modified-p nil)
*************** to invocation.")
*** 587,592 ****
--- 599,605 ----
      ;; In multiframe, toolbar is set in ediff-setup-control-frame
      (if (not (ediff-multiframe-setup-p))
        (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested
+     (shrink-window-if-larger-than-buffer)
      (goto-char (point-min))
      (skip-chars-forward ediff-whitespace)))
  
*************** if necessary."
*** 761,767 ****
  Reestablish the default three-window display."
    (interactive)
    (ediff-barf-if-not-control-buffer)
!   (let (buffer-read-only)
      (if (and (ediff-buffer-live-p ediff-buffer-A)
             (ediff-buffer-live-p ediff-buffer-B)
             (or (not ediff-3way-job)
--- 774,781 ----
  Reestablish the default three-window display."
    (interactive)
    (ediff-barf-if-not-control-buffer)
!   (let ((inhibit-read-only t)
!       (buffer-read-only nil))
      (if (and (ediff-buffer-live-p ediff-buffer-A)
             (ediff-buffer-live-p ediff-buffer-B)
             (or (not ediff-3way-job)
*************** Reestablish the default three-window dis
*** 832,838 ****
                ;; never grab mouse on quit in this place
                (ediff-reset-mouse
                 control-frame
!                (eq this-command 'ediff-quit))))
          ))
  
      (or no-rehighlight
--- 846,852 ----
                ;; never grab mouse on quit in this place
                (ediff-reset-mouse
                 control-frame
!                (or (ediff-use-toolbar-p) (eq this-command 'ediff-quit)))))
          ))
  
      (or no-rehighlight
*************** In both cases, operates on the current d
*** 1008,1014 ****
    "Toggle short/long help message."
    (interactive)
    (ediff-barf-if-not-control-buffer)
!   (let (buffer-read-only)
      (erase-buffer)
      (setq ediff-use-long-help-message (not ediff-use-long-help-message))
      (ediff-set-help-message))
--- 1022,1029 ----
    "Toggle short/long help message."
    (interactive)
    (ediff-barf-if-not-control-buffer)
!   (let ((inhibit-read-only t)
!       (buffer-read-only nil))
      (erase-buffer)
      (setq ediff-use-long-help-message (not ediff-use-long-help-message))
      (ediff-set-help-message))
*************** To change the default, set the variable 
*** 1385,1391 ****
                  (set-specifier bottom-toolbar-visible-p (list frame t))
                  (set-specifier bottom-toolbar-height
                                 (list frame ediff-toolbar-height)))
!               nil ; emacs
                )
               )
              ((ediff-has-toolbar-support-p)
--- 1400,1406 ----
                  (set-specifier bottom-toolbar-visible-p (list frame t))
                  (set-specifier bottom-toolbar-height
                                 (list frame ediff-toolbar-height)))
!               (ediff-add-buttons) ; emacs
                )
               )
              ((ediff-has-toolbar-support-p)
Index: lisp/ediff-wind.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/ediff-wind.el,v
retrieving revision 1.45
diff -c -3 -p -r1.45 ediff-wind.el
*** lisp/ediff-wind.el  19 Feb 2006 03:16:44 -0000      1.45
--- lisp/ediff-wind.el  28 Mar 2006 18:42:31 -0000
***************
*** 57,69 ****
  
  (require 'ediff-init)
  
  ;; be careful with ediff-tbar
  (if ediff-xemacs-p
      (condition-case nil
        (require 'ediff-tbar)
        (error
!        (defun ediff-compute-toolbar-width () 0)))
!   (defun ediff-compute-toolbar-width () 0))
  
  (defgroup ediff-window nil
    "Ediff window manipulation."
--- 57,137 ----
  
  (require 'ediff-init)
  
+ (defvar ediff-button-list 
+   '((push-button
+      :tag "prev"
+      :help-echo "Go to previous difference"
+      :tag-glyph "prev-node"
+      :action (lambda (widget &optional e) (ediff-previous-difference 1)))
+     (push-button
+      :tag "next"
+      :help-echo "Go to next difference"
+      :tag-glyph "next-node"
+      :action (lambda (widget &optional e) (ediff-next-difference 1)))
+     (push-button
+      :tag "A->B"
+      :help-echo "Copy difference from A to B"
+      :tag-glyph "copy-A-B"
+      :action (lambda (widget &optional event) (ediff-copy-A-to-B nil)))
+     (push-button
+      :tag "B->A"
+      :help-echo "Copy difference from B to A"
+      :tag-glyph "copy-B-A"
+      :action (lambda (widget &optional event) (ediff-copy-B-to-A nil)))
+     (push-button
+      :tag "Refine"
+      :help-echo "Refine difference"
+      :tag-glyph "tmp-ediff-refine"
+      :action (lambda (widget &optional event)
+              (ediff-make-or-kill-fine-diffs 'make-them)))
+     (push-button
+      :tag "Toggle split"
+      :help-echo "Toggle vertical/horizontal split"
+      :tag-glyph "tmp-ediff-toggle-split"
+      :action (lambda (widget &optional event) (ediff-toggle-split)))
+     (push-button
+      :tag "Revert-A"
+      :help-echo "Revert change in buffer A"
+      :tag-glyph "ediff-revert-A"
+      :action (lambda (widget &optional event) (ediff-restore-diff nil ?A)))
+     (push-button
+      :tag "Revert-B"
+      :help-echo "Revert change in buffer B"
+      :tag-glyph "ediff-revert-B"
+      :action (lambda (widget &optional event) (ediff-restore-diff nil ?B)))
+     (push-button
+      :tag "Help"
+      :help-echo "Ediff help"
+      :tag-glyph "help"
+      :action (lambda (widget &optional event)  (ediff-toggle-help)))
+     (push-button
+      :tag "quit"
+      :help-echo "Ediff quit"
+      :tag-glyph "exit"
+      :action (lambda (widget &optional event) (ediff-quit nil)))))
+ 
+ (defvar ediff-toolbar-width 
+   (if ediff-xemacs-p
+       200.0
+     (* 25 (length ediff-button-list)))
+   "The width of the Ediff toolbar.
+ The value must match the actual width of the toolbar.
+ Here's an example:
+     There are 10 buttons, each 15 pixels large, and the shadows occupy 2
+    pixels each side, and the last button is right-justified (so we reserve
+    about 30 pixels for fill space) = 200 pixels.")
+ 
  ;; be careful with ediff-tbar
  (if ediff-xemacs-p
      (condition-case nil
        (require 'ediff-tbar)
        (error
!        (defun ediff-compute-toolbar-width () 0))
!       )
!   (defun ediff-compute-toolbar-width ()
!     (if (ediff-use-toolbar-p)
!       (ceiling (/ ediff-toolbar-width (frame-char-width)))
!       0)))
  
  (defgroup ediff-window nil
    "Ediff window manipulation."
*************** In this case, Ediff will use those frame
*** 158,163 ****
--- 226,233 ----
     '(scrollbar-height . 0)        ; XEmacs only
     '(menu-bar-lines . 0)          ; Emacs only
     '(tool-bar-lines . 0)          ; Emacs 21+ only
+    '(left-fringe    . 0)
+    '(right-fringe   . 0)
     ;; don't lower but auto-raise
     '(auto-lower . nil)
     '(auto-raise . t)
*************** into icons, regardless of the window man
*** 359,365 ****
      (delete-other-windows)
      (split-window-vertically)
      (ediff-select-lowest-window)
!     (ediff-setup-control-buffer control-buffer)
  
      ;; go to the upper window and split it betw A, B, and possibly C
      (other-window 1)
--- 429,435 ----
      (delete-other-windows)
      (split-window-vertically)
      (ediff-select-lowest-window)
! ;;     (ediff-setup-control-buffer control-buffer)
  
      ;; go to the upper window and split it betw A, B, and possibly C
      (other-window 1)
*************** into icons, regardless of the window man
*** 418,424 ****
      (delete-other-windows)
      (split-window-vertically)
      (ediff-select-lowest-window)
!     (ediff-setup-control-buffer control-buffer)
  
      ;; go to the upper window and split it betw A, B, and possibly C
      (other-window 1)
--- 488,494 ----
      (delete-other-windows)
      (split-window-vertically)
      (ediff-select-lowest-window)
! ;;     (ediff-setup-control-buffer control-buffer)
  
      ;; go to the upper window and split it betw A, B, and possibly C
      (other-window 1)
*************** into icons, regardless of the window man
*** 943,949 ****
               dont-iconify-ctl-frame))
  
      ;; 1 more line for the modeline
!     (setq lines (1+ (count-lines (point-min) (point-max)))
          fheight lines
          fwidth (max (+ (ediff-help-message-line-length) 2)
                      (ediff-compute-toolbar-width))
--- 1013,1020 ----
               dont-iconify-ctl-frame))
  
      ;; 1 more line for the modeline
!     (setq lines (+ 1 (count-lines (point-min) (point-max))  
!                   (if (and ediff-emacs-p ediff-use-toolbar-p) 2 0))
          fheight lines
          fwidth (max (+ (ediff-help-message-line-length) 2)
                      (ediff-compute-toolbar-width))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]