Mercurial > vim
view src/proto/ex_eval.pro @ 34686:83875247fbc0 v9.1.0224
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Commit: https://github.com/vim/vim/commit/515f734e687f28f7199b2a8042197624d9f3ec15
Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Date: Thu Mar 28 12:01:14 2024 +0100
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Problem: If a line has "right" & "below" virtual text properties,
where the "below" property may be stored first due to lack of
ordering between them, then the line height is calculated to
be 1 more and causes the cursor to far over the line.
Solution: Remove some unnecessary setting of a
`next_right_goes_below = TRUE` flag for "below" and "above"
text properties. (Dylan Thacker-Smith)
I modified a regression test I recently added to cover this case,
leveraging the fact that "after", "right" & "below" text properties are
being stored in the reverse of the order they are added in. The
previous version of this regression test was crafted to workaround this
issue so it can be addressed by this separate patch.
closes: #14317
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 28 Mar 2024 12:15:03 +0100 |
parents | 31fb1a760ad6 |
children |
line wrap: on
line source
/* ex_eval.c */ int aborting(void); void update_force_abort(void); int should_abort(int retcode); int aborted_in_try(void); int cause_errthrow(char_u *mesg, int severe, int *ignore); void free_global_msglist(void); void do_errthrow(cstack_T *cstack, char_u *cmdname); int do_intthrow(cstack_T *cstack); char *get_exception_string(void *value, except_type_T type, char_u *cmdname, int *should_free); int throw_exception(void *value, except_type_T type, char_u *cmdname); void discard_current_exception(void); void catch_exception(except_T *excp); void exception_state_save(exception_state_T *estate); void exception_state_restore(exception_state_T *estate); void exception_state_clear(void); void report_make_pending(int pending, void *value); int cmd_is_name_only(char_u *arg); void ex_eval(exarg_T *eap); void ex_if(exarg_T *eap); void ex_endif(exarg_T *eap); void ex_else(exarg_T *eap); void ex_while(exarg_T *eap); void ex_continue(exarg_T *eap); void ex_break(exarg_T *eap); void ex_endwhile(exarg_T *eap); void ex_block(exarg_T *eap); void ex_endblock(exarg_T *eap); int inside_block(exarg_T *eap); void ex_throw(exarg_T *eap); void do_throw(cstack_T *cstack); void ex_try(exarg_T *eap); void ex_catch(exarg_T *eap); void ex_finally(exarg_T *eap); void ex_endtry(exarg_T *eap); void enter_cleanup(cleanup_T *csp); void leave_cleanup(cleanup_T *csp); int cleanup_conditionals(cstack_T *cstack, int searched_cond, int inclusive); void rewind_conditionals(cstack_T *cstack, int idx, int cond_type, int *cond_level); void ex_endfunction(exarg_T *eap); int has_loop_cmd(char_u *p); /* vim: set ft=c : */