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 {
|
||||
terminal.UseMainBuffer()
|
||||
}
|
||||
case "?1000", "?10061000": // ?10061000 seen from xterm
|
||||
case "?1000", "?10061000": // ?10061000 seen from htop
|
||||
// enable mouse tracking
|
||||
if enabled {
|
||||
terminal.SetMouseMode(MouseModeVT200)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue