  Allow the color dialog to set colors for JUST the current tab of its
  owner window

diff -ur nedit_official nedit_mod
diff -ur nedit_official/source/preferences.c nedit_mod/source/preferences.c
--- nedit_official/source/preferences.c	2004-11-26 13:25:51.000000000 -0500
+++ nedit_mod/source/preferences.c	2004-12-02 17:22:12.480535000 -0500
@@ -1068,10 +1068,11 @@
 static int verifyAllColors (colorDialog *cd);
 static void showColorStatus (colorDialog *cd, Widget colorFieldW,
       Widget errorLabelW);
-static void updateColors(colorDialog *cd);
+static void updateColors(colorDialog *cd, Boolean isForAll);
 static void colorDestroyCB(Widget w, XtPointer clientData, XtPointer callData);
 static void colorOkCB     (Widget w, XtPointer clientData, XtPointer callData);
 static void colorApplyCB  (Widget w, XtPointer clientData, XtPointer callData);
+static void colorApplyWinCB(Widget w, XtPointer clientData, XtPointer callData);
 static void colorCloseCB(Widget w, XtPointer clientData, XtPointer callData);
 static void textFgModifiedCB  (Widget w, XtPointer clientData,
       XtPointer callData);
@@ -5730,7 +5731,7 @@
 }
 
 /* Update the colors in the window or in the preferences */
-static void updateColors(colorDialog *cd)
+static void updateColors(colorDialog *cd, Boolean isForAll)
 {
     WindowInfo *window;
     
@@ -5745,10 +5746,15 @@
 
     for (window = WindowList; window != NULL; window = window->next)
     {
+        if (isForAll || window == GetActiveDocument())
+        {
         SetColors(window, textFg, textBg, selectFg, selectBg, hiliteFg, 
                 hiliteBg, lineNoFg, cursorFg);
     }
+    }
 
+    if (isForAll)
+    {
     SetPrefColorName(TEXT_FG_COLOR  , textFg  );
     SetPrefColorName(TEXT_BG_COLOR  , textBg  );
     SetPrefColorName(SELECT_FG_COLOR, selectFg);
@@ -5757,6 +5763,7 @@
     SetPrefColorName(HILITE_BG_COLOR, hiliteBg);
     SetPrefColorName(LINENO_FG_COLOR, lineNoFg);
     SetPrefColorName(CURSOR_FG_COLOR, cursorFg);
+    }
 
     XtFree(textFg);
     XtFree(textBg);
@@ -5783,21 +5790,27 @@
 
 static void colorOkCB(Widget w, XtPointer clientData, XtPointer callData)
 {
+    colorApplyCB(w, clientData, callData);
+    colorCloseCB(w, clientData, callData);
+}
+
+static void colorApplyCB(Widget w, XtPointer clientData, XtPointer callData)
+{
     colorDialog *cd = (colorDialog *)clientData;
     
     if(!verifyAllColors(cd))
     {
         DialogF(DF_ERR, w, 1, "Invalid Colors",
-                "All colors must be valid to proceed.", "OK");
+                "All colors must be valid to applied.", "OK");
         return;
     }
-    updateColors(cd);
+    updateColors(cd, True);
 
     /* pop down and destroy the dialog */
     XtDestroyWidget(cd->shell);
 }
 
-static void colorApplyCB(Widget w, XtPointer clientData, XtPointer callData)
+static void colorApplyWinCB(Widget w, XtPointer clientData, XtPointer callData)
 {
     colorDialog *cd = (colorDialog *)clientData;
     
@@ -5807,7 +5820,7 @@
                 "All colors must be valid to be applied.", "OK");
         return;
     }
-    updateColors(cd);
+    updateColors(cd, False);
 }
 
 static void colorCloseCB(Widget w, XtPointer clientData, XtPointer callData)
@@ -5888,7 +5901,7 @@
 void ChooseColors(WindowInfo *window)
 {
     Widget form, tmpW, topW, infoLbl;
-    Widget okBtn, applyBtn, closeBtn;
+    Widget okBtn, applyBtn, applyWBtn, closeBtn;
     colorDialog *cd;
     XmString s1;
     int ac;
@@ -5986,7 +5999,7 @@
             XmNleftAttachment, XmATTACH_FORM,
             XmNrightAttachment, XmATTACH_FORM, NULL);
     
