OSDN Git Service

* fhandler.h (fhandler_console): Add additional argument to char_command
authorcgf <cgf>
Fri, 15 Dec 2000 04:42:20 +0000 (04:42 +0000)
committercgf <cgf>
Fri, 15 Dec 2000 04:42:20 +0000 (04:42 +0000)
method.
* fhandler_console.cc (fhandler_console::read): Revert previously misapplied
patch.
(fhandler_console::char_command): Add a second argument.
(fhandler_console::write): Recognize when a '?' is found after a <esc>[.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc

index d28486f..508f05d 100644 (file)
@@ -1,3 +1,13 @@
+Thu Dec 14 23:37:51 2000  Christopher Faylor <cgf@cygnus.com>
+
+       * fhandler.h (fhandler_console): Add additional argument to
+       char_command method.
+       * fhandler_console.cc (fhandler_console::read): Revert previously
+       misapplied patch.
+       (fhandler_console::char_command): Add a second argument.
+       (fhandler_console::write): Recognize when a '?' is found after a
+       <esc>[.
+
 Tue Dec  5 17:06:00 2000  Corinna Vinschen <corinna@vinschen.de>
 
        * net.cc (cygwin_rexec): Eliminate superfluous call to
index 9010a17..27a5cb9 100644 (file)
@@ -595,7 +595,7 @@ private:
   void cursor_get (int *, int *);
   void cursor_rel (int, int);
   const unsigned char * write_normal (unsigned const char*, unsigned const char *);
-  void char_command (char);
+  void char_command (char, bool);
   int output_tcsetattr (int a, const struct termios *t);
 
 /* Input calls */
index 270e385..22a88ed 100644 (file)
@@ -193,139 +193,50 @@ fhandler_console::read (void *pv, size_t buflen)
          return -1;            /* seems to be failure */
        }
 
-      /* check the event that occurred */
-      switch (input_rec.EventType)
-       {
-       case KEY_EVENT:
-         if (!input_rec.Event.KeyEvent.bKeyDown)
-           continue;
-
 #define ich (input_rec.Event.KeyEvent.uChar.AsciiChar)
 #define wch (input_rec.Event.KeyEvent.uChar.UnicodeChar)
 
-         if (wch == 0 ||
-             /* arrow/function keys */
-             (input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY))
-           {
-             toadd = get_nonascii_key (input_rec, tmp);
-             if (!toadd)
-               continue;
-             nread = strlen (toadd);
-           }
-         else
-           {
-             tmp[1] = ich;
-             /* Need this check since US code page seems to have a bug when
-                converting a CTRL-U. */
-         if ((unsigned char)ich > 0x7f && current_codepage == ansi_cp)
-               OemToCharBuff (tmp + 1, tmp + 1, 1);
-             if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED))
-               toadd = tmp + 1;
-             else
-               {
-                 tmp[0] = '\033';
-                 tmp[1] = cyg_tolower (tmp[1]);
-                 toadd = tmp;
-                 nread++;
-               }
-           }
-#undef ich
-#undef wch
-         break;
-
-       case MOUSE_EVENT:
-         {
-           MOUSE_EVENT_RECORD & mouse_event = input_rec.Event.MouseEvent;
-
-           /* Treat the double-click event like a regular button press */
-           if (mouse_event.dwEventFlags == DOUBLE_CLICK)
-             {
-               syscall_printf("mouse: double-click -> click");
-               mouse_event.dwEventFlags = 0;
-             }
-
-           /* Did something other than a click occur? */
-           if (mouse_event.dwEventFlags)
-             continue;
-
-           /* If the mouse event occurred out of the area we can handle,
-              ignore it. */
-           int x = mouse_event.dwMousePosition.X;
-           int y = mouse_event.dwMousePosition.Y;
-           if ((x + ' ' + 1 > 0xFF) || (y + ' ' + 1 > 0xFF))
-             {
-               syscall_printf("mouse: position out of range");
-               continue;
-             }
-
-           /* Ignore unimportant mouse buttons */
-           mouse_event.dwButtonState &= 0x7;
-
-           /* This code assumes Windows never reports multiple button
-              events at the same time. */
-           static DWORD dwLastButtonState = 0;
-           int b = 0;
-           char sz[32];
-           if (mouse_event.dwButtonState == dwLastButtonState)
-             {
-               syscall_printf("mouse: button state unchanged");
-               continue;
-             }
-           else if (mouse_event.dwButtonState < dwLastButtonState)
-             {
-               b = 3;
-               strcpy(sz, "btn up");
-             }
-           else if ((mouse_event.dwButtonState & 1) != (dwLastButtonState & 1))
-             {
-               b = 0;
-               strcpy(sz, "btn1 down");
-             }
-           else if ((mouse_event.dwButtonState & 2) != (dwLastButtonState & 2))
-             {
-               b = 1;
-               strcpy(sz, "btn2 down");
-             }
-           else if ((mouse_event.dwButtonState & 4) != (dwLastButtonState & 4))
-             {
-               b = 2;
-               strcpy(sz, "btn3 down");
-             }
-
-           /* Remember the current button state */
-           dwLastButtonState = mouse_event.dwButtonState;
-
-           static int nModifiers = 0;
-           /* If a button was pressed, remember the modifiers */
-           if (b != 3)
-             {
-               nModifiers = 0;
-               if (mouse_event.dwControlKeyState & SHIFT_PRESSED)
-                 nModifiers |= 0x4;
-               if (mouse_event.dwControlKeyState & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED))
-                 nModifiers |= 0x8;
-               if (mouse_event.dwControlKeyState & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))
-                 nModifiers |= 0x10;
-             }
-
-           b |= nModifiers;
-
-           /* We can now create the code. */
-           sprintf(tmp, "\033[M%c%c%c", b + ' ', x + ' ' + 1, y + ' ' + 1);
-           syscall_printf("mouse: %s at (%d,%d)", sz, x, y);
-         }
-         break;
+      /* check if we're just disposing of this one */
 
