diff -u -ruN screen-4.0.3/doc/screen.1 screen-4.0.3-local/doc/screen.1
--- screen-4.0.3/doc/screen.1	2011-05-07 13:59:32.000000000 -0400
+++ screen-4.0.3-local/doc/screen.1	2011-05-07 13:59:49.000000000 -0400
@@ -3270,6 +3270,8 @@
 day number
 .IP D
 weekday name
+.IP E
+sets %? to true if the session has seen an escape character
 .IP f
 flags of the window
 .IP F
diff -u -ruN screen-4.0.3/doc/screen.texinfo screen-4.0.3-local/doc/screen.texinfo
--- screen-4.0.3/doc/screen.texinfo	2011-05-07 13:59:32.000000000 -0400
+++ screen-4.0.3-local/doc/screen.texinfo	2011-05-07 13:59:49.000000000 -0400
@@ -4736,6 +4736,8 @@
 day number
 @item D
 weekday name
+@item E
+sets %? to true if the session has seen an escape character
 @item f
 flags of the window
 @item F
diff -u -ruN screen-4.0.3/process.c screen-4.0.3-local/process.c
--- screen-4.0.3/process.c	2011-05-07 13:59:32.000000000 -0400
+++ screen-4.0.3-local/process.c	2011-05-07 13:59:49.000000000 -0400
@@ -809,12 +809,19 @@
 	  if (slen)
 	    DoProcess(fore, &ibuf, &slen, 0);
 	  if (--ilen == 0)
+	  {
 	    D_ESCseen = ktab;
+	    WindowChanged(fore, 'E');
+	  }
 	}
       if (ilen <= 0)
         return;
       ktabp = D_ESCseen ? D_ESCseen : ktab;
-      D_ESCseen = 0;
+      if (D_ESCseen)
+        {
+          D_ESCseen = 0;
+          WindowChanged(fore, 'E');
+        }
       ch = (unsigned char)*s;
 
       /* 
@@ -1680,10 +1687,18 @@
 	    }
 	  if (D_ESCseen != ktab || ktabp != ktab)
 	    {
-	      D_ESCseen = ktabp;
+	      if (D_ESCseen != ktabp)
+	        {
+	          D_ESCseen = ktabp;
+	          WindowChanged(fore, 'E');
+	        }
 	      break;
 	    }
-	  D_ESCseen = 0;
+	  if (D_ESCseen)
+	    {
+	      D_ESCseen = 0;
+	      WindowChanged(fore, 'E');
+	    }
 	}
       /* FALLTHROUGH */
     case RC_OTHER:
diff -u -ruN screen-4.0.3/screen.c screen-4.0.3-local/screen.c
--- screen-4.0.3/screen.c	2011-05-07 13:59:32.000000000 -0400
+++ screen-4.0.3-local/screen.c	2011-05-07 13:59:49.000000000 -0400
@@ -2607,6 +2607,13 @@
 	  if (display && ((ev && ev == &D_forecv->c_captev) || (!ev && win && win == D_fore)))
 	    qmflag = 1;
 	  break;
+	case 'E':
+	  p--;
+	  if (display && D_ESCseen)
+	    {
+	      qmflag = 1;
+	    }
+	  break;
 	case '>':
 	  truncpos = p - winmsg_buf;
 	  truncper = num > 100 ? 100 : num;
