From 7ed70154997b5b216bebdc77e5fc4c611a42f564 Mon Sep 17 00:00:00 2001 From: rrrooommmaaa Date: Sat, 23 Mar 2019 01:30:34 +0300 Subject: [PATCH] correct handling (ignoring) Privacy Message sequence (ESC ^) (#264) --- terminal/ansi.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/terminal/ansi.go b/terminal/ansi.go index e56f697..ee181ac 100644 --- a/terminal/ansi.go +++ b/terminal/ansi.go @@ -17,6 +17,7 @@ var ansiSequenceMap = map[rune]escapeSequenceHandler{ 'P': sixelHandler, 'c': risHandler, //RIS '#': screenStateHandler, + '^': privacyMessageHandler, '(': scs0Handler, // select character set into G0 ')': scs1Handler, // select character set into G1 '*': swallowHandler(1), // character set bullshit @@ -104,3 +105,24 @@ func tabSetHandler(pty chan rune, terminal *Terminal) error { terminal.terminalState.TabSetAtCursor() return nil } + +func privacyMessageHandler(pty chan rune, terminal *Terminal) error { + // Handler should lock the terminal if there will be write operations to any data read by the renderer + // terminal.Lock() + // defer terminal.Unlock() + + isEscaped := false + for { + b := <-pty + if b == 0x18 /*CAN*/ || b == 0x1a /*SUB*/ || (b == 0x5c /*backslash*/ && isEscaped) { + break + } + if isEscaped { + isEscaped = false + } else if b == 0x1b { + isEscaped = true + continue + } + } + return nil +}