Context: Combined interactive.cpp and Context.cpp

This commit is contained in:
Paul Beckingham 2016-02-24 23:26:39 -05:00
parent 19b2151f12
commit bfefd247c4
3 changed files with 72 additions and 106 deletions

View file

@ -42,10 +42,18 @@
#include <util.h>
#include <main.h>
#include <i18n.h>
#ifdef HAVE_COMMIT
#include <commit.h>
#endif
#include <stdio.h>
#include <sys/ioctl.h>
#ifdef SOLARIS
#include <sys/termios.h>
#endif
// Supported modifiers, synonyms on the same line.
static const char* modifierNames[] =
{
@ -469,6 +477,70 @@ int Context::dispatch (std::string &out)
return commands["help"]->execute (out);
}
////////////////////////////////////////////////////////////////////////////////
int Context::getWidth ()
{
// Determine window size.
int width = config.getInteger ("defaultwidth");
// A zero width value means 'infinity', which is approximated here by 2^16.
if (width == 0)
return 65536;
if (config.getBoolean ("detection"))
{
if (terminal_width == 0 &&
terminal_height == 0)
{
unsigned short buff[4];
if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &buff) != -1)
{
terminal_height = buff[0];
terminal_width = buff[1];
}
}
width = terminal_width;
// Ncurses does this, and perhaps we need to as well, to avoid a problem on
// Cygwin where the display goes right up to the terminal width, and causes
// an odd color wrapping problem.
if (config.getBoolean ("avoidlastcolumn"))
--width;
}
return width;
}
////////////////////////////////////////////////////////////////////////////////
int Context::getHeight ()
{
// Determine window size.
int height = config.getInteger ("defaultheight");
// A zero height value means 'infinity', which is approximated here by 2^16.
if (height == 0)
return 65536;
if (config.getBoolean ("detection"))
{
if (terminal_width == 0 &&
terminal_height == 0)
{
unsigned short buff[4];
if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &buff) != -1)
{
terminal_height = buff[0];
terminal_width = buff[1];
}
}
height = terminal_height;
}
return height;
}
////////////////////////////////////////////////////////////////////////////////
bool Context::color ()
{