mirror of
https://github.com/neovim/neovim.git
synced 2025-09-12 22:38:16 +00:00
terminal: absolute CWD in term:// URI #11289
This makes it possible to restore the working directory of :terminal buffers when reading those buffers from a session file. Fixes #11288 Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
This commit is contained in:

committed by
Justin M. Keyes

parent
451af7f087
commit
c6ff23d7a0
@@ -18383,13 +18383,17 @@ static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
|
||||
int pid = chan->stream.pty.process.pid;
|
||||
|
||||
char buf[1024];
|
||||
// format the title with the pid to conform with the term:// URI
|
||||
snprintf(buf, sizeof(buf), "term://%s//%d:%s", cwd, pid, cmd);
|
||||
// "./…" => "/home/foo/…"
|
||||
vim_FullName(cwd, (char *)NameBuff, sizeof(NameBuff), false);
|
||||
// "/home/foo/…" => "~/…"
|
||||
home_replace(NULL, NameBuff, IObuff, sizeof(IObuff), true);
|
||||
// Terminal URI: "term://$CWD//$PID:$CMD"
|
||||
snprintf((char *)NameBuff, sizeof(NameBuff), "term://%s//%d:%s",
|
||||
(char *)IObuff, pid, cmd);
|
||||
// at this point the buffer has no terminal instance associated yet, so unset
|
||||
// the 'swapfile' option to ensure no swap file will be created
|
||||
curbuf->b_p_swf = false;
|
||||
(void)setfname(curbuf, (char_u *)buf, NULL, true);
|
||||
(void)setfname(curbuf, NameBuff, NULL, true);
|
||||
// Save the job id and pid in b:terminal_job_{id,pid}
|
||||
Error err = ERROR_INIT;
|
||||
// deprecated: use 'channel' buffer option
|
||||
|
Reference in New Issue
Block a user