icat: allow specifying image ids

This commit is contained in:
Kovid Goyal 2023-03-09 10:17:53 +05:30
parent a56f111f98
commit 88443ef8a5
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 31 additions and 13 deletions

View File

@ -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 = (

View File

@ -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--

View File

@ -313,6 +313,7 @@ func transmit_image(imgd *image_data) {
if f == nil {
f = transmit_stream
}
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
@ -329,6 +330,7 @@ func transmit_image(imgd *image_data) {
}
}
}
}
place_cursor(imgd)
if imgd.use_unicode_placeholder && utils.Max(imgd.width_cells, imgd.height_cells) >= len(images.NumberToDiacritic) {
imgd.err = fmt.Errorf("Image too large to be displayed using Unicode placeholders. Maximum size is %dx%d cells", len(images.NumberToDiacritic), len(images.NumberToDiacritic))