From 17f2d2c57406c64408089dcfcc57b5d3c403229d Mon Sep 17 00:00:00 2001 From: ad-chaos Date: Mon, 26 Jan 2026 14:15:10 +0530 Subject: [PATCH 1/2] Revert "Fix edit-in-kitty +lnum path" This reverts commit 0f802294689eeb0217195be0bd27e724a00722f0. --- kitty/launch.py | 12 +++++++++--- tools/cmd/edit_in_kitty/main.go | 22 ++++------------------ 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/kitty/launch.py b/kitty/launch.py index 0a8a4b4a2..233fedf54 100644 --- a/kitty/launch.py +++ b/kitty/launch.py @@ -912,8 +912,6 @@ class EditCmd: self.file_data = b'' self.file_inode = -1, -1 self.file_size = -1 - self.file_spec = '' - self.line_number = 0 self.version = 0 self.source_window_id = self.editor_window_id = -1 self.abort_signaled = '' @@ -936,7 +934,15 @@ class EditCmd: return if self.version > 0: raise ValueError(f'Unsupported version received in edit protocol: {self.version}') - self.opts, _ = parse_opts_for_clone(['--type=overlay'] + self.args) + self.opts, extra_args = parse_opts_for_clone(['--type=overlay'] + self.args) + self.file_spec = extra_args.pop() + self.line_number = 0 + import re + pat = re.compile(r'\+(-?\d+)') + for x in extra_args: + m = pat.match(x) + if m is not None: + self.line_number = int(m.group(1)) self.file_name = os.path.basename(self.file_spec) self.file_localpath = os.path.normpath(os.path.join(self.cwd, self.file_spec)) self.is_local_file = False diff --git a/tools/cmd/edit_in_kitty/main.go b/tools/cmd/edit_in_kitty/main.go index e84370d93..cef842fb5 100644 --- a/tools/cmd/edit_in_kitty/main.go +++ b/tools/cmd/edit_in_kitty/main.go @@ -165,7 +165,7 @@ func edit_loop(data_to_send string, kill_if_signaled bool, on_data OnDataCallbac return } -func edit_in_kitty(path string, opts *Options, line_number int) (err error) { +func edit_in_kitty(path string, opts *Options) (err error) { read_file, err := os.Open(path) if err != nil { return fmt.Errorf("Failed to open %s for reading with error: %w", path, err) @@ -206,8 +206,6 @@ func edit_in_kitty(path string, opts *Options, line_number int) (err error) { return fmt.Errorf("Failed to get the current working directory with error: %w", err) } add_encoded("cwd", cwd) - add_encoded("file_spec", path) - add_encoded("line_number", strconv.Itoa(line_number)) for _, arg := range os.Args[2:] { add_encoded("a", arg) } @@ -247,28 +245,16 @@ func EntryPoint(parent *cli.Command) *cli.Command { fmt.Fprintln(os.Stderr, "Usage:", cmd.Usage) return 1, fmt.Errorf("No file to edit specified.") } - lineNumber := 0 - fileArgs := []string{} - for _, arg := range args { - if strings.HasPrefix(arg, "+") { - ln, err := strconv.Atoi(arg[1:]) - if err == nil { - lineNumber = ln - continue - } - } - fileArgs = append(fileArgs, arg) - } - if len(fileArgs) != 1 { + if len(args) != 1 { fmt.Fprintln(os.Stderr, "Usage:", cmd.Usage) - return 1, fmt.Errorf("Only one file to edit must be specified, optionally with a line number") + return 1, fmt.Errorf("Only one file to edit must be specified") } var opts Options err = cmd.GetOptionValues(&opts) if err != nil { return 1, err } - err = edit_in_kitty(fileArgs[0], &opts, lineNumber) + err = edit_in_kitty(args[0], &opts) return 0, err }, }) From 48975374819bee092afd717b465e856253177a6b Mon Sep 17 00:00:00 2001 From: ad-chaos Date: Mon, 26 Jan 2026 15:13:16 +0530 Subject: [PATCH 2/2] better fix for kitty +lnum path --- tools/cmd/edit_in_kitty/main.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/cmd/edit_in_kitty/main.go b/tools/cmd/edit_in_kitty/main.go index cef842fb5..62addfb06 100644 --- a/tools/cmd/edit_in_kitty/main.go +++ b/tools/cmd/edit_in_kitty/main.go @@ -236,7 +236,7 @@ type Options struct { func EntryPoint(parent *cli.Command) *cli.Command { sc := parent.AddSubCommand(&cli.Command{ Name: "edit-in-kitty", - Usage: "[options] file-to-edit", + Usage: "[options] [+lnum] file-to-edit", ShortDescription: "Edit a file in a kitty overlay window", HelpText: "Edit the specified file in a kitty overlay window. Works over SSH as well.\n\n" + "For usage instructions see: https://sw.kovidgoyal.net/kitty/shell-integration/#edit-file", @@ -245,16 +245,27 @@ func EntryPoint(parent *cli.Command) *cli.Command { fmt.Fprintln(os.Stderr, "Usage:", cmd.Usage) return 1, fmt.Errorf("No file to edit specified.") } - if len(args) != 1 { + + var file_path string + if len(args) == 1 { + file_path = args[0] + } else if len(args) == 2 && strings.HasPrefix(args[0], "+") { + var lnum string + lnum, file_path = args[0][1:], args[1] + if _, err := strconv.Atoi(lnum); err != nil { + return 1, fmt.Errorf("Invalid line number %s", lnum) + } + } else { fmt.Fprintln(os.Stderr, "Usage:", cmd.Usage) - return 1, fmt.Errorf("Only one file to edit must be specified") + return 1, fmt.Errorf("Only one file to edit and optionally a line number must be specified") } + var opts Options err = cmd.GetOptionValues(&opts) if err != nil { return 1, err } - err = edit_in_kitty(args[0], &opts) + err = edit_in_kitty(file_path, &opts) return 0, err }, })