To: vim_dev@googlegroups.com Subject: Patch 9.0.0235 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0235 Problem: 'autoshelldir' does not work with chunked respose. Solution: Collect chunks before parsing OSC 7. (closes #10949) Files: src/terminal.c *** ../vim-9.0.0234/src/terminal.c 2022-08-14 14:16:08.003582142 +0100 --- src/terminal.c 2022-08-21 11:35:39.348777437 +0100 *************** *** 4477,4504 **** * "file://HOSTNAME/CURRENT/DIR" */ static void ! sync_shell_dir(VTermStringFragment *frag) { ! int offset = 7; // len of "file://" is 7 ! char *pos = (char *)frag->str + offset; char_u *new_dir; // remove HOSTNAME to get PWD ! while (*pos != '/' && offset < (int)frag->len) { ! offset += 1; ! pos += 1; } ! if (offset >= (int)frag->len) { semsg(_(e_failed_to_extract_pwd_from_str_check_your_shell_config), ! frag->str); return; } ! new_dir = alloc(frag->len - offset + 1); ! url_decode(pos, frag->len-offset, new_dir); changedir_func(new_dir, TRUE, CDSCOPE_WINDOW); vim_free(new_dir); } --- 4477,4504 ---- * "file://HOSTNAME/CURRENT/DIR" */ static void ! sync_shell_dir(garray_T *gap) { ! int offset = 7; // len of "file://" is 7 ! char *pos = (char *)gap->ga_data + offset; char_u *new_dir; // remove HOSTNAME to get PWD ! while (offset < (int)gap->ga_len && *pos != '/' ) { ! ++offset; ! ++pos; } ! if (offset >= (int)gap->ga_len) { semsg(_(e_failed_to_extract_pwd_from_str_check_your_shell_config), ! gap->ga_data); return; } ! new_dir = alloc(gap->ga_len - offset + 1); ! url_decode(pos, gap->ga_len-offset, new_dir); changedir_func(new_dir, TRUE, CDSCOPE_WINDOW); vim_free(new_dir); } *************** *** 4518,4530 **** garray_T *gap = &term->tl_osc_buf; // We recognize only OSC 5 1 ; {command} and OSC 7 ; {command} ! if (p_asd && command == 7) ! { ! sync_shell_dir(&frag); ! return 1; ! } ! ! if (command != 51) return 0; // Concatenate what was received until the final piece is found. --- 4518,4524 ---- garray_T *gap = &term->tl_osc_buf; // We recognize only OSC 5 1 ; {command} and OSC 7 ; {command} ! if (command != 51 && (command != 7 || !p_asd)) return 0; // Concatenate what was received until the final piece is found. *************** *** 4539,4544 **** --- 4533,4546 ---- return 1; ((char *)gap->ga_data)[gap->ga_len] = 0; + + if (command == 7) + { + sync_shell_dir(gap); + ga_clear(gap); + return 1; + } + reader.js_buf = gap->ga_data; reader.js_fill = NULL; reader.js_used = 0; *** ../vim-9.0.0234/src/version.c 2022-08-21 10:40:02.451903998 +0100 --- src/version.c 2022-08-21 11:36:58.376897508 +0100 *************** *** 733,734 **** --- 733,736 ---- { /* Add new patch number below this line */ + /**/ + 235, /**/ -- Time flies like an arrow. Fruit flies like a banana. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///