-       case WINDOW_BUFFER_SIZE_EVENT:
+      if (input_rec.EventType == WINDOW_BUFFER_SIZE_EVENT)
+       {
          kill_pgrp (tc->getpgid (), SIGWINCH);
          continue;
+       }
+      if (input_rec.EventType != KEY_EVENT ||
+         !input_rec.Event.KeyEvent.bKeyDown)
+       continue;
 
-       default:
-         continue;
+      if (wch == 0 ||
+         /* arrow/function keys */
+         (input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY))
+       {
+         toadd = get_nonascii_key (input_rec, tmp);
+         if (!toadd)
+           continue;
+         nread = strlen (toadd);
+       }
+      else
+       {
+         tmp[1] = ich;
+         /* Need this check since US code page seems to have a bug when
+            converting a CTRL-U. */
+         if ((unsigned char)ich > 0x7f && current_codepage == ansi_cp)
+           OemToCharBuff (tmp + 1, tmp + 1, 1);
+         if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED))
+           toadd = tmp + 1;
+         else
+           {
+             tmp[0] = '\033';
+             tmp[1] = cyg_tolower (tmp[1]);
+             toadd = tmp;
+             nread++;
+           }
        }
 
       if (line_edit (toadd, nread))
        break;
+#undef ich
     }
 
   while (buflen)
@@ -471,7 +382,7 @@ fhandler_console::open (const char *, int flags, mode_t)
   if (GetConsoleMode (get_io_handle (), &cflags))
     {
       cflags |= ENABLE_PROCESSED_INPUT;
-      SetConsoleMode (get_io_handle (), ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | cflags);
+      SetConsoleMode (get_io_handle (), ENABLE_WINDOW_INPUT | cflags);
     }
 
   TTYCLEARF (RSTCONS);
@@ -634,7 +545,7 @@ fhandler_console::input_tcsetattr (int, struct termios const *t)
       tc->ti.c_lflag = 0;
     }
 
-  flags |= ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
+  flags |= ENABLE_WINDOW_INPUT;
 
   int res;
   if (flags == oflags)
@@ -857,7 +768,7 @@ static const char base_chars[256] =
 static int savex, savey; /* for CSI s, CSI u */
 
 void
-fhandler_console::char_command (char c)
+fhandler_console::char_command (char c, bool saw_question_mark)
 {
   // Keep the background intensity with the colr since there doesn't seem
   // to be a way to set this with termcap/terminfo.
@@ -1235,6 +1146,7 @@ fhandler_console::write (const void *vsrc, size_t len)
   unsigned const char *end = src + len;
   static NO_COPY unsigned rarg;
   static NO_COPY char my_title_buf[TITLESIZE + 1];
+  bool saw_question_mark = 0;
 
   debug_printf ("%x, %d", vsrc, len);
 
@@ -1312,7 +1224,7 @@ fhandler_console::write (const void *vsrc, size_t len)
            }
          break;
        case gotcommand:
-         char_command (*src++);
+         char_command (*src++, saw_question_mark);
          state_ = normal;
          break;
        case gotrsquare:
@@ -1359,6 +1271,8 @@ fhandler_console::write (const void *vsrc, size_t len)
            }
          else if (*src != '@' && !isalpha (*src) && !isdigit (*src))
            {
+             if (*src == '?')
+               saw_question_mark = 1;
              /* ignore any extra chars between [ and first arg or command */
              src++;
            }