Improvements for ansi terminal emulators
This commit is contained in:
parent
33c03cf6fc
commit
4da63ebcac
|
@ -1,4 +1,5 @@
|
||||||
2016-11-26 Markus Gans <guru.mail@muenster.de>
|
2016-11-26 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Improvements for ansi terminal emulators
|
||||||
* Add the opti-move test program
|
* Add the opti-move test program
|
||||||
* Optimized the terminal clear screen
|
* Optimized the terminal clear screen
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,7 @@ void FApplication::cmd_options ()
|
||||||
+ std::string(encoding.c_str()) );
|
+ std::string(encoding.c_str()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( std::strcmp(long_options[idx].name, "no-optimize-cursor") == 0 )
|
if ( std::strcmp(long_options[idx].name, "no-optimized-cursor") == 0 )
|
||||||
setCursorOptimisation (false);
|
setCursorOptimisation (false);
|
||||||
|
|
||||||
if ( std::strcmp(long_options[idx].name, "vgafont") == 0 )
|
if ( std::strcmp(long_options[idx].name, "vgafont") == 0 )
|
||||||
|
|
|
@ -35,6 +35,7 @@ bool FTerm::gpm_mouse_enabled;
|
||||||
bool FTerm::color256;
|
bool FTerm::color256;
|
||||||
bool FTerm::monochron;
|
bool FTerm::monochron;
|
||||||
bool FTerm::xterm_terminal;
|
bool FTerm::xterm_terminal;
|
||||||
|
bool FTerm::ansi_terminal;
|
||||||
bool FTerm::rxvt_terminal;
|
bool FTerm::rxvt_terminal;
|
||||||
bool FTerm::urxvt_terminal;
|
bool FTerm::urxvt_terminal;
|
||||||
bool FTerm::mlterm_terminal;
|
bool FTerm::mlterm_terminal;
|
||||||
|
@ -3055,6 +3056,7 @@ void FTerm::init()
|
||||||
kterm_terminal = \
|
kterm_terminal = \
|
||||||
gnome_terminal = \
|
gnome_terminal = \
|
||||||
kde_konsole = \
|
kde_konsole = \
|
||||||
|
ansi_terminal = \
|
||||||
rxvt_terminal = \
|
rxvt_terminal = \
|
||||||
urxvt_terminal = \
|
urxvt_terminal = \
|
||||||
mlterm_terminal = \
|
mlterm_terminal = \
|
||||||
|
@ -3110,6 +3112,12 @@ void FTerm::init()
|
||||||
if ( std::strncmp(termtype, "rxvt-cygwin-native", 18) == 0 )
|
if ( std::strncmp(termtype, "rxvt-cygwin-native", 18) == 0 )
|
||||||
rxvt_terminal = true;
|
rxvt_terminal = true;
|
||||||
|
|
||||||
|
if ( std::strncmp(termtype, "ansi", 4) == 0 )
|
||||||
|
{
|
||||||
|
terminal_detection = false;
|
||||||
|
ansi_terminal = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Test for Linux console
|
// Test for Linux console
|
||||||
if ( std::strncmp(termtype, const_cast<char*>("linux"), 5) == 0
|
if ( std::strncmp(termtype, const_cast<char*>("linux"), 5) == 0
|
||||||
|| std::strncmp(termtype, const_cast<char*>("con"), 3) == 0 )
|
|| std::strncmp(termtype, const_cast<char*>("con"), 3) == 0 )
|
||||||
|
|
|
@ -127,6 +127,7 @@ class FTerm
|
||||||
static bool hasASCII();
|
static bool hasASCII();
|
||||||
static bool isMonochron();
|
static bool isMonochron();
|
||||||
static bool isXTerminal();
|
static bool isXTerminal();
|
||||||
|
static bool isAnsiTerminal();
|
||||||
static bool isRxvtTerminal();
|
static bool isRxvtTerminal();
|
||||||
static bool isUrxvtTerminal();
|
static bool isUrxvtTerminal();
|
||||||
static bool isMltermTerminal();
|
static bool isMltermTerminal();
|
||||||
|
@ -339,6 +340,7 @@ class FTerm
|
||||||
static bool color256;
|
static bool color256;
|
||||||
static bool monochron;
|
static bool monochron;
|
||||||
static bool xterm_terminal;
|
static bool xterm_terminal;
|
||||||
|
static bool ansi_terminal;
|
||||||
static bool rxvt_terminal;
|
static bool rxvt_terminal;
|
||||||
static bool urxvt_terminal;
|
static bool urxvt_terminal;
|
||||||
static bool mlterm_terminal;
|
static bool mlterm_terminal;
|
||||||
|
@ -434,6 +436,10 @@ inline bool FTerm::isMonochron()
|
||||||
inline bool FTerm::isXTerminal()
|
inline bool FTerm::isXTerminal()
|
||||||
{ return xterm_terminal; }
|
{ return xterm_terminal; }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline bool FTerm::isAnsiTerminal()
|
||||||
|
{ return ansi_terminal; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FTerm::isRxvtTerminal()
|
inline bool FTerm::isRxvtTerminal()
|
||||||
{ return rxvt_terminal; }
|
{ return rxvt_terminal; }
|
||||||
|
|
|
@ -110,9 +110,9 @@ void FVTerm::setTermXY (register int x, register int y)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FVTerm::clearTerm()
|
void FVTerm::clearTerm (int fillchar)
|
||||||
{
|
{
|
||||||
// Clear the physical terminal and put cursor at home
|
// Clear the real terminal and put cursor at home
|
||||||
char*& cl = tcap[fc::t_clear_screen].string;
|
char*& cl = tcap[fc::t_clear_screen].string;
|
||||||
char*& cd = tcap[fc::t_clr_eos].string;
|
char*& cd = tcap[fc::t_clr_eos].string;
|
||||||
char*& cb = tcap[fc::t_clr_eol].string;
|
char*& cb = tcap[fc::t_clr_eol].string;
|
||||||
|
@ -121,15 +121,15 @@ void FVTerm::clearTerm()
|
||||||
bool normal = isNormal(next);
|
bool normal = isNormal(next);
|
||||||
appendAttributes(next);
|
appendAttributes(next);
|
||||||
|
|
||||||
if ( (! cl && ! cd && ! cb)
|
if ( ! ( (cl || cd || cb) && (normal || ut) )
|
||||||
|| (normal && ! ut ) )
|
|| fillchar != ' ' )
|
||||||
{
|
{
|
||||||
int term_width = getColumnNumber();
|
int term_width = getColumnNumber();
|
||||||
|
|
||||||
for (int i=0; i < getLineNumber(); i++)
|
for (int i=0; i < getLineNumber(); i++)
|
||||||
{
|
{
|
||||||
setTermXY (0,i);
|
setTermXY (0,i);
|
||||||
FString blank_line(term_width, ' ');
|
FString blank_line(term_width, wchar_t(fillchar));
|
||||||
appendOutputBuffer (blank_line.c_str());
|
appendOutputBuffer (blank_line.c_str());
|
||||||
term_pos->setPoint(term_width,i);
|
term_pos->setPoint(term_width,i);
|
||||||
}
|
}
|
||||||
|
@ -1907,7 +1907,7 @@ void FVTerm::clearArea (term_area* area, int fillchar)
|
||||||
if ( area == vdesktop )
|
if ( area == vdesktop )
|
||||||
{
|
{
|
||||||
std::fill_n (vterm->text, area_size, nc);
|
std::fill_n (vterm->text, area_size, nc);
|
||||||
clearTerm();
|
clearTerm (fillchar);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@ class FVTerm : public FObject, public FTerm
|
||||||
|
|
||||||
// Mutators
|
// Mutators
|
||||||
static void setTermXY (register int, register int);
|
static void setTermXY (register int, register int);
|
||||||
static void clearTerm();
|
static void clearTerm (int = ' ');
|
||||||
static bool hideCursor (bool);
|
static bool hideCursor (bool);
|
||||||
static bool hideCursor();
|
static bool hideCursor();
|
||||||
static bool showCursor();
|
static bool showCursor();
|
||||||
|
|
|
@ -1103,6 +1103,11 @@ void FWidget::show()
|
||||||
|
|
||||||
// set xterm color settings to defaults
|
// set xterm color settings to defaults
|
||||||
setXTermDefaults();
|
setXTermDefaults();
|
||||||
|
|
||||||
|
// draw the vdesktop
|
||||||
|
FWidget* r = getRootWidget();
|
||||||
|
setColor(r->getForegroundColor(), r->getBackgroundColor());
|
||||||
|
clearArea (vdesktop);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! show_root_widget )
|
if ( ! show_root_widget )
|
||||||
|
@ -2158,8 +2163,6 @@ void FWidget::init()
|
||||||
|
|
||||||
foreground_color = wc.term_fg;
|
foreground_color = wc.term_fg;
|
||||||
background_color = wc.term_bg;
|
background_color = wc.term_bg;
|
||||||
setColor();
|
|
||||||
clearArea (vdesktop);
|
|
||||||
|
|
||||||
accelerator_list = new Accelerators();
|
accelerator_list = new Accelerators();
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,6 @@ void keyboard::onAccel (FAccelEvent* ev)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void keyboard::draw()
|
void keyboard::draw()
|
||||||
{
|
{
|
||||||
setNormal();
|
|
||||||
clearArea (vdesktop);
|
|
||||||
setPrintPos (1,1);
|
setPrintPos (1,1);
|
||||||
print ("---------------\n");
|
print ("---------------\n");
|
||||||
print ("Press Q to quit\n");
|
print ("Press Q to quit\n");
|
||||||
|
@ -78,6 +76,8 @@ void keyboard::draw()
|
||||||
int main (int argc, char* argv[])
|
int main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
FApplication app(argc, argv);
|
FApplication app(argc, argv);
|
||||||
|
app.setForegroundColor(fc::Default);
|
||||||
|
app.setBackgroundColor(fc::Default);
|
||||||
keyboard key(&app);
|
keyboard key(&app);
|
||||||
key.addAccelerator('q');
|
key.addAccelerator('q');
|
||||||
app.setMainWidget(&key);
|
app.setMainWidget(&key);
|
||||||
|
|
|
@ -149,7 +149,6 @@ int main (int argc, char* argv[])
|
||||||
std::cout << "escape sequence ";
|
std::cout << "escape sequence ";
|
||||||
std::cout << "Length\r\n";
|
std::cout << "Length\r\n";
|
||||||
std::cout << line;
|
std::cout << line;
|
||||||
std::cout << "\r\n";
|
|
||||||
|
|
||||||
move (5, 12, 0, 0);
|
move (5, 12, 0, 0);
|
||||||
move (5, ymax, 5, 0);
|
move (5, ymax, 5, 0);
|
||||||
|
|
|
@ -40,8 +40,6 @@ timer::timer (FWidget* parent)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void timer::draw()
|
void timer::draw()
|
||||||
{
|
{
|
||||||
setNormal();
|
|
||||||
clearArea (vdesktop);
|
|
||||||
setPrintPos (1,1);
|
setPrintPos (1,1);
|
||||||
print ("---------------\n");
|
print ("---------------\n");
|
||||||
print ("Press Q to quit\n");
|
print ("Press Q to quit\n");
|
||||||
|
@ -86,6 +84,8 @@ void timer::onAccel (FAccelEvent* ev)
|
||||||
int main (int argc, char* argv[])
|
int main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
FApplication app(argc, argv);
|
FApplication app(argc, argv);
|
||||||
|
app.setForegroundColor(fc::Default);
|
||||||
|
app.setBackgroundColor(fc::Default);
|
||||||
timer t(&app);
|
timer t(&app);
|
||||||
t.addAccelerator('q');
|
t.addAccelerator('q');
|
||||||
app.setMainWidget(&t);
|
app.setMainWidget(&t);
|
||||||
|
|
Loading…
Reference in New Issue