@@ -1754,28 +1754,26 @@ void Screen<Cell>::requestAnsiMode(unsigned int mode)
17541754 return ModeResponse::NotRecognized;
17551755 }(mode);
17561756
1757- auto const code = toAnsiModeNum (static_cast <AnsiMode>(mode));
1758-
1759- reply (" \033 [{};{}$y" , code, static_cast <unsigned >(modeResponse));
1757+ reply (" \033 [{};{}$y" , mode, static_cast <unsigned >(modeResponse));
17601758}
17611759
17621760template <CellConcept Cell>
17631761void Screen<Cell>::requestDECMode(unsigned int mode)
17641762{
1765- auto const modeResponse = [&](auto mode) -> ModeResponse {
1766- if (isValidDECMode (mode))
1763+ auto const modeResponse = [this , mode]() -> ModeResponse {
1764+ auto const modeEnum = fromDECModeNum (mode);
1765+ if (modeEnum.has_value ())
17671766 {
1768- if (_terminal->isModeEnabled (static_cast <DECMode>(mode)))
1767+ auto const modeEnum = fromDECModeNum (mode);
1768+ if (_terminal->isModeEnabled (modeEnum.value ()))
17691769 return ModeResponse::Set;
17701770 else
17711771 return ModeResponse::Reset;
17721772 }
17731773 return ModeResponse::NotRecognized;
1774- }(mode);
1775-
1776- auto const code = toDECModeNum (static_cast <DECMode>(mode));
1774+ }();
17771775
1778- reply (" \033 [?{};{}$y" , code , static_cast <unsigned >(modeResponse));
1776+ reply (" \033 [?{};{}$y" , mode , static_cast <unsigned >(modeResponse));
17791777}
17801778
17811779template <CellConcept Cell>
@@ -2391,67 +2389,9 @@ namespace impl
23912389 }
23922390 }
23932391
2394- optional<DECMode> toDECMode (unsigned value)
2395- {
2396- switch (value)
2397- {
2398- case 1 : return DECMode::UseApplicationCursorKeys;
2399- case 2 : return DECMode::DesignateCharsetUSASCII;
2400- case 3 : return DECMode::Columns132;
2401- case 4 : return DECMode::SmoothScroll;
2402- case 5 : return DECMode::ReverseVideo;
2403- case 6 : return DECMode::Origin;
2404- case 7 : return DECMode::AutoWrap;
2405- // TODO: Ps = 8 -> Auto-repeat Keys (DECARM), VT100.
2406- case 9 : return DECMode::MouseProtocolX10;
2407- case 10 : return DECMode::ShowToolbar;
2408- case 12 : return DECMode::BlinkingCursor;
2409- case 19 : return DECMode::PrinterExtend;
2410- case 25 : return DECMode::VisibleCursor;
2411- case 30 : return DECMode::ShowScrollbar;
2412- // TODO: Ps = 3 5 -> Enable font-shifting functions (rxvt).
2413- // IGNORE? Ps = 3 8 -> Enter Tektronix Mode (DECTEK), VT240, xterm.
2414- // TODO: Ps = 4 0 -> Allow 80 -> 132 Mode, xterm.
2415- case 40 : return DECMode::AllowColumns80to132;
2416- // IGNORE: Ps = 4 1 -> more(1) fix (see curses resource).
2417- // TODO: Ps = 4 2 -> Enable National Replacement Character sets (DECNRCM), VT220.
2418- // TODO: Ps = 4 4 -> Turn On Margin Bell, xterm.
2419- // TODO: Ps = 4 5 -> Reverse-wraparound Mode, xterm.
2420- case 46 : return DECMode::DebugLogging;
2421- case 47 : return DECMode::UseAlternateScreen;
2422- // TODO: Ps = 6 6 -> Application keypad (DECNKM), VT320.
2423- // TODO: Ps = 6 7 -> Backarrow key sends backspace (DECBKM), VT340, VT420. This sets the
2424- // backarrowKey resource to "true".
2425- case 69 : return DECMode::LeftRightMargin;
2426- case 80 : return DECMode::NoSixelScrolling;
2427- case 1000 : return DECMode::MouseProtocolNormalTracking;
2428- case 1001 : return DECMode::MouseProtocolHighlightTracking;
2429- case 1002 : return DECMode::MouseProtocolButtonTracking;
2430- case 1003 : return DECMode::MouseProtocolAnyEventTracking;
2431- case 1004 : return DECMode::FocusTracking;
2432- case 1005 : return DECMode::MouseExtended;
2433- case 1006 : return DECMode::MouseSGR;
2434- case 1007 : return DECMode::MouseAlternateScroll;
2435- case 1015 : return DECMode::MouseURXVT;
2436- case 1016 : return DECMode::MouseSGRPixels;
2437- case 1047 : return DECMode::UseAlternateScreen;
2438- case 1048 : return DECMode::SaveCursor;
2439- case 1049 : return DECMode::ExtendedAltScreen;
2440- case 2004 : return DECMode::BracketedPaste;
2441- case 2026 : return DECMode::BatchedRendering;
2442- case 2027 : return DECMode::Unicode;
2443- case 2028 : return DECMode::TextReflow;
2444- case 2029 : return DECMode::MousePassiveTracking;
2445- case 2030 : return DECMode::ReportGridCellSelection;
2446- case 2031 : return DECMode::ReportColorPaletteUpdated;
2447- case 8452 : return DECMode::SixelCursorNextToGraphic;
2448- default : return nullopt ;
2449- }
2450- }
2451-
24522392 ApplyResult setModeDEC (Sequence const & seq, size_t modeIndex, bool enable, Terminal& term)
24532393 {
2454- if (auto const modeOpt = toDECMode (seq.param (modeIndex)); modeOpt.has_value ())
2394+ if (auto const modeOpt = fromDECModeNum (seq.param (modeIndex)); modeOpt.has_value ())
24552395 {
24562396 term.setMode (modeOpt.value (), enable);
24572397 return ApplyResult::Ok;
@@ -3033,7 +2973,7 @@ namespace impl
30332973 {
30342974 vector<DECMode> modes;
30352975 for (size_t i = 0 ; i < seq.parameterCount (); ++i)
3036- if (optional<DECMode> mode = toDECMode (seq.param (i)); mode.has_value ())
2976+ if (optional<DECMode> mode = fromDECModeNum (seq.param (i)); mode.has_value ())
30372977 modes.push_back (mode.value ());
30382978 terminal.saveModes (modes);
30392979 return ApplyResult::Ok;
@@ -3043,7 +2983,7 @@ namespace impl
30432983 {
30442984 vector<DECMode> modes;
30452985 for (size_t i = 0 ; i < seq.parameterCount (); ++i)
3046- if (optional<DECMode> mode = toDECMode (seq.param (i)); mode.has_value ())
2986+ if (optional<DECMode> mode = fromDECModeNum (seq.param (i)); mode.has_value ())
30472987 modes.push_back (mode.value ());
30482988 terminal.restoreModes (modes);
30492989 return ApplyResult::Ok;
0 commit comments