Skip to content

Commit

Permalink
refactor: bracketed-paste active state
Browse files Browse the repository at this point in the history
Move tracking bp to the program instead of the renderer. The renderer
doesn't need to know about the state of bp and gains nothing from that
information.
  • Loading branch information
aymanbagabas committed Aug 13, 2024
1 parent 4247aac commit 3075646
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 92 deletions.
25 changes: 12 additions & 13 deletions nil_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@ package tea

type nilRenderer struct{}

func (n nilRenderer) start() {}
func (n nilRenderer) stop() {}
func (n nilRenderer) kill() {}
func (n nilRenderer) write(_ string) {}
func (n nilRenderer) repaint() {}
func (n nilRenderer) clearScreen() {}
func (n nilRenderer) altScreen() bool { return false }
func (n nilRenderer) enterAltScreen() {}
func (n nilRenderer) exitAltScreen() {}
func (n nilRenderer) showCursor() {}
func (n nilRenderer) hideCursor() {}
func (n nilRenderer) execute(_ string) {}
func (n nilRenderer) bracketedPasteActive() bool { return false }
func (nilRenderer) start() {}
func (nilRenderer) stop() {}
func (nilRenderer) kill() {}
func (nilRenderer) write(string) {}
func (nilRenderer) repaint() {}
func (nilRenderer) clearScreen() {}
func (nilRenderer) altScreen() bool { return false }
func (nilRenderer) enterAltScreen() {}
func (nilRenderer) exitAltScreen() {}
func (nilRenderer) showCursor() {}
func (nilRenderer) hideCursor() {}
func (nilRenderer) execute(string) {}
4 changes: 0 additions & 4 deletions renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ type renderer interface {
// Hide the cursor.
hideCursor()

// bracketedPasteActive reports whether bracketed paste mode is
// currently enabled.
bracketedPasteActive() bool

// execute writes a sequence to the terminal.
execute(string)
}
Expand Down
73 changes: 0 additions & 73 deletions standard_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ type standardRenderer struct {
// essentially whether or not we're using the full size of the terminal
altScreenActive bool

// whether or not we're currently using bracketed paste
bpActive bool

// renderer dimensions; usually the size of the window
width int
height int
Expand Down Expand Up @@ -393,76 +390,6 @@ func (r *standardRenderer) hideCursor() {
r.execute(ansi.HideCursor)
}

func (r *standardRenderer) enableMouseCellMotion() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.EnableMouseCellMotion)
}

func (r *standardRenderer) disableMouseCellMotion() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.DisableMouseCellMotion)
}

func (r *standardRenderer) enableMouseAllMotion() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.EnableMouseAllMotion)
}

func (r *standardRenderer) disableMouseAllMotion() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.DisableMouseAllMotion)
}

func (r *standardRenderer) enableMouseSGRMode() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.EnableMouseSgrExt)
}

func (r *standardRenderer) disableMouseSGRMode() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.DisableMouseSgrExt)
}

func (r *standardRenderer) enableBracketedPaste() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.EnableBracketedPaste)
r.bpActive = true
}

func (r *standardRenderer) disableBracketedPaste() {
r.mtx.Lock()
defer r.mtx.Unlock()

r.execute(ansi.DisableBracketedPaste)
r.bpActive = false
}

func (r *standardRenderer) bracketedPasteActive() bool {
r.mtx.Lock()
defer r.mtx.Unlock()

return r.bpActive
}

// setWindowTitle sets the terminal window title.
func (r *standardRenderer) setWindowTitle(title string) {
r.execute(ansi.SetWindowTitle(title))
}

// setIgnoredLines specifies lines not to be touched by the standard Bubble Tea
// renderer.
func (r *standardRenderer) setIgnoredLines(from int, to int) {
Expand Down
7 changes: 5 additions & 2 deletions tea.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ type Program struct {
altScreenWasActive bool
ignoreSignals uint32

bpWasActive bool // was the bracketed paste mode active before releasing the terminal?
bpActive bool // was the bracketed paste mode active before releasing the terminal?

filter func(Model, Msg) Msg

Expand Down Expand Up @@ -386,9 +386,11 @@ func (p *Program) eventLoop(model Model, cmds chan Cmd) (Model, error) {

case enableBracketedPasteMsg:
p.renderer.execute(ansi.EnableBracketedPaste)
p.bpActive = true

case disableBracketedPasteMsg:
p.renderer.execute(ansi.DisableBracketedPaste)
p.bpActive = false

case execMsg:
// NB: this blocks.
Expand Down Expand Up @@ -545,6 +547,7 @@ func (p *Program) Run() (Model, error) {
}
if p.startupOptions&withoutBracketedPaste == 0 {
p.renderer.execute(ansi.EnableBracketedPaste)
p.bpActive = true
}
if p.startupOptions&withMouseCellMotion != 0 {
p.renderer.execute(ansi.EnableMouseCellMotion)
Expand Down Expand Up @@ -696,7 +699,6 @@ func (p *Program) ReleaseTerminal() error {
if p.renderer != nil {
p.renderer.stop()
p.altScreenWasActive = p.renderer.altScreen()
p.bpWasActive = p.renderer.bracketedPasteActive()
}

return p.restoreTerminalState()
Expand Down Expand Up @@ -724,6 +726,7 @@ func (p *Program) RestoreTerminal() error {
p.renderer.start()
p.renderer.hideCursor()
p.renderer.execute(ansi.EnableBracketedPaste)
p.bpActive = true
}

// If the output is a terminal, it may have been resized while another
Expand Down
1 change: 1 addition & 0 deletions tty.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func (p *Program) initTerminal() error {
func (p *Program) restoreTerminalState() error {
if p.renderer != nil {
p.renderer.execute(ansi.DisableBracketedPaste)
p.bpActive = false
p.renderer.showCursor()
p.disableMouse()

Expand Down

0 comments on commit 3075646

Please sign in to comment.