]> git.eshelyaron.com Git - emacs.git/commitdiff
src/sysdep.c (get_tty_size) [WINDOWSNT]: Implement.
authorJuanma Barranquero <lekktu@gmail.com>
Mon, 2 May 2011 03:57:02 +0000 (05:57 +0200)
committerJuanma Barranquero <lekktu@gmail.com>
Mon, 2 May 2011 03:57:02 +0000 (05:57 +0200)
Fixes: debbugs:8596
src/ChangeLog
src/sysdep.c

index 2137c133f540f3e2049daf76b56c4cd9c97a115d..1231099fff3e45ea40b2239886857f227e648e45 100644 (file)
@@ -1,3 +1,7 @@
+2011-05-02  Juanma Barranquero  <lekktu@gmail.com>
+
+       * sysdep.c (get_tty_size) [WINDOWSNT]: Implement.  (Bug#8596)
+
 2011-05-02  Juanma Barranquero  <lekktu@gmail.com>
 
        * gnutls.c (Qgnutls_log_level, Qgnutls_code, Qgnutls_anon)
index ea9a25cc6e78e3769f0574a55e7fcf3045732688..462e03879c665667ee3c1e55d3db09c4e84c7195 100644 (file)
@@ -1125,8 +1125,7 @@ tabs_safe_p (int fd)
 void
 get_tty_size (int fd, int *widthp, int *heightp)
 {
-
-#ifdef TIOCGWINSZ
+#if defined TIOCGWINSZ
 
   /* BSD-style.  */
   struct winsize size;
@@ -1139,8 +1138,7 @@ get_tty_size (int fd, int *widthp, int *heightp)
       *heightp = size.ws_row;
     }
 
-#else
-#ifdef TIOCGSIZE
+#elif defined TIOCGSIZE
 
   /* SunOS - style.  */
   struct ttysize size;
@@ -1153,16 +1151,28 @@ get_tty_size (int fd, int *widthp, int *heightp)
       *heightp = size.ts_lines;
     }
 
-#else
-#ifdef MSDOS
+#elif defined WINDOWSNT
+
+  CONSOLE_SCREEN_BUFFER_INFO info;
+  if (GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &info))
+    {
+      *widthp = info.srWindow.Right - info.srWindow.Left + 1;
+      *heightp = info.srWindow.Bottom - info.srWindow.Top + 1;
+    }
+  else
+    *widthp = *heightp = 0;
+
+#elif defined MSDOS
+
   *widthp = ScreenCols ();
   *heightp = ScreenRows ();
+
 #else /* system doesn't know size */
+
   *widthp = 0;
   *heightp = 0;
+
 #endif
-#endif /* not SunOS-style */
-#endif /* not BSD-style */
 }
 
 /* Set the logical window size associated with descriptor FD