mirror of https://github.com/liamg/aminal.git
58 lines
978 B
Go
58 lines
978 B
Go
package terminal
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func oscHandler(pty chan rune, terminal *Terminal) error {
|
|
params := []string{}
|
|
param := ""
|
|
|
|
for {
|
|
b := <-pty
|
|
if terminal.IsOSCTerminator(b) {
|
|
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)
|
|
case "10": // get/set foreground colour
|
|
if len(pS) > 1 {
|
|
if pS[1] == "?" {
|
|
terminal.Write([]byte("\x1b]10;15"))
|
|
}
|
|
}
|
|
case "11": // get/set background colour
|
|
if len(pS) > 1 {
|
|
if pS[1] == "?" {
|
|
terminal.Write([]byte("\x1b]10;0"))
|
|
}
|
|
}
|
|
default:
|
|
return fmt.Errorf("Unknown OSC control sequence: %s", strings.Join(params, ";"))
|
|
}
|
|
return nil
|
|
}
|