summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/terminal.c36
-rw-r--r--src/version.c2
2 files changed, 21 insertions, 17 deletions
diff --git a/src/terminal.c b/src/terminal.c
index a95187005..c0fa1254e 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -4477,28 +4477,28 @@ url_decode(const char *src, const size_t len, char_u *dst)
* "file://HOSTNAME/CURRENT/DIR"
*/
static void
-sync_shell_dir(VTermStringFragment *frag)
+sync_shell_dir(garray_T *gap)
{
- int offset = 7; // len of "file://" is 7
- char *pos = (char *)frag->str + offset;
+ 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 (*pos != '/' && offset < (int)frag->len)
+ while (offset < (int)gap->ga_len && *pos != '/' )
{
- offset += 1;
- pos += 1;
+ ++offset;
+ ++pos;
}
- if (offset >= (int)frag->len)
+ if (offset >= (int)gap->ga_len)
{
semsg(_(e_failed_to_extract_pwd_from_str_check_your_shell_config),
- frag->str);
+ gap->ga_data);
return;
}
- new_dir = alloc(frag->len - offset + 1);
- url_decode(pos, frag->len-offset, new_dir);
+ 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,13 +4518,7 @@ parse_osc(int command, VTermStringFragment frag, void *user)
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)
+ if (command != 51 && (command != 7 || !p_asd))
return 0;
// Concatenate what was received until the final piece is found.
@@ -4539,6 +4533,14 @@ parse_osc(int command, VTermStringFragment frag, void *user)
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;
diff --git a/src/version.c b/src/version.c
index 07b571d8f..616f748c4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -732,6 +732,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 235,
+/**/
234,
/**/
233,