mirror of https://github.com/liamg/aminal.git
rewrite base OSC handler
This commit is contained in:
parent
76d846bcfe
commit
d757d2a543
|
@ -88,7 +88,7 @@ func csiSetMode(modeStr string, enabled bool, terminal *Terminal) error {
|
||||||
} else {
|
} else {
|
||||||
terminal.UseMainBuffer()
|
terminal.UseMainBuffer()
|
||||||
}
|
}
|
||||||
case "?1000", "?10061000": // ?10061000 seen from xterm
|
case "?1000", "?10061000": // ?10061000 seen from htop
|
||||||
// enable mouse tracking
|
// enable mouse tracking
|
||||||
if enabled {
|
if enabled {
|
||||||
terminal.SetMouseMode(MouseModeVT200)
|
terminal.SetMouseMode(MouseModeVT200)
|
||||||
|
|
|
@ -1,27 +1,46 @@
|
||||||
package terminal
|
package terminal
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
func oscHandler(buffer chan rune, terminal *Terminal) error {
|
func oscHandler(pty chan rune, terminal *Terminal) error {
|
||||||
b := <-buffer
|
|
||||||
switch b {
|
params := []string{}
|
||||||
case rune('0'):
|
param := ""
|
||||||
b = <-buffer
|
|
||||||
if b == rune(';') {
|
for {
|
||||||
title := []rune{}
|
b := <-pty
|
||||||
for {
|
if b == 0x07 || b == 0x5c {
|
||||||
b = <-buffer
|
params = append(params, param)
|
||||||
if b == 0x07 || b == 0x5c { // 0x07 -> BELL, 0x5c -> ST (\)
|
break
|
||||||
break
|
|
||||||
}
|
|
||||||
title = append(title, b)
|
|
||||||
}
|
|
||||||
terminal.SetTitle(string(title))
|
|
||||||
} else {
|
|
||||||
return fmt.Errorf("Invalid OSC 0 control sequence: 0x%02X", b)
|
|
||||||
}
|
}
|
||||||
|
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:
|
default:
|
||||||
return fmt.Errorf("Unknown OSC control sequence: 0x%02X", b)
|
return fmt.Errorf("Unknown OSC control sequence: %s", strings.Join(params, ";"))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue