From f83dff133aacaa2778a2875ebb1906aabb344ae7 Mon Sep 17 00:00:00 2001 From: jixiufeng Date: Mon, 29 Apr 2019 11:23:49 +0800 Subject: fix recenter for emacs27 --- elisp.c | 4 ++++ elisp.h | 2 ++ vterm-module.c | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/elisp.c b/elisp.c index cf4b095..7cf0eef 100644 --- a/elisp.c +++ b/elisp.c @@ -77,6 +77,10 @@ void delete_lines(emacs_env *env, int linenum, int count, bool del_whole_line) { void recenter(emacs_env *env, emacs_value pos) { env->funcall(env, Frecenter, 1, (emacs_value[]){pos}); } +bool eq(emacs_env *env, emacs_value e1, emacs_value e2) { + emacs_value Qeq = env->funcall(env, Feq, 2, (emacs_value[]){e1, e2}); + return env->is_not_nil(env, Qeq); +} void forward_char(emacs_env *env, emacs_value n) { env->funcall(env, Fforward_char, 1, (emacs_value[]){n}); diff --git a/elisp.h b/elisp.h index 73ba7e8..c8074c5 100644 --- a/elisp.h +++ b/elisp.h @@ -43,6 +43,7 @@ emacs_value Fget_buffer_window; emacs_value Fselected_window; emacs_value Fvterm_set_title; emacs_value Fvterm_invalidate; +emacs_value Feq; // Utils void bind_function(emacs_env *env, const char *name, emacs_value Sfun); @@ -65,6 +66,7 @@ emacs_value get_hex_color_fg(emacs_env *env, emacs_value face); emacs_value get_hex_color_bg(emacs_env *env, emacs_value face); emacs_value buffer_line_number(emacs_env *env); void recenter(emacs_env *env, emacs_value pos); +bool eq(emacs_env *env, emacs_value e1, emacs_value e2); void forward_char(emacs_env *env, emacs_value n); emacs_value get_buffer_window(emacs_env *env); emacs_value selected_window(emacs_env *env); diff --git a/vterm-module.c b/vterm-module.c index 63bf8c0..f4ee2b5 100644 --- a/vterm-module.c +++ b/vterm-module.c @@ -302,7 +302,7 @@ static void adjust_topline(Term *term, emacs_env *env, long added) { emacs_value window = get_buffer_window(env); emacs_value swindow = selected_window(env); - if (swindow == window) { + if (eq(env, window, swindow)) { if (following) { // "Follow" the terminal output recenter(env, env->make_integer( @@ -733,6 +733,7 @@ int emacs_module_init(struct emacs_runtime *ert) { env->make_global_ref(env, env->intern(env, "vterm--set-title")); Fvterm_invalidate = env->make_global_ref(env, env->intern(env, "vterm--invalidate")); + Feq = env->make_global_ref(env, env->intern(env, "eq")); // Exported functions emacs_value fun; -- cgit v1.0