[FarGroup/FarManager] master: Fix mode indicators (1f013b775)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Mar 20, 2026, 6:00:53 PM (7 days ago) Mar 20
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/1f013b77500189a64d5e982fe580c2b60cf22c3e

>---------------------------------------------------------------

commit 1f013b77500189a64d5e982fe580c2b60cf22c3e
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Fri Mar 20 21:55:54 2026 +0000

Fix mode indicators


>---------------------------------------------------------------

1f013b77500189a64d5e982fe580c2b60cf22c3e
far/scrbuf.cpp | 29 +++++++++++++----------------
far/scrbuf.hpp | 5 +----
2 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/far/scrbuf.cpp b/far/scrbuf.cpp
index eca349b17..4967f472b 100644
--- a/far/scrbuf.cpp
+++ b/far/scrbuf.cpp
@@ -525,6 +525,9 @@ void ScreenBuf::Flush(flush_type FlushType)
{
ShowTime();

+ MacroChar.reset();
+ ElevationChar.reset();
+
if (!Global->SuppressIndicators || Global->WindowManager->GetCurrentWindowType() != windowtype_desktop)
{
const auto SetMacroChar = [this](FAR_CHAR_INFO& Where, wchar_t Char, WORD Color)
@@ -541,7 +544,6 @@ void ScreenBuf::Flush(flush_type FlushType)
{
auto& Where = Buf[0][0];
MacroChar = Where;
- MacroCharUsed = true;

Global->CtrlObject->Macro.IsRecording() ?
SetMacroChar(Where, L'R', B_LIGHTRED | F_WHITE) :
@@ -552,7 +554,6 @@ void ScreenBuf::Flush(flush_type FlushType)
{
auto& Where = Buf.back().back();
ElevationChar = Where;
- ElevationCharUsed = true;

SetMacroChar(Where, L'A', B_LIGHTRED | F_WHITE);
}
@@ -701,15 +702,11 @@ void ScreenBuf::Flush(flush_type FlushType)
console.Commit();
}

- if (MacroCharUsed)
- {
- Buf[0][0] = MacroChar;
- }
+ if (MacroChar)
+ Buf[0][0] = *MacroChar;

- if (ElevationCharUsed)
- {
- Buf.back().back() = ElevationChar;
- }
+ if (ElevationChar)
+ Buf.back().back() = *ElevationChar;

SBFlags.Set(SBFLAGS_FLUSHED);
}
@@ -786,19 +783,19 @@ void ScreenBuf::SetTitle(string_view const Title)

void ScreenBuf::RestoreMacroChar()
{
- if(MacroCharUsed)
+ if(MacroChar)
{
- SBFlags.Clear(SBFLAGS_FLUSHED);
- MacroCharUsed=false;
+ Write(0, 0, { &*MacroChar, 1 });
+ MacroChar.reset();
}
}

void ScreenBuf::RestoreElevationChar()
{
- if(ElevationCharUsed)
+ if(ElevationChar)
{
- Write(static_cast<int>(Buf.width() - 1), static_cast<int>(Buf.height() - 1), { &ElevationChar, 1 });
- ElevationCharUsed=false;
+ Write(static_cast<int>(Buf.width() - 1), static_cast<int>(Buf.height() - 1), { &*ElevationChar, 1 });
+ ElevationChar.reset();
}
}

diff --git a/far/scrbuf.hpp b/far/scrbuf.hpp
index 379102d71..798c71362 100644
--- a/far/scrbuf.hpp
+++ b/far/scrbuf.hpp
@@ -101,8 +101,7 @@ private:
void debug_flush();

os::critical_section CS;
- FAR_CHAR_INFO MacroChar{};
- FAR_CHAR_INFO ElevationChar{};
+ std::optional<FAR_CHAR_INFO> MacroChar, ElevationChar;
matrix<FAR_CHAR_INFO> Buf;
matrix<FAR_CHAR_INFO> Shadow;
string m_Title;
@@ -111,8 +110,6 @@ private:
int m_ClearTypeFix{};
size_t CurSize{};
point m_CurPos{};
- bool MacroCharUsed{};
- bool ElevationCharUsed{};
bool CurVisible{};
};



Reply all
Reply to author
Forward
0 new messages