rewrite base OSC handler

This commit is contained in:
Liam Galvin 2018-08-13 13:30:13 +01:00
parent 76d846bcfe
commit d757d2a543
2 changed files with 39 additions and 20 deletions

View File

@ -88,7 +88,7 @@ func csiSetMode(modeStr string, enabled bool, terminal *Terminal) error {
} else {
terminal.UseMainBuffer()
}
case "?1000", "?10061000": // ?10061000 seen from xterm
case "?1000", "?10061000": // ?10061000 seen from htop
// enable mouse tracking
if enabled {
terminal.SetMouseMode(MouseModeVT200)

View File

@ -1,27 +1,46 @@
package terminal
import "fmt"
import (
"fmt"
"strings"
)
func oscHandler(buffer chan rune, terminal *Terminal) error {
b := <-buffer
switch b {
case rune('0'):
b = <-buffer
if b == rune(';') {
title := []rune{}
for {
b = <-buffer
if b == 0x07 || b == 0x5c { // 0x07 -> BELL, 0x5c -> ST (\)
break
}
title = append(title, b)
}
terminal.SetTitle(string(title))
} else {
return fmt.Errorf("Invalid OSC 0 control sequence: 0x%02X", b)
func oscHandler(pty chan rune, terminal *Terminal) error {
params := []string{}
param := ""
for {
b := <-pty
if b == 0x07 || b == 0x5c {
params = append(params, param)
break
}
if b == ';' {
params = append(params, param)
param = ""
continue
}
param = fmt.Sprintf("%s%c", param, b)
}
if len(params) == 0 {
return fmt.Errorf("OSC with no params")
}
pT := params[len(params)-1]
pS := params[:len(params)-1]
if len(pS) == 0 {
pS = []string{pT}
pT = ""
}
switch pS[0] {
case "0", "2":
terminal.SetTitle(pT)
default:
return fmt.Errorf("Unknown OSC control sequence: 0x%02X", b)
return fmt.Errorf("Unknown OSC control sequence: %s", strings.Join(params, ";"))
}
return nil
}