Add an option to control max file size for edit-in-kitty

This commit is contained in:
Kovid Goyal 2022-11-18 10:24:38 +05:30
parent 0757fcc451
commit a9bb341e43
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -164,7 +164,7 @@ func edit_loop(data_to_send string, kill_if_signaled bool, on_data OnDataCallbac
return return
} }
func edit_in_kitty(path string) (err error) { func edit_in_kitty(path string, opts *Options) (err error) {
read_file, err := os.Open(path) read_file, err := os.Open(path)
if err != nil { if err != nil {
return fmt.Errorf("Failed to open %s for reading with error: %w", path, err) return fmt.Errorf("Failed to open %s for reading with error: %w", path, err)
@ -175,7 +175,7 @@ func edit_in_kitty(path string) (err error) {
if err != nil { if err != nil {
return fmt.Errorf("Failed to stat %s with error: %w", path, err) return fmt.Errorf("Failed to stat %s with error: %w", path, err)
} }
if s.Size > 8*1024*1024 { if s.Size > int64(opts.MaxFileSize)*1024*1024 {
return fmt.Errorf("File size %s is too large for performant editing", humanize.Bytes(uint64(s.Size))) return fmt.Errorf("File size %s is too large for performant editing", humanize.Bytes(uint64(s.Size)))
} }
@ -228,6 +228,10 @@ func edit_in_kitty(path string) (err error) {
return return
} }
type Options struct {
MaxFileSize int
}
func EntryPoint(parent *cli.Command) *cli.Command { func EntryPoint(parent *cli.Command) *cli.Command {
sc := parent.AddSubCommand(&cli.Command{ sc := parent.AddSubCommand(&cli.Command{
Name: "edit-in-kitty", Name: "edit-in-kitty",
@ -244,10 +248,21 @@ func EntryPoint(parent *cli.Command) *cli.Command {
fmt.Fprintln(os.Stderr, "Usage:", cmd.Usage) 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 must be specified")
} }
err = edit_in_kitty(args[0]) var opts Options
err = cmd.GetOptionValues(&opts)
if err != nil {
return 1, err
}
err = edit_in_kitty(args[0], &opts)
return 0, err return 0, err
}, },
}) })
AddCloneSafeOpts(sc) AddCloneSafeOpts(sc)
sc.Add(cli.OptionSpec{
Name: "--max-file-size",
Default: "8",
Type: "int",
Help: "The maximum allowed size (in MB) of files to edit. Since the file data has to be base64 encoded and transmitted over the tty device, overly large files will not perform well.",
})
return sc return sc
} }