aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elisp.c1
-rw-r--r--vterm-module.c9
-rw-r--r--vterm-module.h1
3 files changed, 8 insertions, 3 deletions
diff --git a/elisp.c b/elisp.c
index 7cf0eef..edfe22b 100644
--- a/elisp.c
+++ b/elisp.c
@@ -104,7 +104,6 @@ void toggle_cursor(emacs_env *env, bool visible) {
}
void toggle_cursor_blinking(emacs_env *env, bool blinking) {
- blinking = false;
emacs_value Qfalse = env->make_integer(env, -1);
emacs_value Qblinking = blinking ? Qt : Qfalse;
env->funcall(env, Fblink_cursor_mode, 1, (emacs_value[]){Qblinking});
diff --git a/vterm-module.c b/vterm-module.c
index f4ee2b5..61de618 100644
--- a/vterm-module.c
+++ b/vterm-module.c
@@ -345,7 +345,11 @@ static int term_movecursor(VTermPos new, VTermPos old, int visible,
static void term_redraw(Term *term, emacs_env *env) {
if (term->is_invalidated) {
- toggle_cursor_blinking(env, term->cursor.blinking);
+ if (term->cursor.blinking_changed) {
+ toggle_cursor_blinking(env, term->cursor.blinking);
+ term->cursor.blinking_changed = false;
+ }
+
toggle_cursor(env, term->cursor.visible);
long bufline_before = env->extract_integer(env, buffer_line_number(env));
refresh_scrollback(term, env);
@@ -412,6 +416,7 @@ static int term_settermprop(VTermProp prop, VTermValue *val, void *user_data) {
break;
case VTERM_PROP_CURSORBLINK:
term->cursor.blinking = val->boolean;
+ term->cursor.blinking_changed = true;
break;
case VTERM_PROP_ALTSCREEN:
invalidate_terminal(term, 0, term->height);
@@ -607,7 +612,7 @@ static emacs_value Fvterm_new(emacs_env *env, ptrdiff_t nargs,
term->height = rows;
term->cursor.visible = true;
- term->cursor.blinking = false;
+ term->cursor.blinking = env->is_not_nil(env, Fblink_cursor_mode);
term->title = NULL;
term->is_title_changed = false;
diff --git a/vterm-module.h b/vterm-module.h
index 86ad81d..d3d0a08 100644
--- a/vterm-module.h
+++ b/vterm-module.h
@@ -26,6 +26,7 @@ typedef struct ScrollbackLine {
typedef struct Cursor {
int row, col;
bool blinking;
+ bool blinking_changed;
bool visible;
} Cursor;