-    /* The OK, Apply, and Cancel buttons */
+    /* The OK, Apply, Apply Window, and Cancel buttons */
     okBtn = XtVaCreateManagedWidget("ok",
             xmPushButtonWidgetClass, form,
             XmNlabelString, s1=XmStringCreateSimple("OK"),
@@ -5995,9 +6008,9 @@
             XmNtopWidget, tmpW,
             XmNtopOffset, MARGIN_SPACING,
             XmNleftAttachment, XmATTACH_POSITION,
-            XmNleftPosition, 10,
+            XmNleftPosition, 4,
             XmNrightAttachment, XmATTACH_POSITION,
-            XmNrightPosition, 30,
+            XmNrightPosition, 24,
             NULL);
     XtAddCallback(okBtn, XmNactivateCallback, colorOkCB, cd);
     XmStringFree(s1);
@@ -6010,12 +6023,26 @@
           XmNtopOffset, MARGIN_SPACING,
           XmNmnemonic, 'A',
           XmNleftAttachment, XmATTACH_POSITION,
-          XmNleftPosition, 40,
+          XmNleftPosition, 28,
           XmNrightAttachment, XmATTACH_POSITION,
-          XmNrightPosition, 60, NULL);
+          XmNrightPosition, 48, NULL);
     XtAddCallback(applyBtn, XmNactivateCallback, colorApplyCB, cd);
     XmStringFree(s1);
     
+    applyWBtn = XtVaCreateManagedWidget(
+            "applyWin", xmPushButtonWidgetClass, form,
+          XmNlabelString, s1=XmStringCreateSimple("Apply Window"),
+          XmNtopAttachment, XmATTACH_WIDGET,
+          XmNtopWidget, tmpW,
+          XmNtopOffset, MARGIN_SPACING,
+          XmNmnemonic, 'W',
+          XmNleftAttachment, XmATTACH_POSITION,
+          XmNleftPosition, 52,
+          XmNrightAttachment, XmATTACH_POSITION,
+          XmNrightPosition, 72, NULL);
+    XtAddCallback(applyWBtn, XmNactivateCallback, colorApplyWinCB, cd);
+    XmStringFree(s1);
+
     closeBtn = XtVaCreateManagedWidget("close",
             xmPushButtonWidgetClass, form,
             XmNlabelString, s1=XmStringCreateSimple("Close"),
@@ -6023,9 +6050,9 @@
             XmNtopWidget, tmpW,
             XmNtopOffset, MARGIN_SPACING,
             XmNleftAttachment, XmATTACH_POSITION,
-            XmNleftPosition, 70,
+            XmNleftPosition, 76,
             XmNrightAttachment, XmATTACH_POSITION,
-            XmNrightPosition, 90,
+            XmNrightPosition, 96,
             NULL);
     XtAddCallback(closeBtn, XmNactivateCallback, colorCloseCB, cd);
     XmStringFree(s1);
diff -ur nedit_official/source/window.c nedit_mod/source/window.c
--- nedit_official/source/window.c	2004-10-18 15:27:25.000000000 -0400
+++ nedit_mod/source/window.c	2004-12-02 17:22:12.530503000 -0500
@@ -3706,6 +3706,14 @@
 }
 
 /*
+** return the active buffer
+*/
+WindowInfo *GetActiveDocument()
+{
+    return inFocusDocument;
+}
+
+/*
 ** Bring up the next window by tab order
 */
 void NextDocument(WindowInfo *window)
diff -ur nedit_official/source/window.h nedit_mod/source/window.h
--- nedit_official/source/window.h	2004-11-09 16:58:45.000000000 -0500
+++ nedit_mod/source/window.h	2004-12-02 17:22:12.560497000 -0500
@@ -86,6 +86,7 @@
 void DeleteDocument(WindowInfo *window);
 WindowInfo *MarkLastDocument(WindowInfo *window);
 WindowInfo *MarkActiveDocument(WindowInfo *window);
+WindowInfo *GetActiveDocument();
 void NextDocument(WindowInfo *window);
 void PreviousDocument(WindowInfo *window);
 void LastDocument(WindowInfo *window);
