Go SHM API to read simple data with size from SHM name

This commit is contained in:
Kovid Goyal
2023-02-20 21:23:23 +05:30
parent 3f829ccdde
commit 5a8d903a4d
7 changed files with 229 additions and 4 deletions

View File

@@ -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) {