package main import ( // Standard "fmt" "net/http" "os" "os/exec" "flag" ) const PORT = 13700 var ( svg string ) func main() { var err error flag.StringVar(&svg, "svg", "", "Path to SVG file") flag.Parse() if svg == "" { fmt.Printf("Specify -svg\n") os.Exit(1) } http.HandleFunc("/", HandleIndex) http.HandleFunc("/index.svg", HandleIndexSvg) http.HandleFunc("/jumpto", HandleJumpTo) addr := fmt.Sprintf("[::]:%d", PORT) fmt.Printf("Listening on %s\n", addr) err = http.ListenAndServe(addr, nil) if err != nil { fmt.Println(err) os.Exit(1) } } func HandleIndex(w http.ResponseWriter, r *http.Request) { page := `
` w.Write([]byte(page)) } func HandleIndexSvg(w http.ResponseWriter, r *http.Request) { content, err := os.ReadFile(svg) if err != nil { fmt.Printf("Reading SVG file (%s): %s\n", svg, err) return } w.Header().Add("Content-Type", "image/svg+xml") w.Write(content) } func HandleJumpTo(w http.ResponseWriter, r *http.Request) { w.Header().Add("Access-Control-Allow-Origin", "*") instance := "/tmp/"+r.URL.Query().Get("instance") var cmd string fname := r.URL.Query().Get("file") split := r.URL.Query().Get("split") if split == "yes" { cmd = fmt.Sprintf(`:call CodeSplit("%s"):set hlsearch`, fname) } else { cmd = fmt.Sprintf(`:drop %s:set hlsearch`, fname) } searchFor := r.URL.Query().Get("search") if searchFor != "" { cmd += fmt.Sprintf("/%sz", searchFor) } fmt.Printf("Remote command: %s\n", cmd) vim := exec.Command("nvim", "--server", instance, "--remote-send", cmd) err := vim.Run() if err != nil { fmt.Printf("%s\n", err) w.Write([]byte(err.Error())) } w.Write([]byte("OK")) }