Skip to content

Commit e82a6de

Browse files
committed
Fix deletion with image numbers
1 parent 2fd6bf7 commit e82a6de

File tree

4 files changed

+37
-18
lines changed

4 files changed

+37
-18
lines changed

gen-apc-parsers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ def graphics_parser() -> None:
251251
flag = frozenset
252252
keymap: KeymapType = {
253253
'a': ('action', flag('tTqpd')),
254-
'd': ('delete_action', flag('aAiIcCpPqQxXyYzZ')),
254+
'd': ('delete_action', flag('aAiIcCnNpPqQxXyYzZ')),
255255
't': ('transmission_type', flag('dfts')),
256256
'o': ('compressed', flag('z')),
257257
'f': ('format', 'uint'),

kitty/graphics.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -805,14 +805,14 @@ grman_clear(GraphicsManager *self, bool all, CellPixelSize cell) {
805805
static inline bool
806806
id_filter_func(const ImageRef *ref, Image *img, const void *data, CellPixelSize cell UNUSED) {
807807
const GraphicsCommand *g = data;
808-
if (img->client_id == g->id) return !g->placement_id || ref->client_id == g->placement_id;
808+
if (g->id && img->client_id == g->id) return !g->placement_id || ref->client_id == g->placement_id;
809809
return false;
810810
}
811811

812812
static inline bool
813813
number_filter_func(const ImageRef *ref, Image *img, const void *data, CellPixelSize cell UNUSED) {
814814
const GraphicsCommand *g = data;
815-
if (img->client_number == g->image_number) return !g->placement_id || ref->client_id == g->placement_id;
815+
if (g->image_number && img->client_number == g->image_number) return !g->placement_id || ref->client_id == g->placement_id;
816816
return false;
817817
}
818818

@@ -849,7 +849,7 @@ point3d_filter_func(const ImageRef *ref, Image *img, const void *data, CellPixel
849849

850850
static void
851851
handle_delete_command(GraphicsManager *self, const GraphicsCommand *g, Cursor *c, bool *is_dirty, CellPixelSize cell) {
852-
static GraphicsCommand d;
852+
GraphicsCommand d;
853853
bool only_first_image = false;
854854
switch (g->delete_action) {
855855
#define I(u, data, func) filter_refs(self, data, g->delete_action == u, func, cell, only_first_image); *is_dirty = true; break
@@ -870,7 +870,7 @@ handle_delete_command(GraphicsManager *self, const GraphicsCommand *g, Cursor *c
870870
case 'n':
871871
case 'N':
872872
only_first_image = true;
873-
I('N', &g, number_filter_func);
873+
I('N', g, number_filter_func);
874874
default:
875875
REPORT_ERROR("Unknown graphics command delete action: %c", g->delete_action);
876876
break;

kitty/parse-graphics-command.h

Lines changed: 13 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kitty_tests/graphics.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def test_load_png_simple(self):
231231
# test error handling for loading bad png data
232232
self.assertRaisesRegex(ValueError, '[EBADPNG]', load_png_data, b'dsfsdfsfsfd')
233233

234-
def test_load_with_numbers(self):
234+
def test_gr_operations_with_numbers(self):
235235
s = self.create_screen()
236236
g = s.grman
237237

@@ -280,6 +280,24 @@ def put(**kw):
280280
code, idstr = put(c=2, r=2, I=94)
281281
self.ae(code, 'ENOENT')
282282

283+
# test delete with number
284+
def delete(ac='N', **kw):
285+
cmd = 'a=d'
286+
if ac:
287+
cmd += ',d={}'.format(ac)
288+
if kw:
289+
cmd += ',' + ','.join('{}={}'.format(k, v) for k, v in kw.items())
290+
send_command(s, cmd)
291+
292+
count = s.grman.image_count
293+
put(i=1), put(i=2), put(i=3), put(i=4), put(i=5)
294+
delete(I=94)
295+
self.ae(s.grman.image_count, count)
296+
delete(I=93)
297+
self.ae(s.grman.image_count, count - 1)
298+
delete(I=1)
299+
self.ae(s.grman.image_count, count - 2)
300+
283301
def test_image_put(self):
284302
cw, ch = 10, 20
285303
s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch)

0 commit comments

Comments
 (0)