mirror of
https://github.com/1f349/voidterm.git
synced 2024-11-13 23:41:38 +00:00
70 lines
1.1 KiB
Go
70 lines
1.1 KiB
Go
package termutil
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func (t *Terminal) handleOSC(readChan chan MeasuredRune) (renderRequired bool) {
|
|
|
|
params := []string{}
|
|
param := ""
|
|
|
|
READ:
|
|
for {
|
|
select {
|
|
case b := <-readChan:
|
|
if t.isOSCTerminator(b.Rune) {
|
|
params = append(params, param)
|
|
break READ
|
|
}
|
|
if b.Rune == ';' {
|
|
params = append(params, param)
|
|
param = ""
|
|
continue
|
|
}
|
|
param = fmt.Sprintf("%s%c", param, b.Rune)
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
if len(params) == 0 {
|
|
return false
|
|
}
|
|
|
|
pT := params[len(params)-1]
|
|
pS := params[:len(params)-1]
|
|
|
|
if len(pS) == 0 {
|
|
pS = []string{pT}
|
|
pT = ""
|
|
}
|
|
|
|
switch pS[0] {
|
|
case "0", "2", "l":
|
|
t.setTitle(pT)
|
|
case "10": // get/set foreground colour
|
|
if len(pS) > 1 {
|
|
if pS[1] == "?" {
|
|
t.WriteToPty([]byte("\x1b]10;15"))
|
|
}
|
|
}
|
|
case "11": // get/set background colour
|
|
if len(pS) > 1 {
|
|
if pS[1] == "?" {
|
|
t.WriteToPty([]byte("\x1b]10;0"))
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (t *Terminal) isOSCTerminator(r rune) bool {
|
|
for _, terminator := range oscTerminators {
|
|
if terminator == r {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|