Better default color handling
This commit is contained in:
parent
db463c686f
commit
9bc6ec6f96
|
@ -1,3 +1,6 @@
|
||||||
|
2016-01-10 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Better default color handling in FOptiAttr
|
||||||
|
|
||||||
2016-01-07 Markus Gans <guru.mail@muenster.de>
|
2016-01-07 Markus Gans <guru.mail@muenster.de>
|
||||||
* Add the new class FOptiAttr to control video attributes and colors
|
* Add the new class FOptiAttr to control video attributes and colors
|
||||||
for output on terminals
|
for output on terminals
|
||||||
|
|
6
doc/TODO
6
doc/TODO
|
@ -4,7 +4,11 @@ Bugs
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
-
|
- Every OSC sequence ("\033]") should have been a special prefix and
|
||||||
|
postfix sequence for screen and tmux:
|
||||||
|
|
||||||
|
screen = "\033P" + OSC + control sequence + "\a\033\\"
|
||||||
|
tmux = "\033Ptmux:\033" + OSC + control sequence + "\033\\"
|
||||||
|
|
||||||
Missing Features
|
Missing Features
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -412,13 +412,15 @@ void FButton::setBackgroundColor (short color)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FButton::setHotkeyForegroundColor (short color)
|
void FButton::setHotkeyForegroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
button_hotkey_fg = color;
|
button_hotkey_fg = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FButton::setFocusForegroundColor (short color)
|
void FButton::setFocusForegroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
button_focus_fg = color;
|
button_focus_fg = color;
|
||||||
updateButtonColor();
|
updateButtonColor();
|
||||||
}
|
}
|
||||||
|
@ -426,7 +428,8 @@ void FButton::setFocusForegroundColor (short color)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FButton::setFocusBackgroundColor (short color)
|
void FButton::setFocusBackgroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
button_focus_bg = color;
|
button_focus_bg = color;
|
||||||
updateButtonColor();
|
updateButtonColor();
|
||||||
}
|
}
|
||||||
|
@ -434,7 +437,8 @@ void FButton::setFocusBackgroundColor (short color)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FButton::setInactiveForegroundColor (short color)
|
void FButton::setInactiveForegroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
button_inactive_fg = color;
|
button_inactive_fg = color;
|
||||||
updateButtonColor();
|
updateButtonColor();
|
||||||
}
|
}
|
||||||
|
@ -442,7 +446,8 @@ void FButton::setInactiveForegroundColor (short color)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FButton::setInactiveBackgroundColor (short color)
|
void FButton::setInactiveBackgroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
button_inactive_bg = color;
|
button_inactive_bg = color;
|
||||||
updateButtonColor();
|
updateButtonColor();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,8 +44,11 @@ FOptiAttr::FOptiAttr()
|
||||||
, F_set_foreground()
|
, F_set_foreground()
|
||||||
, F_set_background()
|
, F_set_background()
|
||||||
, F_set_color_pair()
|
, F_set_color_pair()
|
||||||
|
, F_orig_pair()
|
||||||
|
, F_orig_colors()
|
||||||
, max_color(1)
|
, max_color(1)
|
||||||
, attr_without_color(0)
|
, attr_without_color(0)
|
||||||
|
, ansi_default_color(false)
|
||||||
, monochron(true)
|
, monochron(true)
|
||||||
, fake_reverse(false)
|
, fake_reverse(false)
|
||||||
, cygwin_terminal(false)
|
, cygwin_terminal(false)
|
||||||
|
@ -82,8 +85,8 @@ inline bool FOptiAttr::colorChange (char_data*& term, char_data*& next)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FOptiAttr::resetColor (char_data*& attr)
|
inline void FOptiAttr::resetColor (char_data*& attr)
|
||||||
{
|
{
|
||||||
attr->fg_color = -1;
|
attr->fg_color = Default;
|
||||||
attr->bg_color = -1;
|
attr->bg_color = Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -194,17 +197,34 @@ void FOptiAttr::change_color (char_data*& term, char_data*& next)
|
||||||
if ( monochron )
|
if ( monochron )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( fg == -1 && term->fg_color != -1 )
|
if ( fg == Default || bg == Default )
|
||||||
{
|
{
|
||||||
char* sgr_39 = const_cast<char*>("\033[39m");
|
if ( ansi_default_color )
|
||||||
append_sequence (sgr_39);
|
{
|
||||||
term->fg_color = next->fg_color;
|
if ( fg == Default && term->fg_color != Default
|
||||||
}
|
&& bg == Default && term->bg_color != Default )
|
||||||
if ( bg == -1 && term->bg_color != -1 )
|
{
|
||||||
{
|
setTermDefaultColor(term);
|
||||||
char* sgr_49 = const_cast<char*>("\033[49m");
|
}
|
||||||
append_sequence (sgr_49);
|
else if ( fg == Default && term->fg_color != Default )
|
||||||
term->bg_color = next->bg_color;
|
{
|
||||||
|
char* sgr_39 = const_cast<char*>("\033[39m");
|
||||||
|
append_sequence (sgr_39);
|
||||||
|
term->fg_color = Default;
|
||||||
|
}
|
||||||
|
else if ( bg == Default && term->bg_color != Default )
|
||||||
|
{
|
||||||
|
char* sgr_49 = const_cast<char*>("\033[49m");
|
||||||
|
append_sequence (sgr_49);
|
||||||
|
term->bg_color = Default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( ! setTermDefaultColor(term) )
|
||||||
|
{
|
||||||
|
// fallback to gray on black
|
||||||
|
fg = next->fg_color = LightGray;
|
||||||
|
bg = next->bg_color = Black;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! fake_reverse && fg < 0 && bg < 0 )
|
if ( ! fake_reverse && fg < 0 && bg < 0 )
|
||||||
|
@ -777,6 +797,33 @@ inline bool FOptiAttr::unsetTermPCcharset (char_data*& term)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FOptiAttr::setTermDefaultColor (char_data*& term)
|
||||||
|
{
|
||||||
|
if ( append_sequence(F_orig_pair.cap) )
|
||||||
|
{
|
||||||
|
term->fg_color = Default;
|
||||||
|
term->bg_color = Default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if ( append_sequence(F_orig_colors.cap) )
|
||||||
|
{
|
||||||
|
term->fg_color = Default;
|
||||||
|
term->bg_color = Default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if ( ansi_default_color )
|
||||||
|
{
|
||||||
|
char* sgr_39_49 = const_cast<char*>("\033[39;49m");
|
||||||
|
append_sequence (sgr_39_49);
|
||||||
|
term->fg_color = Default;
|
||||||
|
term->bg_color = Default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// public methods of FOptiAttr
|
// public methods of FOptiAttr
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -1144,6 +1191,26 @@ void FOptiAttr::set_term_color_pair (char*& cap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FOptiAttr::set_orig_pair (char*& cap)
|
||||||
|
{
|
||||||
|
if ( cap )
|
||||||
|
{
|
||||||
|
F_orig_pair.cap = cap;
|
||||||
|
F_orig_pair.caused_reset = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FOptiAttr::set_orig_orig_colors (char*& cap)
|
||||||
|
{
|
||||||
|
if ( cap )
|
||||||
|
{
|
||||||
|
F_orig_colors.cap = cap;
|
||||||
|
F_orig_colors.caused_reset = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FOptiAttr::init()
|
void FOptiAttr::init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,13 @@ class FOptiAttr
|
||||||
all_tests = 0x1f
|
all_tests = 0x1f
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum default_color
|
||||||
|
{
|
||||||
|
Default = -1,
|
||||||
|
Black = 0,
|
||||||
|
LightGray = 7
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char* cap;
|
char* cap;
|
||||||
|
@ -79,9 +86,12 @@ class FOptiAttr
|
||||||
capability F_set_foreground;
|
capability F_set_foreground;
|
||||||
capability F_set_background;
|
capability F_set_background;
|
||||||
capability F_set_color_pair;
|
capability F_set_color_pair;
|
||||||
|
capability F_orig_pair;
|
||||||
|
capability F_orig_colors;
|
||||||
|
|
||||||
int max_color;
|
int max_color;
|
||||||
int attr_without_color;
|
int attr_without_color;
|
||||||
|
bool ansi_default_color;
|
||||||
bool monochron;
|
bool monochron;
|
||||||
bool fake_reverse;
|
bool fake_reverse;
|
||||||
bool cygwin_terminal;
|
bool cygwin_terminal;
|
||||||
|
@ -164,6 +174,7 @@ class FOptiAttr
|
||||||
bool unsetTermAltCharset (char_data*&);
|
bool unsetTermAltCharset (char_data*&);
|
||||||
bool setTermPCcharset (char_data*&);
|
bool setTermPCcharset (char_data*&);
|
||||||
bool unsetTermPCcharset (char_data*&);
|
bool unsetTermPCcharset (char_data*&);
|
||||||
|
bool setTermDefaultColor (char_data*&);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit FOptiAttr(); // constructor
|
explicit FOptiAttr(); // constructor
|
||||||
|
@ -173,6 +184,7 @@ class FOptiAttr
|
||||||
|
|
||||||
void setMaxColor (int&);
|
void setMaxColor (int&);
|
||||||
void setNoColorVideo (int);
|
void setNoColorVideo (int);
|
||||||
|
void setDefaultColorSupport();
|
||||||
void setCygwinTerminal();
|
void setCygwinTerminal();
|
||||||
void set_enter_bold_mode (char*&);
|
void set_enter_bold_mode (char*&);
|
||||||
void set_exit_bold_mode (char*&);
|
void set_exit_bold_mode (char*&);
|
||||||
|
@ -207,6 +219,8 @@ class FOptiAttr
|
||||||
void set_foreground_color (char*&);
|
void set_foreground_color (char*&);
|
||||||
void set_background_color (char*&);
|
void set_background_color (char*&);
|
||||||
void set_term_color_pair (char*&);
|
void set_term_color_pair (char*&);
|
||||||
|
void set_orig_pair (char*&);
|
||||||
|
void set_orig_orig_colors (char*&);
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
char* change_attribute (char_data*&, char_data*&);
|
char* change_attribute (char_data*&, char_data*&);
|
||||||
|
@ -226,6 +240,10 @@ inline void FOptiAttr::setMaxColor (int& c)
|
||||||
inline void FOptiAttr::setNoColorVideo (int attr)
|
inline void FOptiAttr::setNoColorVideo (int attr)
|
||||||
{ attr_without_color = attr; }
|
{ attr_without_color = attr; }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline void FOptiAttr::setDefaultColorSupport()
|
||||||
|
{ ansi_default_color = true; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FOptiAttr::setCygwinTerminal()
|
inline void FOptiAttr::setCygwinTerminal()
|
||||||
{ cygwin_terminal = true; }
|
{ cygwin_terminal = true; }
|
||||||
|
|
|
@ -110,7 +110,7 @@ static tcap_map tcap[] =
|
||||||
* to the number of lines affected
|
* to the number of lines affected
|
||||||
* (#i) indicates the ith parameter.
|
* (#i) indicates the ith parameter.
|
||||||
*
|
*
|
||||||
* "XX", "Us" and "Ue" are unofficial and are only used here.
|
* "XX", "Us" and "Ue" are unofficial and they are only used here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum termcaps
|
enum termcaps
|
||||||
|
|
|
@ -48,6 +48,7 @@ bool FTerm::background_color_erase;
|
||||||
bool FTerm::automatic_left_margin;
|
bool FTerm::automatic_left_margin;
|
||||||
bool FTerm::automatic_right_margin;
|
bool FTerm::automatic_right_margin;
|
||||||
bool FTerm::eat_nl_glitch;
|
bool FTerm::eat_nl_glitch;
|
||||||
|
bool FTerm::ansi_default_color;
|
||||||
bool FTerm::xterm;
|
bool FTerm::xterm;
|
||||||
bool FTerm::rxvt_terminal;
|
bool FTerm::rxvt_terminal;
|
||||||
bool FTerm::urxvt_terminal;
|
bool FTerm::urxvt_terminal;
|
||||||
|
@ -75,6 +76,7 @@ bool FTerm::ascii_console;
|
||||||
bool FTerm::NewFont;
|
bool FTerm::NewFont;
|
||||||
bool FTerm::VGAFont;
|
bool FTerm::VGAFont;
|
||||||
bool FTerm::cursor_optimisation;
|
bool FTerm::cursor_optimisation;
|
||||||
|
bool FTerm::osc_support;
|
||||||
uChar FTerm::x11_button_state;
|
uChar FTerm::x11_button_state;
|
||||||
termios FTerm::term_init;
|
termios FTerm::term_init;
|
||||||
|
|
||||||
|
@ -1071,6 +1073,13 @@ void FTerm::init_termcaps()
|
||||||
// newline ignored after 80 cols
|
// newline ignored after 80 cols
|
||||||
eat_nl_glitch = tgetflag(const_cast<char*>("xn"));
|
eat_nl_glitch = tgetflag(const_cast<char*>("xn"));
|
||||||
|
|
||||||
|
// terminal supports ANSI set default fg and bg color
|
||||||
|
ansi_default_color = tgetflag(const_cast<char*>("AX"));
|
||||||
|
|
||||||
|
// terminal supports operating system commands (OSC)
|
||||||
|
// OSC = Esc + ]
|
||||||
|
osc_support = tgetflag(const_cast<char*>("XT"));
|
||||||
|
|
||||||
if ( isTeraTerm() )
|
if ( isTeraTerm() )
|
||||||
eat_nl_glitch = true;
|
eat_nl_glitch = true;
|
||||||
|
|
||||||
|
@ -1364,7 +1373,11 @@ void FTerm::init_termcaps()
|
||||||
opti_attr->set_foreground_color (tcap[t_set_foreground].string);
|
opti_attr->set_foreground_color (tcap[t_set_foreground].string);
|
||||||
opti_attr->set_background_color (tcap[t_set_background].string);
|
opti_attr->set_background_color (tcap[t_set_background].string);
|
||||||
opti_attr->set_term_color_pair (tcap[t_set_color_pair].string);
|
opti_attr->set_term_color_pair (tcap[t_set_color_pair].string);
|
||||||
opti_attr->setMaxColor(max_color);
|
opti_attr->set_orig_pair (tcap[t_orig_pair].string);
|
||||||
|
opti_attr->set_orig_orig_colors (tcap[t_orig_colors].string);
|
||||||
|
opti_attr->setMaxColor (max_color);
|
||||||
|
if ( ansi_default_color )
|
||||||
|
opti_attr->setDefaultColorSupport();
|
||||||
if ( cygwin_terminal )
|
if ( cygwin_terminal )
|
||||||
opti_attr->setCygwinTerminal();
|
opti_attr->setCygwinTerminal();
|
||||||
opti_attr->init();
|
opti_attr->init();
|
||||||
|
@ -1469,8 +1482,8 @@ void FTerm::init()
|
||||||
background_color_erase = false;
|
background_color_erase = false;
|
||||||
|
|
||||||
term_attribute.code = '\0';
|
term_attribute.code = '\0';
|
||||||
term_attribute.fg_color = -1;
|
term_attribute.fg_color = fc::Default;
|
||||||
term_attribute.bg_color = -1;
|
term_attribute.bg_color = fc::Default;
|
||||||
term_attribute.bold = \
|
term_attribute.bold = \
|
||||||
term_attribute.dim = \
|
term_attribute.dim = \
|
||||||
term_attribute.italic = \
|
term_attribute.italic = \
|
||||||
|
@ -1486,8 +1499,8 @@ void FTerm::init()
|
||||||
term_attribute.pc_charset = false;
|
term_attribute.pc_charset = false;
|
||||||
|
|
||||||
next_attribute.code = '\0';
|
next_attribute.code = '\0';
|
||||||
next_attribute.fg_color = -1;
|
next_attribute.fg_color = fc::Default;
|
||||||
next_attribute.bg_color = -1;
|
next_attribute.bg_color = fc::Default;
|
||||||
next_attribute.bold = \
|
next_attribute.bold = \
|
||||||
next_attribute.dim = \
|
next_attribute.dim = \
|
||||||
next_attribute.italic = \
|
next_attribute.italic = \
|
||||||
|
@ -2032,8 +2045,8 @@ void FTerm::resizeArea (term_area* area)
|
||||||
area->bottom_shadow = bsh;
|
area->bottom_shadow = bsh;
|
||||||
|
|
||||||
default_char.code = ' ';
|
default_char.code = ' ';
|
||||||
default_char.fg_color = fc::Black;
|
default_char.fg_color = fc::Default;
|
||||||
default_char.bg_color = fc::Black;
|
default_char.bg_color = fc::Default;
|
||||||
default_char.bold = 0;
|
default_char.bold = 0;
|
||||||
default_char.dim = 0;
|
default_char.dim = 0;
|
||||||
default_char.italic = 0;
|
default_char.italic = 0;
|
||||||
|
@ -2531,7 +2544,7 @@ bool FTerm::setVGAFont()
|
||||||
|
|
||||||
VGAFont = true;
|
VGAFont = true;
|
||||||
|
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
// Set font in xterm to vga
|
// Set font in xterm to vga
|
||||||
putstring("\033]50;vga\07");
|
putstring("\033]50;vga\07");
|
||||||
|
@ -2585,7 +2598,7 @@ bool FTerm::setNewFont()
|
||||||
if ( NewFont )
|
if ( NewFont )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ( xterm || urxvt_terminal )
|
if ( xterm || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
NewFont = true;
|
NewFont = true;
|
||||||
// Set font in xterm to 8x16graph
|
// Set font in xterm to 8x16graph
|
||||||
|
@ -2644,7 +2657,7 @@ bool FTerm::setOldFont()
|
||||||
NewFont = \
|
NewFont = \
|
||||||
VGAFont = false;
|
VGAFont = false;
|
||||||
|
|
||||||
if ( xterm || urxvt_terminal )
|
if ( xterm || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
if ( xterm_font->getLength() > 2 )
|
if ( xterm_font->getLength() > 2 )
|
||||||
// restore saved xterm font
|
// restore saved xterm font
|
||||||
|
@ -2790,8 +2803,8 @@ void FTerm::resizeVTerm()
|
||||||
vterm->height = term_height;
|
vterm->height = term_height;
|
||||||
|
|
||||||
default_char.code = ' ';
|
default_char.code = ' ';
|
||||||
default_char.fg_color = fc::LightGray;
|
default_char.fg_color = fc::Default;
|
||||||
default_char.bg_color = fc::Black;
|
default_char.bg_color = fc::Default;
|
||||||
default_char.bold = 0;
|
default_char.bold = 0;
|
||||||
default_char.dim = 0;
|
default_char.dim = 0;
|
||||||
default_char.italic = 0;
|
default_char.italic = 0;
|
||||||
|
@ -2919,7 +2932,7 @@ void FTerm::updateTerminal()
|
||||||
void FTerm::setKDECursor (fc::kde_konsole_CursorShape style)
|
void FTerm::setKDECursor (fc::kde_konsole_CursorShape style)
|
||||||
{
|
{
|
||||||
// Set cursor style in KDE konsole
|
// Set cursor style in KDE konsole
|
||||||
if ( kde_konsole )
|
if ( kde_konsole || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]50;CursorShape=%d\007", style);
|
putstringf ("\033]50;CursorShape=%d\007", style);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -2931,7 +2944,7 @@ FString FTerm::getXTermFont()
|
||||||
{
|
{
|
||||||
FString font("");
|
FString font("");
|
||||||
|
|
||||||
if ( raw_mode && non_blocking_stdin )
|
if ( raw_mode && non_blocking_stdin && osc_support )
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
char temp[150] = {};
|
char temp[150] = {};
|
||||||
|
@ -2996,7 +3009,7 @@ void FTerm::setXTermCursorStyle(fc::xterm_cursor_style style)
|
||||||
void FTerm::setXTermTitle (const FString& title)
|
void FTerm::setXTermTitle (const FString& title)
|
||||||
{
|
{
|
||||||
// Set the xterm title
|
// Set the xterm title
|
||||||
if ( xterm || mintty_terminal || putty_terminal )
|
if ( xterm || mintty_terminal || putty_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]0;%s\07", title.c_str());
|
putstringf ("\033]0;%s\07", title.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3007,7 +3020,7 @@ void FTerm::setXTermTitle (const FString& title)
|
||||||
void FTerm::setXTermForeground (const FString& fg)
|
void FTerm::setXTermForeground (const FString& fg)
|
||||||
{
|
{
|
||||||
// Set the VT100 text foreground color
|
// Set the VT100 text foreground color
|
||||||
if ( xterm || mintty_terminal || mlterm_terminal )
|
if ( xterm || mintty_terminal || mlterm_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]10;%s\07", fg.c_str());
|
putstringf ("\033]10;%s\07", fg.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3018,7 +3031,7 @@ void FTerm::setXTermForeground (const FString& fg)
|
||||||
void FTerm::setXTermBackground (const FString& bg)
|
void FTerm::setXTermBackground (const FString& bg)
|
||||||
{
|
{
|
||||||
// Set the VT100 text background color
|
// Set the VT100 text background color
|
||||||
if ( xterm || mintty_terminal || mlterm_terminal )
|
if ( xterm || mintty_terminal || mlterm_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]11;%s\07", bg.c_str());
|
putstringf ("\033]11;%s\07", bg.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3029,7 +3042,7 @@ void FTerm::setXTermBackground (const FString& bg)
|
||||||
void FTerm::setXTermCursorColor (const FString& cc)
|
void FTerm::setXTermCursorColor (const FString& cc)
|
||||||
{
|
{
|
||||||
// Set the text cursor color
|
// Set the text cursor color
|
||||||
if ( xterm || mintty_terminal || urxvt_terminal )
|
if ( xterm || mintty_terminal || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]12;%s\07", cc.c_str());
|
putstringf ("\033]12;%s\07", cc.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3040,7 +3053,7 @@ void FTerm::setXTermCursorColor (const FString& cc)
|
||||||
void FTerm::setXTermMouseForeground (const FString& mfg)
|
void FTerm::setXTermMouseForeground (const FString& mfg)
|
||||||
{
|
{
|
||||||
// Set the mouse foreground color
|
// Set the mouse foreground color
|
||||||
if ( xterm || urxvt_terminal )
|
if ( xterm || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]13;%s\07", mfg.c_str());
|
putstringf ("\033]13;%s\07", mfg.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3051,7 +3064,7 @@ void FTerm::setXTermMouseForeground (const FString& mfg)
|
||||||
void FTerm::setXTermMouseBackground (const FString& mbg)
|
void FTerm::setXTermMouseBackground (const FString& mbg)
|
||||||
{
|
{
|
||||||
// Set the mouse background color
|
// Set the mouse background color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]14;%s\07", mbg.c_str());
|
putstringf ("\033]14;%s\07", mbg.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3062,7 +3075,7 @@ void FTerm::setXTermMouseBackground (const FString& mbg)
|
||||||
void FTerm::setXTermHighlightBackground (const FString& hbg)
|
void FTerm::setXTermHighlightBackground (const FString& hbg)
|
||||||
{
|
{
|
||||||
// Set the highlight background color
|
// Set the highlight background color
|
||||||
if ( xterm || urxvt_terminal )
|
if ( xterm || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]17;%s\07", hbg.c_str());
|
putstringf ("\033]17;%s\07", hbg.c_str());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3073,7 +3086,7 @@ void FTerm::setXTermHighlightBackground (const FString& hbg)
|
||||||
void FTerm::resetXTermColors()
|
void FTerm::resetXTermColors()
|
||||||
{
|
{
|
||||||
// Reset the entire color table
|
// Reset the entire color table
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]104\07");
|
putstringf ("\033]104\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3084,7 +3097,7 @@ void FTerm::resetXTermColors()
|
||||||
void FTerm::resetXTermForeground()
|
void FTerm::resetXTermForeground()
|
||||||
{
|
{
|
||||||
// Reset the VT100 text foreground color
|
// Reset the VT100 text foreground color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstring("\033]110\07");
|
putstring("\033]110\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3095,7 +3108,7 @@ void FTerm::resetXTermForeground()
|
||||||
void FTerm::resetXTermBackground()
|
void FTerm::resetXTermBackground()
|
||||||
{
|
{
|
||||||
// Reset the VT100 text background color
|
// Reset the VT100 text background color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstring("\033]111\07");
|
putstring("\033]111\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3106,7 +3119,7 @@ void FTerm::resetXTermBackground()
|
||||||
void FTerm::resetXTermCursorColor()
|
void FTerm::resetXTermCursorColor()
|
||||||
{
|
{
|
||||||
// Reset the text cursor color
|
// Reset the text cursor color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstring("\033]112\07");
|
putstring("\033]112\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3117,7 +3130,7 @@ void FTerm::resetXTermCursorColor()
|
||||||
void FTerm::resetXTermMouseForeground()
|
void FTerm::resetXTermMouseForeground()
|
||||||
{
|
{
|
||||||
// Reset the mouse foreground color
|
// Reset the mouse foreground color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstring("\033]113\07");
|
putstring("\033]113\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3128,7 +3141,7 @@ void FTerm::resetXTermMouseForeground()
|
||||||
void FTerm::resetXTermMouseBackground()
|
void FTerm::resetXTermMouseBackground()
|
||||||
{
|
{
|
||||||
// Reset the mouse background color
|
// Reset the mouse background color
|
||||||
if ( xterm )
|
if ( xterm || osc_support )
|
||||||
{
|
{
|
||||||
putstring("\033]114\07");
|
putstring("\033]114\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -3139,7 +3152,7 @@ void FTerm::resetXTermMouseBackground()
|
||||||
void FTerm::resetXTermHighlightBackground()
|
void FTerm::resetXTermHighlightBackground()
|
||||||
{
|
{
|
||||||
// Reset the highlight background color
|
// Reset the highlight background color
|
||||||
if ( xterm || urxvt_terminal )
|
if ( xterm || urxvt_terminal || osc_support )
|
||||||
{
|
{
|
||||||
putstringf ("\033]117\07");
|
putstringf ("\033]117\07");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
|
@ -133,6 +133,8 @@ class FTerm
|
||||||
static bool automatic_left_margin;
|
static bool automatic_left_margin;
|
||||||
static bool automatic_right_margin;
|
static bool automatic_right_margin;
|
||||||
static bool eat_nl_glitch;
|
static bool eat_nl_glitch;
|
||||||
|
static bool ansi_default_color;
|
||||||
|
static bool osc_support;
|
||||||
static char termtype[30];
|
static char termtype[30];
|
||||||
static char* term_name;
|
static char* term_name;
|
||||||
static char* locale_name;
|
static char* locale_name;
|
||||||
|
|
|
@ -685,14 +685,16 @@ inline FPoint FWidget::globalToLocalPos (const FPoint& gPos)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FWidget::setForegroundColor (short color)
|
inline void FWidget::setForegroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
foregroundColor = color;
|
foregroundColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FWidget::setBackgroundColor (short color)
|
inline void FWidget::setBackgroundColor (short color)
|
||||||
{
|
{
|
||||||
if ( color == -1 || color >> 8 == 0 ) // valid colors -1..254
|
// valid colors -1..254
|
||||||
|
if ( color == fc::Default || color >> 8 == 0 )
|
||||||
backgroundColor = color;
|
backgroundColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,8 +809,8 @@ inline void FWidget::setNormal()
|
||||||
next_attribute.alt_charset = \
|
next_attribute.alt_charset = \
|
||||||
next_attribute.pc_charset = false;
|
next_attribute.pc_charset = false;
|
||||||
|
|
||||||
next_attribute.fg_color = -1;
|
next_attribute.fg_color = fc::Default;
|
||||||
next_attribute.bg_color = -1;
|
next_attribute.bg_color = fc::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -22,8 +22,8 @@ keyboard::keyboard (FWidget* parent)
|
||||||
{
|
{
|
||||||
resetXTermForeground();
|
resetXTermForeground();
|
||||||
resetXTermBackground();
|
resetXTermBackground();
|
||||||
wc.term_fg = -1;
|
wc.term_fg = fc::Default;
|
||||||
wc.term_bg = -1;
|
wc.term_bg = fc::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -44,7 +44,7 @@ void keyboard::onAccel (FAccelEvent* ev)
|
||||||
void keyboard::draw()
|
void keyboard::draw()
|
||||||
{
|
{
|
||||||
setNormal();
|
setNormal();
|
||||||
setColor(-1,-1);
|
setColor(fc::Default, fc::Default);
|
||||||
clrscr();
|
clrscr();
|
||||||
gotoxy (1,1);
|
gotoxy (1,1);
|
||||||
print ("---------------\n");
|
print ("---------------\n");
|
||||||
|
|
|
@ -26,13 +26,17 @@ class AttribDlg : public FDialog
|
||||||
AttribDlg& operator = (const AttribDlg&); // and operator '='
|
AttribDlg& operator = (const AttribDlg&); // and operator '='
|
||||||
void adjustSize();
|
void adjustSize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
friend class AttribDemo;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AttribDlg (FWidget* = 0); // constructor
|
explicit AttribDlg (FWidget* = 0); // constructor
|
||||||
~AttribDlg(); // destructor
|
~AttribDlg(); // destructor
|
||||||
void onAccel (FAccelEvent*);
|
void onAccel (FAccelEvent*);
|
||||||
|
void onWheel (FWheelEvent*);
|
||||||
void onClose (FCloseEvent*);
|
void onClose (FCloseEvent*);
|
||||||
void cb_next (FWidget*, void*);
|
void cb_next (FWidget* = 0, void* = 0);
|
||||||
void cb_back (FWidget*, void*);
|
void cb_back (FWidget* = 0, void* = 0);
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
@ -82,6 +86,17 @@ void AttribDlg::onAccel (FAccelEvent* ev)
|
||||||
ev->accept();
|
ev->accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void AttribDlg::onWheel (FWheelEvent* ev)
|
||||||
|
{
|
||||||
|
int wheel = ev->getWheel();
|
||||||
|
|
||||||
|
if ( wheel == WheelUp )
|
||||||
|
cb_next();
|
||||||
|
else if ( wheel == WheelDown )
|
||||||
|
cb_back();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void AttribDlg::onClose (FCloseEvent* ev)
|
void AttribDlg::onClose (FCloseEvent* ev)
|
||||||
{
|
{
|
||||||
|
@ -103,7 +118,7 @@ void AttribDlg::cb_next (FWidget*, void*)
|
||||||
return;
|
return;
|
||||||
bgcolor++;
|
bgcolor++;
|
||||||
if ( bgcolor >= getMaxColor() )
|
if ( bgcolor >= getMaxColor() )
|
||||||
bgcolor = -1;
|
bgcolor = fc::Default;
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +128,7 @@ void AttribDlg::cb_back (FWidget*, void*)
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
return;
|
return;
|
||||||
bgcolor--;
|
bgcolor--;
|
||||||
if ( bgcolor < -1 )
|
if ( bgcolor < fc::Default )
|
||||||
bgcolor = short(getMaxColor() - 1);
|
bgcolor = short(getMaxColor() - 1);
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
@ -152,6 +167,10 @@ class AttribDemo : public FWidget
|
||||||
explicit AttribDemo (FWidget* = 0); // constructor
|
explicit AttribDemo (FWidget* = 0); // constructor
|
||||||
~AttribDemo() // destructor
|
~AttribDemo() // destructor
|
||||||
{ }
|
{ }
|
||||||
|
void onWheel (FWheelEvent* ev)
|
||||||
|
{
|
||||||
|
dynamic_cast<AttribDlg*>(parentWidget())->onWheel(ev);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
@ -189,9 +208,9 @@ void AttribDemo::printAltCharset()
|
||||||
|
|
||||||
gotoxy (xpos + xmin - 1, ypos + ymin - 1);
|
gotoxy (xpos + xmin - 1, ypos + ymin - 1);
|
||||||
print("alternate charset: ");
|
print("alternate charset: ");
|
||||||
if ( parent->bgcolor == -1 )
|
if ( parent->bgcolor == fc::Default )
|
||||||
{
|
{
|
||||||
setColor (-1,-1);
|
setColor (fc::Default, fc::Default);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -329,6 +348,7 @@ void AttribDemo::draw()
|
||||||
setUpdateVTerm(true);
|
setUpdateVTerm(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// main part
|
// main part
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -28,8 +28,8 @@ timer::timer (FWidget* parent)
|
||||||
|
|
||||||
resetXTermForeground();
|
resetXTermForeground();
|
||||||
resetXTermBackground();
|
resetXTermBackground();
|
||||||
wc.term_fg = -1;
|
wc.term_fg = fc::Default;
|
||||||
wc.term_bg = -1;
|
wc.term_bg = fc::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -49,7 +49,7 @@ void timer::onAccel (FAccelEvent* ev)
|
||||||
void timer::draw()
|
void timer::draw()
|
||||||
{
|
{
|
||||||
setNormal();
|
setNormal();
|
||||||
setColor(-1,-1);
|
setColor (fc::Default, fc::Default);
|
||||||
clrscr();
|
clrscr();
|
||||||
gotoxy (1,1);
|
gotoxy (1,1);
|
||||||
print ("---------------\n");
|
print ("---------------\n");
|
||||||
|
|
Loading…
Reference in New Issue