diff --git a/kittens/icat/main.py b/kittens/icat/main.py index 80ec9138f..8cc022c11 100644 --- a/kittens/icat/main.py +++ b/kittens/icat/main.py @@ -138,6 +138,14 @@ Whether to surround graphics commands with escape sequences that allow them to p programs like tmux. The default is to detect when running inside tmux and automatically use the tmux passthrough escape codes. Note that when this option is enabled it implies :option:`--unicode-placeholder` as well. + + +--image-id +type=int +default=0 +The graphics protocol id to use for the created image. Normally, a random id is created if needed. +This option allows control of the id. When multiple images are sent, sequential ids starting from the specified id +are used. Valid ids are from 1 to 4294967295. Numbers outside this range are automatically wrapped. ''' help_text = ( diff --git a/tools/cmd/icat/main.go b/tools/cmd/icat/main.go index 6ae0134a9..06d320bae 100644 --- a/tools/cmd/icat/main.go +++ b/tools/cmd/icat/main.go @@ -240,8 +240,16 @@ func main(cmd *cli.Command, o *Options, args []string) (rc int, err error) { if passthrough_mode != no_passthrough { use_unicode_placeholder = true } + base_id := uint32(opts.ImageId) for num_of_items > 0 { imgd := <-output_channel + if base_id != 0 { + imgd.image_id = base_id + base_id++ + if base_id == 0 { + base_id++ + } + } imgd.use_unicode_placeholder = use_unicode_placeholder imgd.passthrough_mode = passthrough_mode num_of_items-- diff --git a/tools/cmd/icat/transmit.go b/tools/cmd/icat/transmit.go index 8fa2668dc..f6f76115c 100644 --- a/tools/cmd/icat/transmit.go +++ b/tools/cmd/icat/transmit.go @@ -313,19 +313,21 @@ func transmit_image(imgd *image_data) { if f == nil { f = transmit_stream } - if imgd.use_unicode_placeholder { - for imgd.image_id&0xFF000000 == 0 || imgd.image_id&0x00FFFF00 == 0 { - // Generate a 32-bit image id using rejection sampling such that the most - // significant byte and the two bytes in the middle are non-zero to avoid - // collisions with applications that cannot represent non-zero most - // significant bytes (which is represented by the third combining character) - // or two non-zero bytes in the middle (which requires 24-bit color mode). - imgd.image_id = next_random() - } - } else { - if len(imgd.frames) > 1 { - for imgd.image_number == 0 { - imgd.image_number = next_random() + if imgd.image_id == 0 { + if imgd.use_unicode_placeholder { + for imgd.image_id&0xFF000000 == 0 || imgd.image_id&0x00FFFF00 == 0 { + // Generate a 32-bit image id using rejection sampling such that the most + // significant byte and the two bytes in the middle are non-zero to avoid + // collisions with applications that cannot represent non-zero most + // significant bytes (which is represented by the third combining character) + // or two non-zero bytes in the middle (which requires 24-bit color mode). + imgd.image_id = next_random() + } + } else { + if len(imgd.frames) > 1 { + for imgd.image_number == 0 { + imgd.image_number = next_random() + } } } }