From 2e9383720c44a0c216875f813005095a8743546b Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Fri, 2 Jun 2017 00:14:12 -0500 Subject: [PATCH] Make cursor save/restore affect color attributes SGR attributes are stored in three variables: mEffect, mForeColor, and mBackColor. Saving/restoring the cursor only preserves mEffect. Change the cursor save/restore methods to additionally preserve mForeColor and mBackColor. This affects both 'explit' saving/restoring the cursor and switching to/from the alternate screen buffer. --- .../java/com/termux/terminal/TerminalEmulator.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index e172d38e..1d6eaf74 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -1307,6 +1307,8 @@ public final class TerminalEmulator { state.mSavedCursorRow = mCursorRow; state.mSavedCursorCol = mCursorCol; state.mSavedEffect = mEffect; + state.mSavedForeColor = mForeColor; + state.mSavedBackColor = mBackColor; state.mSavedDecFlags = mCurrentDecSetFlags; state.mUseLineDrawingG0 = mUseLineDrawingG0; state.mUseLineDrawingG1 = mUseLineDrawingG1; @@ -1318,6 +1320,8 @@ public final class TerminalEmulator { SavedScreenState state = (mScreen == mMainBuffer) ? mSavedStateMain : mSavedStateAlt; setCursorRowCol(state.mSavedCursorRow, state.mSavedCursorCol); mEffect = state.mSavedEffect; + mForeColor = state.mSavedForeColor; + mBackColor = state.mSavedBackColor; int mask = (DECSET_BIT_AUTOWRAP | DECSET_BIT_ORIGIN_MODE); mCurrentDecSetFlags = (mCurrentDecSetFlags & ~mask) | (state.mSavedDecFlags & mask); mUseLineDrawingG0 = state.mUseLineDrawingG0; @@ -2263,8 +2267,8 @@ public final class TerminalEmulator { mBottomMargin = mRows; mRightMargin = mColumns; mAboutToAutoWrap = false; - mForeColor = TextStyle.COLOR_INDEX_FOREGROUND; - mBackColor = TextStyle.COLOR_INDEX_BACKGROUND; + mForeColor = mSavedStateMain.mSavedForeColor = mSavedStateAlt.mSavedForeColor = TextStyle.COLOR_INDEX_FOREGROUND; + mBackColor = mSavedStateMain.mSavedBackColor = mSavedStateAlt.mSavedBackColor = TextStyle.COLOR_INDEX_BACKGROUND; setDefaultTabStops(); mUseLineDrawingG0 = mUseLineDrawingG1 = false; @@ -2318,7 +2322,7 @@ public final class TerminalEmulator { static final class SavedScreenState { /** Saved state of the cursor position, Used to implement the save/restore cursor position escape sequences. */ int mSavedCursorRow, mSavedCursorCol; - int mSavedEffect; + int mSavedEffect, mSavedForeColor, mSavedBackColor; int mSavedDecFlags; boolean mUseLineDrawingG0, mUseLineDrawingG1, mUseLineDrawingUsesG0 = true; }