mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
Upstream is not maintained last commit was six years ago and there are various improvements to be had in the code
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
// License: GPLv3 Copyright: 2023, Kovid Goyal, <kovid at kovidgoyal.net>
|
|
|
|
package tui
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"sync"
|
|
|
|
"kitty/tools/cli"
|
|
"kitty/tools/utils"
|
|
"kitty/tools/utils/base85"
|
|
)
|
|
|
|
var _ = fmt.Print
|
|
|
|
var RunningAsUI = sync.OnceValue(func() bool {
|
|
defer func() { os.Unsetenv("KITTEN_RUNNING_AS_UI") }()
|
|
return os.Getenv("KITTEN_RUNNING_AS_UI") != ""
|
|
})
|
|
|
|
func PrepareRootCmd(root *cli.Command) {
|
|
if RunningAsUI() {
|
|
root.CallbackOnError = func(cmd *cli.Command, err error, during_parsing bool, exit_code int) int {
|
|
cli.ShowError(err)
|
|
os.Stdout.WriteString("\x1bP@kitty-overlay-ready|\x1b\\")
|
|
HoldTillEnter(true)
|
|
return exit_code
|
|
}
|
|
}
|
|
}
|
|
|
|
func KittenOutputSerializer() func(any) (string, error) {
|
|
if RunningAsUI() {
|
|
return func(what any) (string, error) {
|
|
data, err := json.Marshal(what)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return "\x1bP@kitty-kitten-result|" + base85.EncodeToString(data) + "\x1b\\", nil
|
|
}
|
|
}
|
|
return func(what any) (string, error) {
|
|
if sval, ok := what.(string); ok {
|
|
return sval, nil
|
|
}
|
|
data, err := json.MarshalIndent(what, "", " ")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return utils.UnsafeBytesToString(data), nil
|
|
}
|
|
}
|