aboutsummaryrefslogtreecommitdiff
path: root/vterm-module.c
diff options
context:
space:
mode:
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);