send_text other than from stdin works

This commit is contained in:
Kovid Goyal 2022-08-31 21:51:49 +05:30
parent 457aab7c41
commit 65c3630099
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 16 additions and 9 deletions

View File

@ -4,7 +4,6 @@
import io import io
import json import json
import os import os
import sys
from contextlib import contextmanager, suppress from contextlib import contextmanager, suppress
from typing import Dict, Iterator, List, Set, Tuple, Union from typing import Dict, Iterator, List, Set, Tuple, Union
@ -246,7 +245,6 @@ def update_at_commands() -> None:
os.remove(dest) os.remove(dest)
with open(dest, 'w') as f: with open(dest, 'w') as f:
f.write(code) f.write(code)
print('\x1b[31mTODO\x1b[m: test send_text, env', file=sys.stderr)
def main() -> None: def main() -> None:

View File

@ -101,8 +101,6 @@ Path to a file whose contents you wish to send. Note that in this case the file
are sent as is, not interpreted for escapes. are sent as is, not interpreted for escapes.
''' '''
args = RemoteCommand.Args(spec='[TEXT TO SEND]', json_field='data', special_parse='+session_id:parse_send_text(io_data, args)') args = RemoteCommand.Args(spec='[TEXT TO SEND]', json_field='data', special_parse='+session_id:parse_send_text(io_data, args)')
is_asynchronous = True
reads_streaming_data = True
def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: ArgsType) -> PayloadType: def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: ArgsType) -> PayloadType:
limit = 1024 limit = 1024

View File

@ -87,6 +87,14 @@ type wrapped_serializer struct {
all_payloads_done bool all_payloads_done bool
} }
func debug_to_log(args ...interface{}) {
f, err := os.OpenFile("/tmp/kdlog", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err == nil {
fmt.Fprintln(f, args...)
f.Close()
}
}
func (self *wrapped_serializer) next(io_data *rc_io_data) ([]byte, error) { func (self *wrapped_serializer) next(io_data *rc_io_data) ([]byte, error) {
const prefix = "\x1bP@kitty-cmd" const prefix = "\x1bP@kitty-cmd"
const suffix = "\x1b\\" const suffix = "\x1b\\"
@ -197,6 +205,7 @@ func get_response(do_io func(io_data *rc_io_data) ([]byte, error), io_data *rc_i
if errors.Is(err, os.ErrDeadlineExceeded) { if errors.Is(err, os.ErrDeadlineExceeded) {
io_data.rc.Payload = nil io_data.rc.Payload = nil
io_data.rc.CancelAsync = true io_data.rc.CancelAsync = true
io_data.multiple_payload_generator = nil
io_data.rc.NoResponse = true io_data.rc.NoResponse = true
io_data.serializer.state = 0 io_data.serializer.state = 0
do_io(io_data) do_io(io_data)

View File

@ -10,16 +10,18 @@ import (
"strings" "strings"
) )
type generator_function func(io_data *rc_io_data) (bool, error)
func parse_send_text(io_data *rc_io_data, args []string) error { func parse_send_text(io_data *rc_io_data, args []string) error {
generators := make([]generator_function, 0, 1) generators := make([]func(io_data *rc_io_data) (bool, error), 0, 1)
if len(args) > 0 { if len(args) > 0 {
text := strings.Join(args, " ") text := strings.Join(args, " ")
text_gen := func(io_data *rc_io_data) (bool, error) { text_gen := func(io_data *rc_io_data) (bool, error) {
set_payload_data(io_data, "text:"+text[:2048]) limit := len(text)
text = text[2048:] if limit > 2048 {
limit = 2048
}
set_payload_data(io_data, "text:"+text[:limit])
text = text[limit:]
return len(text) == 0, nil return len(text) == 0, nil
} }
generators = append(generators, text_gen) generators = append(generators, text_gen)