mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-19 23:14:55 +02:00
Allow using defer in KittenMain
This commit is contained in:
@@ -16,25 +16,25 @@ import (
|
|||||||
|
|
||||||
var _ = fmt.Print
|
var _ = fmt.Print
|
||||||
|
|
||||||
func fatal(err error) {
|
func fatal(err error) int {
|
||||||
cli.ShowError(err)
|
cli.ShowError(err)
|
||||||
os.Exit(1)
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func trigger_ask(name string) {
|
func trigger_ask(name string) int {
|
||||||
term, err := tty.OpenControllingTerm()
|
term, err := tty.OpenControllingTerm()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(err)
|
return fatal(err)
|
||||||
}
|
}
|
||||||
defer term.Close()
|
defer term.Close()
|
||||||
_, err = term.WriteString("\x1bP@kitty-ask|" + name + "\x1b\\")
|
_, err = term.WriteString("\x1bP@kitty-ask|" + name + "\x1b\\")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(err)
|
return fatal(err)
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunSSHAskpass() {
|
func RunSSHAskpass() int {
|
||||||
msg := os.Args[len(os.Args)-1]
|
msg := os.Args[len(os.Args)-1]
|
||||||
prompt := os.Getenv("SSH_ASKPASS_PROMPT")
|
prompt := os.Getenv("SSH_ASKPASS_PROMPT")
|
||||||
is_confirm := prompt == "confirm"
|
is_confirm := prompt == "confirm"
|
||||||
@@ -50,21 +50,21 @@ func RunSSHAskpass() {
|
|||||||
}
|
}
|
||||||
data, err := json.Marshal(q)
|
data, err := json.Marshal(q)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(err)
|
return fatal(err)
|
||||||
}
|
}
|
||||||
data_shm, err := shm.CreateTemp("askpass-*", uint64(len(data)+32))
|
data_shm, err := shm.CreateTemp("askpass-*", uint64(len(data)+32))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(fmt.Errorf("Failed to create SHM file with error: %w", err))
|
return fatal(fmt.Errorf("Failed to create SHM file with error: %w", err))
|
||||||
}
|
}
|
||||||
defer data_shm.Close()
|
defer data_shm.Close()
|
||||||
defer func() { _ = data_shm.Unlink() }()
|
defer func() { _ = data_shm.Unlink() }()
|
||||||
|
|
||||||
data_shm.Slice()[0] = 0
|
data_shm.Slice()[0] = 0
|
||||||
if err = shm.WriteWithSize(data_shm, data, 1); err != nil {
|
if err = shm.WriteWithSize(data_shm, data, 1); err != nil {
|
||||||
fatal(fmt.Errorf("Failed to write to SHM file with error: %w", err))
|
return fatal(fmt.Errorf("Failed to write to SHM file with error: %w", err))
|
||||||
}
|
}
|
||||||
if err = data_shm.Flush(); err != nil {
|
if err = data_shm.Flush(); err != nil {
|
||||||
fatal(fmt.Errorf("Failed to flush SHM file with error: %w", err))
|
return fatal(fmt.Errorf("Failed to flush SHM file with error: %w", err))
|
||||||
}
|
}
|
||||||
trigger_ask(data_shm.Name())
|
trigger_ask(data_shm.Name())
|
||||||
for {
|
for {
|
||||||
@@ -75,14 +75,14 @@ func RunSSHAskpass() {
|
|||||||
}
|
}
|
||||||
data, err = shm.ReadWithSize(data_shm, 1)
|
data, err = shm.ReadWithSize(data_shm, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(fmt.Errorf("Failed to read from SHM file with error: %w", err))
|
return fatal(fmt.Errorf("Failed to read from SHM file with error: %w", err))
|
||||||
}
|
}
|
||||||
response := ""
|
response := ""
|
||||||
if is_confirm {
|
if is_confirm {
|
||||||
var ok bool
|
var ok bool
|
||||||
err = json.Unmarshal(data, &ok)
|
err = json.Unmarshal(data, &ok)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(fmt.Errorf("Failed to parse response data: %#v with error: %w", string(data), err))
|
return fatal(fmt.Errorf("Failed to parse response data: %#v with error: %w", string(data), err))
|
||||||
}
|
}
|
||||||
response = "no"
|
response = "no"
|
||||||
if ok {
|
if ok {
|
||||||
@@ -91,7 +91,7 @@ func RunSSHAskpass() {
|
|||||||
} else {
|
} else {
|
||||||
err = json.Unmarshal(data, &response)
|
err = json.Unmarshal(data, &response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(fmt.Errorf("Failed to parse response data: %#v with error: %w", string(data), err))
|
return fatal(fmt.Errorf("Failed to parse response data: %#v with error: %w", string(data), err))
|
||||||
}
|
}
|
||||||
if is_fingerprint_check {
|
if is_fingerprint_check {
|
||||||
response = strings.ToLower(response)
|
response = strings.ToLower(response)
|
||||||
@@ -106,4 +106,5 @@ func RunSSHAskpass() {
|
|||||||
if response != "" {
|
if response != "" {
|
||||||
fmt.Println(response)
|
fmt.Println(response)
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -565,13 +565,6 @@ func (self *Command) ExecArgs(args []string) (exit_code int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Command) Exec(args ...string) {
|
|
||||||
if len(args) == 0 {
|
|
||||||
args = os.Args
|
|
||||||
}
|
|
||||||
os.Exit(self.ExecArgs(args))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (self *Command) GetCompletions(argv []string, init_completions func(*Completions)) *Completions {
|
func (self *Command) GetCompletions(argv []string, init_completions func(*Completions)) *Completions {
|
||||||
ans := NewCompletions()
|
ans := NewCompletions()
|
||||||
if init_completions != nil {
|
if init_completions != nil {
|
||||||
|
|||||||
@@ -16,13 +16,12 @@ import (
|
|||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
func KittenMain(args ...string) {
|
func KittenMain(args ...string) int {
|
||||||
krm := os.Getenv("KITTY_KITTEN_RUN_MODULE")
|
krm := os.Getenv("KITTY_KITTEN_RUN_MODULE")
|
||||||
os.Unsetenv("KITTY_KITTEN_RUN_MODULE")
|
os.Unsetenv("KITTY_KITTEN_RUN_MODULE")
|
||||||
switch krm {
|
switch krm {
|
||||||
case "ssh_askpass":
|
case "ssh_askpass":
|
||||||
ssh.RunSSHAskpass()
|
return ssh.RunSSHAskpass()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
root := cli.NewRootCommand()
|
root := cli.NewRootCommand()
|
||||||
root.ShortDescription = "Fast, statically compiled implementations of various kittens (command line tools for use with kitty)"
|
root.ShortDescription = "Fast, statically compiled implementations of various kittens (command line tools for use with kitty)"
|
||||||
@@ -49,9 +48,9 @@ func KittenMain(args ...string) {
|
|||||||
completion.EntryPoint(root)
|
completion.EntryPoint(root)
|
||||||
|
|
||||||
root.SubCommandIsOptional = true
|
root.SubCommandIsOptional = true
|
||||||
root.Exec(args...)
|
return root.ExecArgs(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
KittenMain()
|
os.Exit(KittenMain())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user