Improvement in class FOptiAttr
This commit is contained in:
parent
9978c7e341
commit
356879bc1a
|
@ -1,3 +1,7 @@
|
|||
2017-04-08 Markus Gans <guru.mail@muenster.de>
|
||||
* Improved Linux terminal quirks
|
||||
* Improvement in class FOptiAttr
|
||||
|
||||
2017-04-02 Markus Gans <guru.mail@muenster.de>
|
||||
* Improved cygwin terminal quirks
|
||||
* Optimized character set switching in FOptiAttr
|
||||
|
|
|
@ -290,7 +290,6 @@ class FOptiAttr
|
|||
bool switchOn();
|
||||
bool switchOff();
|
||||
bool append_sequence (char[]);
|
||||
bool replace_sequence (char[]);
|
||||
|
||||
// Data Members
|
||||
capability F_enter_bold_mode;
|
||||
|
|
|
@ -566,7 +566,8 @@ char* FOptiAttr::changeAttribute (char_data*& term, char_data*& next)
|
|||
{
|
||||
deactivateAttributes (term, next);
|
||||
}
|
||||
else if ( F_set_attributes.cap && ! term->attr.bit.pc_charset )
|
||||
else if ( F_set_attributes.cap
|
||||
&& ( ! term->attr.bit.pc_charset || alt_equal_pc_charset) )
|
||||
{
|
||||
changeAttributeSGR (term, next);
|
||||
}
|
||||
|
@ -985,7 +986,7 @@ inline bool FOptiAttr::unsetTermAttributes (char_data*& term)
|
|||
|
||||
reset(term);
|
||||
|
||||
if ( replace_sequence(F_exit_attribute_mode.cap) )
|
||||
if ( append_sequence(F_exit_attribute_mode.cap) )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -1340,6 +1341,9 @@ inline void FOptiAttr::deactivateAttributes ( char_data*& term
|
|||
{
|
||||
if ( F_exit_attribute_mode.cap )
|
||||
{
|
||||
if ( off.attr.bit.alt_charset ) // Required for rxvt terminals
|
||||
unsetTermAltCharset(term);
|
||||
|
||||
unsetTermAttributes(term);
|
||||
|
||||
if ( off.attr.bit.pc_charset )
|
||||
|
@ -1373,7 +1377,7 @@ inline void FOptiAttr::changeAttributeSGR ( char_data*& term
|
|||
|
||||
if ( alt_equal_pc_charset && next->attr.bit.alt_charset )
|
||||
{
|
||||
term->attr.bit.pc_charset = true;
|
||||
term->attr.bit.pc_charset = next->attr.bit.pc_charset;
|
||||
off.attr.bit.pc_charset = false;
|
||||
pc_charset_usable = false;
|
||||
}
|
||||
|
@ -1569,10 +1573,12 @@ bool FOptiAttr::caused_reset_attributes (char cap[], uChar test)
|
|||
if ( (test & test_adm3_reset) && std::strncmp (cap, ESC "G0", 3) == 0 )
|
||||
return true;
|
||||
|
||||
if ( (test & same_like_ue) && ue && std::strcmp (cap, ue) == 0 )
|
||||
if ( (test & same_like_ue) && ue && std::strcmp (cap, ue) == 0
|
||||
&& std::strncmp (cap, CSI "24m", 5) != 0)
|
||||
return true;
|
||||
|
||||
if ( (test & same_like_se) && se && std::strcmp (cap, se) == 0 )
|
||||
if ( (test & same_like_se) && se && std::strcmp (cap, se) == 0
|
||||
&& std::strncmp (cap, CSI "27m", 5) != 0 )
|
||||
return true;
|
||||
|
||||
if ( (test & same_like_me) && me && std::strcmp (cap, me) == 0 )
|
||||
|
@ -1668,15 +1674,3 @@ inline bool FOptiAttr::append_sequence (char seq[])
|
|||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FOptiAttr::replace_sequence (char seq[])
|
||||
{
|
||||
if ( seq )
|
||||
{
|
||||
std::strncpy (attr_ptr, seq, sizeof(attr_buf) - 1);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -3663,6 +3663,9 @@ void FTerm::init_termcaps_linux_quirks()
|
|||
TCAP(fc::t_orig_pair) = \
|
||||
C_STR(CSI "39;49;25m");
|
||||
|
||||
TCAP(fc::t_exit_reverse_mode) = \
|
||||
C_STR(CSI "27m");
|
||||
|
||||
// Avoid underline and dim mode
|
||||
TCAP(fc::t_enter_dim_mode) = 0;
|
||||
TCAP(fc::t_exit_dim_mode) = 0;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue