summaryrefslogtreecommitdiff
path: root/src/dged
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-06-23 22:30:37 +0200
committerAlbert Cervin <albert@acervin.com>2024-06-23 22:44:05 +0200
commite0901a1efb05727111eb88d1b27b7d1a23a87365 (patch)
treeaac294067c611770a5baa2b2e388c0163174af8f /src/dged
parent67271d056409ce3727c282968a7186088bf19a28 (diff)
downloaddged-e0901a1efb05727111eb88d1b27b7d1a23a87365.tar.gz
dged-e0901a1efb05727111eb88d1b27b7d1a23a87365.tar.xz
dged-e0901a1efb05727111eb88d1b27b7d1a23a87365.zip
Fix buffer list switch and search/replace
Fix the buffer list return key action when buffers have the same name. Previously, it would pick the first it could find in the buffer list with the correct buffer name instead of the selected one. Now it uses text properties to pass the actual buffer pointer along instead. This however exposed a problem with the clearing of properties and where in the frame it happens. Search and replace highlighting assumed that they could color things in their respective command executions. However, ideally coloring should happen in update functions so now both search and replace implement the coloring in update hooks for the buffer they are operating on. For replace, this was already kinda how it worked and could be adapted with minimal effort. Search on the other hand needed a bit more rework.
Diffstat (limited to 'src/dged')
-rw-r--r--src/dged/buffer.c6
-rw-r--r--src/dged/buffer_view.c4
-rw-r--r--src/dged/text.h2
3 files changed, 7 insertions, 5 deletions
diff --git a/src/dged/buffer.c b/src/dged/buffer.c
index 9eab505..0fac694 100644
--- a/src/dged/buffer.c
+++ b/src/dged/buffer.c
@@ -61,7 +61,9 @@ static struct kill_ring {
uint64_t found_at = -1; \
VEC_FOR_EACH_INDEXED(hooks, struct name##_hook *h, idx) { \
if (h->id == id) { \
- callback(h->userdata); \
+ if (callback != NULL) { \
+ callback(h->userdata); \
+ } \
found_at = idx; \
break; \
} \
@@ -1073,6 +1075,8 @@ static void apply_properties(struct command_list *cmds,
}
break;
}
+ case TextProperty_Data:
+ break;
}
}
}
diff --git a/src/dged/buffer_view.c b/src/dged/buffer_view.c
index 2d0b6b8..4e67d78 100644
--- a/src/dged/buffer_view.c
+++ b/src/dged/buffer_view.c
@@ -479,8 +479,4 @@ void buffer_view_update(struct buffer_view *view,
// draw buffer commands nested inside this command list
command_list_draw_command_list(params->commands, buf_cmds);
timer_stop(render_buffer_timer);
-
- // TODO: move to somewhere where more correct if buffers
- // are in more than one view (same with buffer hooks).
- buffer_clear_text_properties(view->buffer);
}
diff --git a/src/dged/text.h b/src/dged/text.h
index 922014e..8b49ef4 100644
--- a/src/dged/text.h
+++ b/src/dged/text.h
@@ -59,6 +59,7 @@ bool text_line_contains_unicode(struct text *text, uint32_t line);
enum text_property_type {
TextProperty_Colors,
+ TextProperty_Data,
};
struct text_property_colors {
@@ -72,6 +73,7 @@ struct text_property {
enum text_property_type type;
union {
struct text_property_colors colors;
+ void *userdata;
};
};