diff options
| author | Lukas Fürmetz <fuermetz@mailbox.org> | 2019-07-18 13:47:28 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-18 13:47:28 +0200 |
| commit | 316f218368d30e6da1564ca9a8bfe565ca48e64b (patch) | |
| tree | 7802718dc21e72f1b15af8edaa81b8a0951895d9 | |
| parent | 2422c3858b6a41c07c12d3c9482dd0d6bb821f84 (diff) | |
| parent | 46233c00713c95ae5647179f8d98426bfa24a736 (diff) | |
Merge pull request #100 from jixiuf/auto-scroll
the buffer can auto scroll even the vterm window is not activated.
| -rw-r--r-- | elisp.c | 6 | ||||
| -rw-r--r-- | elisp.h | 5 | ||||
| -rw-r--r-- | vterm-module.c | 7 |
3 files changed, 18 insertions, 0 deletions
@@ -77,6 +77,12 @@ 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}); } +emacs_value point(emacs_env *env) { return env->funcall(env, Fpoint, 0, NULL); } + +void set_window_point(emacs_env *env, emacs_value win, emacs_value point) { + env->funcall(env, Fset_window_point, 2, (emacs_value[]){win, point}); +} + 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); @@ -37,6 +37,9 @@ emacs_value Fgoto_line; emacs_value Fdelete_lines; emacs_value Fbuffer_line_number; emacs_value Frecenter; +emacs_value Fset_window_point; +emacs_value Fpoint; + emacs_value Fput_text_property; emacs_value Fset; emacs_value Fvterm_face_color_hex; @@ -69,6 +72,8 @@ 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); +void set_window_point(emacs_env *env, emacs_value win, emacs_value point); +emacs_value point(emacs_env *env); 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); diff --git a/vterm-module.c b/vterm-module.c index e971884..92fa4ef 100644 --- a/vterm-module.c +++ b/vterm-module.c @@ -310,6 +310,10 @@ static void adjust_topline(Term *term, emacs_env *env, long added) { } else { recenter(env, env->make_integer(env, pos.row)); } + }else{ + if (env->is_not_nil(env, window)) { + set_window_point(env, window, point(env)); + } } } @@ -763,6 +767,9 @@ int emacs_module_init(struct emacs_runtime *ert) { Fdelete_lines = env->make_global_ref(env, env->intern(env, "vterm--delete-lines")); Frecenter = env->make_global_ref(env, env->intern(env, "recenter")); + Fset_window_point = + env->make_global_ref(env, env->intern(env, "set-window-point")); + Fpoint = env->make_global_ref(env, env->intern(env, "point")); Fforward_char = env->make_global_ref(env, env->intern(env, "forward-char")); Fblink_cursor_mode = env->make_global_ref(env, env->intern(env, "blink-cursor-mode")); |
