aboutsummaryrefslogtreecommitdiff
path: root/vterm-module.c
diff options
context:
space:
mode:
authorLukas Fürmetz <fuermetz@mailbox.org>2019-01-22 22:46:41 +0100
committerGitHub <noreply@github.com>2019-01-22 22:46:41 +0100
commit777d215db8d94746fe555ec2f8e794e78fb504dc (patch)
tree0bde6172bf1340b2ef2032b9a35d0e8c66b21efb /vterm-module.c
parentc339f7f8234f55096981411e215423538b9c11a8 (diff)
parent5a983333ada75a1422108919301eec7ef5a0f7aa (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.c19
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);