From 74b8e5cb2d1c6798c42e56ae444e5e96c629f2c5 Mon Sep 17 00:00:00 2001 From: jixiufeng Date: Fri, 17 May 2019 23:13:16 +0800 Subject: trying support blink-cursor-mode --- elisp.c | 1 - vterm-module.c | 9 +++++++-- vterm-module.h | 1 + 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; -- cgit v1.0