mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-12 10:47:05 +02:00
Go SHM API to read simple data with size from SHM name
This commit is contained in:
@@ -5,10 +5,13 @@ package ssh
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/user"
|
||||
"strings"
|
||||
|
||||
"kitty/tools/cli"
|
||||
"kitty/tools/tty"
|
||||
|
||||
"golang.org/x/exp/maps"
|
||||
"golang.org/x/sys/unix"
|
||||
@@ -16,6 +19,74 @@ import (
|
||||
|
||||
var _ = fmt.Print
|
||||
|
||||
func get_destination(hostname string) (username, hostname_for_match string) {
|
||||
u, err := user.Current()
|
||||
if err == nil {
|
||||
username = u.Username
|
||||
}
|
||||
hostname_for_match = hostname
|
||||
if strings.HasPrefix(hostname, "ssh://") {
|
||||
p, err := url.Parse(hostname)
|
||||
if err == nil {
|
||||
hostname_for_match = p.Hostname()
|
||||
if p.User.Username() != "" {
|
||||
username = p.User.Username()
|
||||
}
|
||||
}
|
||||
} else if strings.Contains(hostname, "@") && hostname[0] != '@' {
|
||||
username, hostname_for_match, _ = strings.Cut(hostname, "@")
|
||||
}
|
||||
if strings.Contains(hostname, "@") && hostname[0] != '@' {
|
||||
_, hostname_for_match, _ = strings.Cut(hostname_for_match, "@")
|
||||
}
|
||||
hostname_for_match, _, _ = strings.Cut(hostname_for_match, ":")
|
||||
return
|
||||
}
|
||||
|
||||
func add_cloned_env(val string) map[string]string {
|
||||
return nil // TODO: Implement me
|
||||
}
|
||||
|
||||
func parse_kitten_args(found_extra_args []string, username, hostname_for_match string) (overrides []string, literal_env map[string]string) {
|
||||
literal_env = make(map[string]string)
|
||||
overrides = make([]string, 0, 4)
|
||||
for i, a := range found_extra_args {
|
||||
if i%2 == 0 {
|
||||
continue
|
||||
}
|
||||
if key, val, found := strings.Cut(a, "="); found {
|
||||
if key == "clone_env" {
|
||||
le := add_cloned_env(val)
|
||||
if le != nil {
|
||||
literal_env = le
|
||||
}
|
||||
} else if key != "hostname" {
|
||||
overrides = append(overrides, key+" "+val)
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(overrides) > 0 {
|
||||
overrides = append([]string{"hostname " + username + "@" + hostname_for_match}, overrides...)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func run_ssh(ssh_args, server_args, found_extra_args []string) (rc int, err error) {
|
||||
cmd := append([]string{ssh_exe()}, ssh_args...)
|
||||
hostname, remote_args := server_args[0], server_args[1:]
|
||||
if len(remote_args) == 0 {
|
||||
cmd = append(cmd, "-t")
|
||||
}
|
||||
insertion_point := len(cmd)
|
||||
cmd = append(cmd, "--", hostname)
|
||||
uname, hostname_for_match := get_destination(hostname)
|
||||
overrides, literal_env := parse_kitten_args(found_extra_args, uname, hostname_for_match)
|
||||
if insertion_point > 0 && overrides != nil && literal_env != nil {
|
||||
}
|
||||
// TODO: Implement me
|
||||
return
|
||||
}
|
||||
|
||||
func main(cmd *cli.Command, o *Options, args []string) (rc int, err error) {
|
||||
if len(args) > 0 {
|
||||
switch args[0] {
|
||||
@@ -44,10 +115,13 @@ func main(cmd *cli.Command, o *Options, args []string) (rc int, err error) {
|
||||
}
|
||||
return 1, unix.Exec(ssh_exe(), append([]string{"ssh"}, args...), os.Environ())
|
||||
}
|
||||
if false {
|
||||
return len(ssh_args) + len(server_args), nil
|
||||
if os.Getenv("KITTY_WINDOW_ID") == "" || os.Getenv("KITTY_PID") == "" {
|
||||
return 1, fmt.Errorf("The SSH kitten is meant to run inside a kitty window")
|
||||
}
|
||||
return
|
||||
if !tty.IsTerminal(os.Stdin.Fd()) {
|
||||
return 1, fmt.Errorf("The SSH kitten is meant for interactive use only, STDIN must be a terminal")
|
||||
}
|
||||
return run_ssh(ssh_args, server_args, found_extra_args)
|
||||
}
|
||||
|
||||
func EntryPoint(parent *cli.Command) {
|
||||
|
||||
Reference in New Issue
Block a user