mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-05-13 08:26:56 +00:00
Allow using defer in KittenMain
This commit is contained in:
parent
ca0ff68d8e
commit
ba96fa06fe
3 changed files with 19 additions and 26 deletions
|
|
@ -16,25 +16,25 @@ import (
|
|||
|
||||
var _ = fmt.Print
|
||||
|
||||
func fatal(err error) {
|
||||
func fatal(err error) int {
|
||||
cli.ShowError(err)
|
||||
os.Exit(1)
|
||||
return 1
|
||||
}
|
||||
|
||||
func trigger_ask(name string) {
|
||||
func trigger_ask(name string) int {
|
||||
term, err := tty.OpenControllingTerm()
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
return fatal(err)
|
||||
}
|
||||
defer term.Close()
|
||||
_, err = term.WriteString("\x1bP@kitty-ask|" + name + "\x1b\\")
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
return fatal(err)
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
func RunSSHAskpass() {
|
||||
func RunSSHAskpass() int {
|
||||
msg := os.Args[len(os.Args)-1]
|
||||
prompt := os.Getenv("SSH_ASKPASS_PROMPT")
|
||||
is_confirm := prompt == "confirm"
|
||||
|
|
@ -50,21 +50,21 @@ func RunSSHAskpass() {
|
|||
}
|
||||
data, err := json.Marshal(q)
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
return fatal(err)
|
||||
}
|
||||
data_shm, err := shm.CreateTemp("askpass-*", uint64(len(data)+32))
|
||||
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 func() { _ = data_shm.Unlink() }()
|
||||
|
||||
data_shm.Slice()[0] = 0
|
||||
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 {
|
||||
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())
|
||||
for {
|
||||
|
|
@ -75,14 +75,14 @@ func RunSSHAskpass() {
|
|||
}
|
||||
data, err = shm.ReadWithSize(data_shm, 1)
|
||||
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 := ""
|
||||
if is_confirm {
|
||||
var ok bool
|
||||
err = json.Unmarshal(data, &ok)
|
||||
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"
|
||||
if ok {
|
||||
|
|
@ -91,7 +91,7 @@ func RunSSHAskpass() {
|
|||
} else {
|
||||
err = json.Unmarshal(data, &response)
|
||||
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 {
|
||||
response = strings.ToLower(response)
|
||||
|
|
@ -106,4 +106,5 @@ func RunSSHAskpass() {
|
|||
if response != "" {
|
||||
fmt.Println(response)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -565,13 +565,6 @@ func (self *Command) ExecArgs(args []string) (exit_code int) {
|
|||
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 {
|
||||
ans := NewCompletions()
|
||||
if init_completions != nil {
|
||||
|
|
|
|||
|
|
@ -16,13 +16,12 @@ import (
|
|||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func KittenMain(args ...string) {
|
||||
func KittenMain(args ...string) int {
|
||||
krm := os.Getenv("KITTY_KITTEN_RUN_MODULE")
|
||||
os.Unsetenv("KITTY_KITTEN_RUN_MODULE")
|
||||
switch krm {
|
||||
case "ssh_askpass":
|
||||
ssh.RunSSHAskpass()
|
||||
return
|
||||
return ssh.RunSSHAskpass()
|
||||
}
|
||||
root := cli.NewRootCommand()
|
||||
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)
|
||||
|
||||
root.SubCommandIsOptional = true
|
||||
root.Exec(args...)
|
||||
return root.ExecArgs(args)
|
||||
}
|
||||
|
||||
func main() {
|
||||
KittenMain()
|
||||
os.Exit(KittenMain())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue