To: vim_dev@googlegroups.com Subject: Patch 8.1.0061 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.0061 Problem: Window title is wrong after resetting and setting 'title'. Solution: Move resetting the title into maketitle(). (Jason Franklin) Files: src/option.c, src/buffer.c *** ../vim-8.1.0060/src/option.c 2018-06-12 16:49:26.366028607 +0200 --- src/option.c 2018-06-16 22:36:07.814142229 +0200 *************** *** 3256,3264 **** #ifdef FEAT_CMDWIN static char_u *check_cedit(void); #endif - #ifdef FEAT_TITLE - static void did_set_title(int icon); - #endif static char_u *option_expand(int opt_idx, char_u *val); static void didset_options(void); static void didset_options2(void); --- 3256,3261 ---- *************** *** 5374,5400 **** * the old value back. */ static void ! did_set_title( ! int icon) /* Did set icon instead of title */ { if (starting != NO_SCREEN #ifdef FEAT_GUI && !gui.starting #endif ) - { maketitle(); - if (icon) - { - if (!p_icon) - mch_restore_title(2); - } - else - { - if (!p_title) - mch_restore_title(1); - } - } } #endif --- 5371,5384 ---- * the old value back. */ static void ! did_set_title(void) { if (starting != NO_SCREEN #ifdef FEAT_GUI && !gui.starting #endif ) maketitle(); } #endif *************** *** 6949,6956 **** else stl_syntax &= ~flagval; # endif ! did_set_title(varp == &p_iconstring); ! } #endif --- 6933,6939 ---- else stl_syntax &= ~flagval; # endif ! did_set_title(); } #endif *************** *** 8401,8414 **** #ifdef FEAT_TITLE /* when 'title' changed, may need to change the title; same for 'icon' */ ! else if ((int *)varp == &p_title) ! { ! did_set_title(FALSE); ! } ! ! else if ((int *)varp == &p_icon) { ! did_set_title(TRUE); } #endif --- 8384,8392 ---- #ifdef FEAT_TITLE /* when 'title' changed, may need to change the title; same for 'icon' */ ! else if ((int *)varp == &p_title || (int *)varp == &p_icon) { ! did_set_title(); } #endif *** ../vim-8.1.0060/src/buffer.c 2018-06-06 18:02:31.402773772 +0200 --- src/buffer.c 2018-06-16 22:57:08.067368623 +0200 *************** *** 38,44 **** static int otherfile_buf(buf_T *buf, char_u *ffname); #endif #ifdef FEAT_TITLE ! static int ti_change(char_u *str, char_u **last); #endif static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file); static void free_buffer(buf_T *); --- 38,44 ---- static int otherfile_buf(buf_T *buf, char_u *ffname); #endif #ifdef FEAT_TITLE ! static int value_changed(char_u *str, char_u **last); #endif static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file); static void free_buffer(buf_T *); *************** *** 3545,3564 **** } #if defined(FEAT_TITLE) || defined(PROTO) - /* - * put file name in title bar of window and in icon title - */ - static char_u *lasttitle = NULL; static char_u *lasticon = NULL; void maketitle(void) { char_u *p; ! char_u *t_str = NULL; ! char_u *i_name; ! char_u *i_str = NULL; int maxlen = 0; int len; int mustset; --- 3545,3562 ---- } #if defined(FEAT_TITLE) || defined(PROTO) static char_u *lasttitle = NULL; static char_u *lasticon = NULL; + /* + * Put the file name in the title bar and icon of the window. + */ void maketitle(void) { char_u *p; ! char_u *title_str = NULL; ! char_u *icon_str = NULL; int maxlen = 0; int len; int mustset; *************** *** 3574,3580 **** need_maketitle = FALSE; if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL) ! return; if (p_title) { --- 3572,3578 ---- need_maketitle = FALSE; if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL) ! return; // nothing to do if (p_title) { *************** *** 3585,3591 **** maxlen = 10; } ! t_str = buf; if (*p_titlestring != NUL) { #ifdef FEAT_STL_OPT --- 3583,3589 ---- maxlen = 10; } ! title_str = buf; if (*p_titlestring != NUL) { #ifdef FEAT_STL_OPT *************** *** 3598,3604 **** use_sandbox = was_set_insecurely((char_u *)"titlestring", 0); # endif called_emsg = FALSE; ! build_stl_str_hl(curwin, t_str, sizeof(buf), p_titlestring, use_sandbox, 0, maxlen, NULL, NULL); if (called_emsg) --- 3596,3602 ---- use_sandbox = was_set_insecurely((char_u *)"titlestring", 0); # endif called_emsg = FALSE; ! build_stl_str_hl(curwin, title_str, sizeof(buf), p_titlestring, use_sandbox, 0, maxlen, NULL, NULL); if (called_emsg) *************** *** 3608,3614 **** } else #endif ! t_str = p_titlestring; } else { --- 3606,3612 ---- } else #endif ! title_str = p_titlestring; } else { *************** *** 3714,3724 **** } } } ! mustset = ti_change(t_str, &lasttitle); if (p_icon) { ! i_str = buf; if (*p_iconstring != NUL) { #ifdef FEAT_STL_OPT --- 3712,3722 ---- } } } ! mustset = value_changed(title_str, &lasttitle); if (p_icon) { ! icon_str = buf; if (*p_iconstring != NUL) { #ifdef FEAT_STL_OPT *************** *** 3731,3737 **** use_sandbox = was_set_insecurely((char_u *)"iconstring", 0); # endif called_emsg = FALSE; ! build_stl_str_hl(curwin, i_str, sizeof(buf), p_iconstring, use_sandbox, 0, 0, NULL, NULL); if (called_emsg) --- 3729,3735 ---- use_sandbox = was_set_insecurely((char_u *)"iconstring", 0); # endif called_emsg = FALSE; ! build_stl_str_hl(curwin, icon_str, sizeof(buf), p_iconstring, use_sandbox, 0, 0, NULL, NULL); if (called_emsg) *************** *** 3741,3772 **** } else #endif ! i_str = p_iconstring; } else { if (buf_spname(curbuf) != NULL) ! i_name = buf_spname(curbuf); else /* use file name only in icon */ ! i_name = gettail(curbuf->b_ffname); ! *i_str = NUL; /* Truncate name at 100 bytes. */ ! len = (int)STRLEN(i_name); if (len > 100) { len -= 100; #ifdef FEAT_MBYTE if (has_mbyte) ! len += (*mb_tail_off)(i_name, i_name + len) + 1; #endif ! i_name += len; } ! STRCPY(i_str, i_name); ! trans_characters(i_str, IOSIZE); } } ! mustset |= ti_change(i_str, &lasticon); if (mustset) resettitle(); --- 3739,3770 ---- } else #endif ! icon_str = p_iconstring; } else { if (buf_spname(curbuf) != NULL) ! p = buf_spname(curbuf); else /* use file name only in icon */ ! p = gettail(curbuf->b_ffname); ! *icon_str = NUL; /* Truncate name at 100 bytes. */ ! len = (int)STRLEN(p); if (len > 100) { len -= 100; #ifdef FEAT_MBYTE if (has_mbyte) ! len += (*mb_tail_off)(p, p + len) + 1; #endif ! p += len; } ! STRCPY(icon_str, p); ! trans_characters(icon_str, IOSIZE); } } ! mustset |= value_changed(icon_str, &lasticon); if (mustset) resettitle(); *************** *** 3775,3794 **** /* * Used for title and icon: Check if "str" differs from "*last". Set "*last" * from "str" if it does. ! * Return TRUE when "*last" changed. */ static int ! ti_change(char_u *str, char_u **last) { if ((str == NULL) != (*last == NULL) || (str != NULL && *last != NULL && STRCMP(str, *last) != 0)) { vim_free(*last); if (str == NULL) *last = NULL; else *last = vim_strsave(str); ! return TRUE; } return FALSE; } --- 3773,3797 ---- /* * Used for title and icon: Check if "str" differs from "*last". Set "*last" * from "str" if it does. ! * Return TRUE if resettitle() is to be called. */ static int ! value_changed(char_u *str, char_u **last) { if ((str == NULL) != (*last == NULL) || (str != NULL && *last != NULL && STRCMP(str, *last) != 0)) { vim_free(*last); if (str == NULL) + { *last = NULL; + mch_restore_title(last == &lasttitle ? 1 : 2); + } else + { *last = vim_strsave(str); ! return TRUE; ! } } return FALSE; } *** ../vim-8.1.0060/src/version.c 2018-06-16 22:16:43.232576946 +0200 --- src/version.c 2018-06-16 22:48:20.082215622 +0200 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 61, /**/ -- "I don’t know how to make a screenshot" - Richard Stallman, July 2002 (when asked to send a screenshot of his desktop for unix.se) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///