diff options
| -rw-r--r-- | src/dged/buffer.c | 2 | ||||
| -rw-r--r-- | src/main/lsp.c | 7 | ||||
| -rw-r--r-- | src/main/main.c | 3 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/dged/buffer.c b/src/dged/buffer.c index 7eb787d..3259534 100644 --- a/src/dged/buffer.c +++ b/src/dged/buffer.c @@ -1395,10 +1395,12 @@ void buffer_get_text_properties_filtered(struct buffer *buffer, } void buffer_clear_text_properties(struct buffer *buffer) { + buffer->needs_render = true; text_clear_properties(buffer->text); } void buffer_clear_text_property_layer(struct buffer *buffer, layer_id layer) { + buffer->needs_render = true; text_clear_property_layer(buffer->text, layer); } diff --git a/src/main/lsp.c b/src/main/lsp.c index ab9ba39..de7f553 100644 --- a/src/main/lsp.c +++ b/src/main/lsp.c @@ -50,6 +50,7 @@ struct lsp_server { enum position_encoding_kind position_encoding; struct lsp_diagnostics *diagnostics; + layer_id diagnostics_layer_id; struct completion_ctx *completion_ctx; }; @@ -192,6 +193,8 @@ request_response_received(struct lsp_server *server, uint64_t id, static void buffer_updated(struct buffer *buffer, void *userdata) { struct lsp_server *server = (struct lsp_server *)userdata; + buffer_clear_text_property_layer(buffer, server->diagnostics_layer_id); + diagnostic_vec *diagnostics = diagnostics_for_buffer(server->diagnostics, buffer); if (diagnostics == NULL) { @@ -213,7 +216,8 @@ static void buffer_updated(struct buffer *buffer, void *userdata) { struct region reg = region_new( diag->region.begin, buffer_previous_char(buffer, diag->region.end)); - buffer_add_text_property(buffer, reg.begin, reg.end, prop); + buffer_add_text_property_to_layer(buffer, reg.begin, reg.end, prop, + server->diagnostics_layer_id); if (window_buffer(windows_get_active()) == buffer) { struct buffer_view *bv = window_buffer_view(windows_get_active()); @@ -589,6 +593,7 @@ static void create_lsp_client(struct buffer *buffer, void *userdata) { } new->value.diagnostics = diagnostics_create(); + new->value.diagnostics_layer_id = buffer_add_text_property_layer(buffer); // support for this is determined later new->value.completion_ctx = NULL; diff --git a/src/main/main.c b/src/main/main.c index 57c2454..a10a461 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -431,7 +431,8 @@ int main(int argc, char *argv[]) { * reason. This is also the reason that there is no timed scope around * this, it simply makes no sense. */ - reactor_update(reactor, needs_render ? (time_to_render_ns / 1e6) : -1); + reactor_update(reactor, + needs_render ? ((time_to_render_ns + 1e6 - 1) / 1e6) : -1); } struct timer *update_keyboard = timer_start("update-keyboard"); |
