mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
0aaec6b19a
I set it up so that TIOCSWINSZ on a master PTY gets forwarded to the slave. This feels intuitively right. Terminal can then use that to inform the shell or whoever is inside the slave that the window size has changed. TIOCSWINSZ also triggers the generation of a SIGWINCH signal. :^)
36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <AK/Badge.h>
|
|
#include <Kernel/CharacterDevice.h>
|
|
#include <Kernel/DoubleBuffer.h>
|
|
|
|
class SlavePTY;
|
|
|
|
class MasterPTY final : public CharacterDevice {
|
|
public:
|
|
explicit MasterPTY(unsigned index);
|
|
virtual ~MasterPTY() override;
|
|
|
|
unsigned index() const { return m_index; }
|
|
String pts_name() const;
|
|
ssize_t on_slave_write(const byte*, size_t);
|
|
bool can_write_from_slave() const;
|
|
void notify_slave_closed(Badge<SlavePTY>);
|
|
bool is_closed() const { return m_closed; }
|
|
|
|
private:
|
|
// ^CharacterDevice
|
|
virtual ssize_t read(Process&, byte*, size_t) override;
|
|
virtual ssize_t write(Process&, const byte*, size_t) override;
|
|
virtual bool can_read(Process&) const override;
|
|
virtual bool can_write(Process&) const override;
|
|
virtual void close() override;
|
|
virtual bool is_master_pty() const override { return true; }
|
|
virtual int ioctl(Process&, unsigned request, unsigned arg) override;
|
|
virtual const char* class_name() const override { return "MasterPTY"; }
|
|
|
|
RetainPtr<SlavePTY> m_slave;
|
|
unsigned m_index;
|
|
bool m_closed { false };
|
|
DoubleBuffer m_buffer;
|
|
};
|