]> git.saurik.com Git - apt.git/blobdiff - apt-private/private-output.cc
EDSP: bump protocol version to 0.5
[apt.git] / apt-private / private-output.cc
index 757999167fc280492154980b8d45c58f82950293..7f3eef6c26649b4aff21bcb47229f2355fc2a07d 100644 (file)
@@ -22,6 +22,7 @@
 #include <iostream>
 #include <langinfo.h>
 #include <unistd.h>
+#include <signal.h>
 
 #include <apti18n.h>
                                                                        /*}}}*/
@@ -32,8 +33,24 @@ std::ostream c0out(0);
 std::ostream c1out(0);
 std::ostream c2out(0);
 std::ofstream devnull("/dev/null");
+
+
 unsigned int ScreenWidth = 80 - 1; /* - 1 for the cursor */
 
+// SigWinch - Window size change signal handler                                /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void SigWinch(int)
+{
+   // Riped from GNU ls
+#ifdef TIOCGWINSZ
+   struct winsize ws;
+  
+   if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5)
+      ScreenWidth = ws.ws_col - 1;
+#endif
+}
+                                                                       /*}}}*/
 bool InitOutput()                                                      /*{{{*/
 {
    if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
@@ -47,6 +64,10 @@ bool InitOutput()                                                    /*{{{*/
    if (_config->FindI("quiet",0) > 1)
       c1out.rdbuf(devnull.rdbuf());
 
+   // deal with window size changes
+   signal(SIGWINCH,SigWinch);
+   SigWinch(0);
+
    if(!isatty(1))
    {
       _config->Set("APT::Color", "false");