summaryrefslogtreecommitdiff
path: root/apt-private/private-output.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-05-05 17:13:24 +0200
committerMichael Vogt <mvo@ubuntu.com>2014-05-05 17:13:24 +0200
commitb4278cc96fa0184b4f522e2bcfe82bd8eba93595 (patch)
tree59969ad6463918810ca264854615e8b2cfdf0bad /apt-private/private-output.cc
parentf3594b9de99745c84563bac3ef59a159e30d4cd8 (diff)
parent3fa4e98f62e469f4292d2811b4e15f4afb678fbd (diff)
Merge branch 'debian/sid' into ubuntu/master
Conflicts: configure.ac debian/apt.dirs debian/changelog
Diffstat (limited to 'apt-private/private-output.cc')
-rw-r--r--apt-private/private-output.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc
index 757999167..7f3eef6c2 100644
--- a/apt-private/private-output.cc
+++ b/apt-private/private-output.cc
@@ -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");