diff options
| author | Lukas Fürmetz <fuermetz@mailbox.org> | 2019-01-22 22:46:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-22 22:46:41 +0100 |
| commit | 777d215db8d94746fe555ec2f8e794e78fb504dc (patch) | |
| tree | 0bde6172bf1340b2ef2032b9a35d0e8c66b21efb /vterm-module.c | |
| parent | c339f7f8234f55096981411e215423538b9c11a8 (diff) | |
| parent | 5a983333ada75a1422108919301eec7ef5a0f7aa (diff) | |
Merge pull request #39 from jixiuf/performance-improve
Improves performance when receiving large bursts of data.
Diffstat (limited to 'vterm-module.c')
| -rw-r--r-- | vterm-module.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/vterm-module.c b/vterm-module.c index e1bbf6d..5f5196f 100644 --- a/vterm-module.c +++ b/vterm-module.c @@ -665,12 +665,19 @@ static emacs_value Fvterm_update(emacs_env *env, ptrdiff_t nargs, // Flush output term_flush_output(term, env); - - term_redraw(term, env); + if (term->is_invalidated) { + vterm_invalidate(env); + } return env->make_integer(env, 0); } +static emacs_value Fvterm_redraw(emacs_env *env, ptrdiff_t nargs, + emacs_value args[], void *data) { + Term *term = env->get_user_ptr(env, args[0]); + term_redraw(term, env); + return env->make_integer(env, 0); +} static emacs_value Fvterm_write_input(emacs_env *env, ptrdiff_t nargs, emacs_value args[], void *data) { Term *term = env->get_user_ptr(env, args[0]); @@ -749,6 +756,9 @@ int emacs_module_init(struct emacs_runtime *ert) { Fvterm_set_title = env->make_global_ref(env, env->intern(env, "vterm--set-title")); + Fvterm_invalidate = + env->make_global_ref(env, env->intern(env, "vterm--invalidate")); + // Faces Qterm = env->make_global_ref(env, env->intern(env, "vterm")); Qterm_color_black = @@ -778,6 +788,11 @@ int emacs_module_init(struct emacs_runtime *ert) { "Process io and update the screen.", NULL); bind_function(env, "vterm--update", fun); + + fun = + env->make_function(env, 1, 1, Fvterm_redraw, "Redraw the screen.", NULL); + bind_function(env, "vterm--redraw", fun); + fun = env->make_function(env, 2, 2, Fvterm_write_input, "Write input to vterm.", NULL); bind_function(env, "vterm--write-input", fun); |
