Files
kte/TerminalFrontend.h

41 lines
1.1 KiB
C++

/*
* TerminalFrontend - couples TerminalInputHandler + TerminalRenderer and owns ncurses lifecycle
*/
#pragma once
#include <termios.h>
#include <signal.h>
#include "Frontend.h"
#include "TerminalInputHandler.h"
#include "TerminalRenderer.h"
class TerminalFrontend final : public Frontend {
public:
TerminalFrontend() = default;
~TerminalFrontend() override = default;
// Configurable ESC key delay (ms) for ncurses' set_escdelay().
// Controls how long ncurses waits to distinguish ESC vs. meta sequences.
// Adjust if your terminal needs a different threshold.
static constexpr int kEscDelayMs = 50;
bool Init(int &argc, char **argv, Editor &ed) override;
void Step(Editor &ed, bool &running) override;
void Shutdown() override;
private:
TerminalInputHandler input_{};
TerminalRenderer renderer_{};
int prev_r_ = 0;
int prev_c_ = 0;
// Saved terminal attributes to restore on shutdown
bool have_orig_tio_ = false;
struct termios orig_tio_{};
// Saved SIGINT handler to restore on shutdown
bool have_old_sigint_ = false;
struct sigaction old_sigint_{};
};