ENH: Add method to retrieve the terminal width

This commit is contained in:
Andy Cedilnik 2004-09-16 10:58:56 -04:00
parent d349d6ff18
commit 6a4071b5d2
2 changed files with 41 additions and 0 deletions

View File

@ -35,6 +35,8 @@
#include <stdlib.h>
#include <sys/param.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <unistd.h>
#endif
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__))
@ -1846,6 +1848,38 @@ bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, kwsys_stl::string& l
return haveData;
}
int SystemTools::GetTerminalWidth()
{
int width = -1;
#ifndef _WIN32
struct winsize ws;
char *columns; /* Unix98 environment variable */
if(ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col>0 && ws.ws_row>0)
{
width = ws.ws_col;
}
if(!isatty(STDOUT_FILENO))
{
width = -1;
}
columns = getenv("COLUMNS");
if(columns && *columns)
{
long t;
char *endptr;
t = strtol(columns, &endptr, 0);
if(endptr && !*endptr && (t>0) && (t<1000))
{
width = (int)t;
}
}
if ( width < 9 )
{
width = -1;
}
#endif
return width;
}
} // namespace KWSYS_NAMESPACE
#if defined(_MSC_VER) && defined(_DEBUG)

View File

@ -276,6 +276,13 @@ public:
*/
static bool GetLineFromStream(kwsys_ios::istream& istr, kwsys_stl::string& line,
bool* has_newline=0);
/**
* Get the width of the terminal window. The code may or may not work, so
* make sure you have some resonable defaults prepared if the code returns
* some bogus size.
*/
static int GetTerminalWidth();
protected:
// these two functions can be called from ConvertToOutputPath