1package kitty
2
3import "errors"
4
5// ErrMissingFile is returned when the file path is missing.
6var ErrMissingFile = errors.New("missing file path")
7
8// MaxChunkSize is the maximum chunk size for the image data.
9const MaxChunkSize = 1024 * 4
10
11// Placeholder is a special Unicode character that can be used as a placeholder
12// for an image.
13const Placeholder = '\U0010EEEE'
14
15// Graphics image format.
16const (
17 // 32-bit RGBA format.
18 RGBA = 32
19
20 // 24-bit RGB format.
21 RGB = 24
22
23 // PNG format.
24 PNG = 100
25)
26
27// Compression types.
28const (
29 Zlib = 'z'
30)
31
32// Transmission types.
33const (
34 // The data transmitted directly in the escape sequence.
35 Direct = 'd'
36
37 // The data transmitted in a regular file.
38 File = 'f'
39
40 // A temporary file is used and deleted after transmission.
41 TempFile = 't'
42
43 // A shared memory object.
44 // For POSIX see https://pubs.opengroup.org/onlinepubs/9699919799/functions/shm_open.html
45 // For Windows see https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory
46 SharedMemory = 's'
47)
48
49// Action types.
50const (
51 // Transmit image data.
52 Transmit = 't'
53 // TransmitAndPut transmit image data and display (put) it.
54 TransmitAndPut = 'T'
55 // Query terminal for image info.
56 Query = 'q'
57 // Put (display) previously transmitted image.
58 Put = 'p'
59 // Delete image.
60 Delete = 'd'
61 // Frame transmits data for animation frames.
62 Frame = 'f'
63 // Animate controls animation.
64 Animate = 'a'
65 // Compose composes animation frames.
66 Compose = 'c'
67)
68
69// Delete types.
70const (
71 // Delete all placements visible on screen
72 DeleteAll = 'a'
73 // Delete all images with the specified id, specified using the i key. If
74 // you specify a p key for the placement id as well, then only the
75 // placement with the specified image id and placement id will be deleted.
76 DeleteID = 'i'
77 // Delete newest image with the specified number, specified using the I
78 // key. If you specify a p key for the placement id as well, then only the
79 // placement with the specified number and placement id will be deleted.
80 DeleteNumber = 'n'
81 // Delete all placements that intersect with the current cursor position.
82 DeleteCursor = 'c'
83 // Delete animation frames.
84 DeleteFrames = 'f'
85 // Delete all placements that intersect a specific cell, the cell is
86 // specified using the x and y keys
87 DeleteCell = 'p'
88 // Delete all placements that intersect a specific cell having a specific
89 // z-index. The cell and z-index is specified using the x, y and z keys.
90 DeleteCellZ = 'q'
91 // Delete all images whose id is greater than or equal to the value of the x
92 // key and less than or equal to the value of the y.
93 DeleteRange = 'r'
94 // Delete all placements that intersect the specified column, specified using
95 // the x key.
96 DeleteColumn = 'x'
97 // Delete all placements that intersect the specified row, specified using
98 // the y key.
99 DeleteRow = 'y'
100 // Delete all placements that have the specified z-index, specified using the
101 // z key.
102 DeleteZ = 'z'
103)
104
105// Diacritic returns the diacritic rune at the specified index. If the index is
106// out of bounds, the first diacritic rune is returned.
107func Diacritic(i int) rune {
108 if i < 0 || i >= len(diacritics) {
109 return diacritics[0]
110 }
111 return diacritics[i]
112}
113
114// From https://sw.kovidgoyal.net/kitty/_downloads/f0a0de9ec8d9ff4456206db8e0814937/rowcolumn-diacritics.txt
115// See https://sw.kovidgoyal.net/kitty/graphics-protocol/#unicode-placeholders for further explanation.
116var diacritics = []rune{
117 '\u0305',
118 '\u030D',
119 '\u030E',
120 '\u0310',
121 '\u0312',
122 '\u033D',
123 '\u033E',
124 '\u033F',
125 '\u0346',
126 '\u034A',
127 '\u034B',
128 '\u034C',
129 '\u0350',
130 '\u0351',
131 '\u0352',
132 '\u0357',
133 '\u035B',
134 '\u0363',
135 '\u0364',
136 '\u0365',
137 '\u0366',
138 '\u0367',
139 '\u0368',
140 '\u0369',
141 '\u036A',
142 '\u036B',
143 '\u036C',
144 '\u036D',
145 '\u036E',
146 '\u036F',
147 '\u0483',
148 '\u0484',
149 '\u0485',
150 '\u0486',
151 '\u0487',
152 '\u0592',
153 '\u0593',
154 '\u0594',
155 '\u0595',
156 '\u0597',
157 '\u0598',
158 '\u0599',
159 '\u059C',
160 '\u059D',
161 '\u059E',
162 '\u059F',
163 '\u05A0',
164 '\u05A1',
165 '\u05A8',
166 '\u05A9',
167 '\u05AB',
168 '\u05AC',
169 '\u05AF',
170 '\u05C4',
171 '\u0610',
172 '\u0611',
173 '\u0612',
174 '\u0613',
175 '\u0614',
176 '\u0615',
177 '\u0616',
178 '\u0617',
179 '\u0657',
180 '\u0658',
181 '\u0659',
182 '\u065A',
183 '\u065B',
184 '\u065D',
185 '\u065E',
186 '\u06D6',
187 '\u06D7',
188 '\u06D8',
189 '\u06D9',
190 '\u06DA',
191 '\u06DB',
192 '\u06DC',
193 '\u06DF',
194 '\u06E0',
195 '\u06E1',
196 '\u06E2',
197 '\u06E4',
198 '\u06E7',
199 '\u06E8',
200 '\u06EB',
201 '\u06EC',
202 '\u0730',
203 '\u0732',
204 '\u0733',
205 '\u0735',
206 '\u0736',
207 '\u073A',
208 '\u073D',
209 '\u073F',
210 '\u0740',
211 '\u0741',
212 '\u0743',
213 '\u0745',
214 '\u0747',
215 '\u0749',
216 '\u074A',
217 '\u07EB',
218 '\u07EC',
219 '\u07ED',
220 '\u07EE',
221 '\u07EF',
222 '\u07F0',
223 '\u07F1',
224 '\u07F3',
225 '\u0816',
226 '\u0817',
227 '\u0818',
228 '\u0819',
229 '\u081B',
230 '\u081C',
231 '\u081D',
232 '\u081E',
233 '\u081F',
234 '\u0820',
235 '\u0821',
236 '\u0822',
237 '\u0823',
238 '\u0825',
239 '\u0826',
240 '\u0827',
241 '\u0829',
242 '\u082A',
243 '\u082B',
244 '\u082C',
245 '\u082D',
246 '\u0951',
247 '\u0953',
248 '\u0954',
249 '\u0F82',
250 '\u0F83',
251 '\u0F86',
252 '\u0F87',
253 '\u135D',
254 '\u135E',
255 '\u135F',
256 '\u17DD',
257 '\u193A',
258 '\u1A17',
259 '\u1A75',
260 '\u1A76',
261 '\u1A77',
262 '\u1A78',
263 '\u1A79',
264 '\u1A7A',
265 '\u1A7B',
266 '\u1A7C',
267 '\u1B6B',
268 '\u1B6D',
269 '\u1B6E',
270 '\u1B6F',
271 '\u1B70',
272 '\u1B71',
273 '\u1B72',
274 '\u1B73',
275 '\u1CD0',
276 '\u1CD1',
277 '\u1CD2',
278 '\u1CDA',
279 '\u1CDB',
280 '\u1CE0',
281 '\u1DC0',
282 '\u1DC1',
283 '\u1DC3',
284 '\u1DC4',
285 '\u1DC5',
286 '\u1DC6',
287 '\u1DC7',
288 '\u1DC8',
289 '\u1DC9',
290 '\u1DCB',
291 '\u1DCC',
292 '\u1DD1',
293 '\u1DD2',
294 '\u1DD3',
295 '\u1DD4',
296 '\u1DD5',
297 '\u1DD6',
298 '\u1DD7',
299 '\u1DD8',
300 '\u1DD9',
301 '\u1DDA',
302 '\u1DDB',
303 '\u1DDC',
304 '\u1DDD',
305 '\u1DDE',
306 '\u1DDF',
307 '\u1DE0',
308 '\u1DE1',
309 '\u1DE2',
310 '\u1DE3',
311 '\u1DE4',
312 '\u1DE5',
313 '\u1DE6',
314 '\u1DFE',
315 '\u20D0',
316 '\u20D1',
317 '\u20D4',
318 '\u20D5',
319 '\u20D6',
320 '\u20D7',
321 '\u20DB',
322 '\u20DC',
323 '\u20E1',
324 '\u20E7',
325 '\u20E9',
326 '\u20F0',
327 '\u2CEF',
328 '\u2CF0',
329 '\u2CF1',
330 '\u2DE0',
331 '\u2DE1',
332 '\u2DE2',
333 '\u2DE3',
334 '\u2DE4',
335 '\u2DE5',
336 '\u2DE6',
337 '\u2DE7',
338 '\u2DE8',
339 '\u2DE9',
340 '\u2DEA',
341 '\u2DEB',
342 '\u2DEC',
343 '\u2DED',
344 '\u2DEE',
345 '\u2DEF',
346 '\u2DF0',
347 '\u2DF1',
348 '\u2DF2',
349 '\u2DF3',
350 '\u2DF4',
351 '\u2DF5',
352 '\u2DF6',
353 '\u2DF7',
354 '\u2DF8',
355 '\u2DF9',
356 '\u2DFA',
357 '\u2DFB',
358 '\u2DFC',
359 '\u2DFD',
360 '\u2DFE',
361 '\u2DFF',
362 '\uA66F',
363 '\uA67C',
364 '\uA67D',
365 '\uA6F0',
366 '\uA6F1',
367 '\uA8E0',
368 '\uA8E1',
369 '\uA8E2',
370 '\uA8E3',
371 '\uA8E4',
372 '\uA8E5',
373 '\uA8E6',
374 '\uA8E7',
375 '\uA8E8',
376 '\uA8E9',
377 '\uA8EA',
378 '\uA8EB',
379 '\uA8EC',
380 '\uA8ED',
381 '\uA8EE',
382 '\uA8EF',
383 '\uA8F0',
384 '\uA8F1',
385 '\uAAB0',
386 '\uAAB2',
387 '\uAAB3',
388 '\uAAB7',
389 '\uAAB8',
390 '\uAABE',
391 '\uAABF',
392 '\uAAC1',
393 '\uFE20',
394 '\uFE21',
395 '\uFE22',
396 '\uFE23',
397 '\uFE24',
398 '\uFE25',
399 '\uFE26',
400 '\U00010A0F',
401 '\U00010A38',
402 '\U0001D185',
403 '\U0001D186',
404 '\U0001D187',
405 '\U0001D188',
406 '\U0001D189',
407 '\U0001D1AA',
408 '\U0001D1AB',
409 '\U0001D1AC',
410 '\U0001D1AD',
411 '\U0001D242',
412 '\U0001D243',
413 '\U0001D244',
414}