Mercurial > vim
changeset 27063:3bad1cf600ed v8.2.4060
patch 8.2.4060: win_execute() slow on systems where getcwd()/chdir() is slow
Commit: https://github.com/vim/vim/commit/d6f27c66cca32b93fcf8024b1bad1618946bbbea
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jan 11 12:37:20 2022 +0000
patch 8.2.4060: win_execute() slow on systems where getcwd()/chdir() is slow
Problem: win_execute() is slow on systems where getcwd() or chdir() is
slow. (Rick Howe)
Solution: Avoid using getcwd() and chdir() if no local directory is used and
'acd' is not set. (closes #9504)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 11 Jan 2022 13:45:04 +0100 |
parents | 7ff6cfb31728 |
children | 8509d969e171 |
files | src/evalwindow.c src/version.c |
diffstat | 2 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -707,13 +707,26 @@ f_win_execute(typval_T *argvars, typval_ { pos_T curpos = wp->w_cursor; char_u cwd[MAXPATHL]; - int cwd_status; + int cwd_status = FAIL; #ifdef FEAT_AUTOCHDIR char_u autocwd[MAXPATHL]; int apply_acd = FALSE; #endif - cwd_status = mch_dirname(cwd, MAXPATHL); + // Getting and setting directory can be slow on some systems, only do + // this when the current or target window/tab have a local directory or + // 'acd' is set. + if (curwin != wp + && (curwin->w_localdir != NULL + || wp->w_localdir != NULL + || (curtab != tp + && (curtab->tp_localdir != NULL + || tp->tp_localdir != NULL)) +#ifdef FEAT_AUTOCHDIR + || p_acd +#endif + )) + cwd_status = mch_dirname(cwd, MAXPATHL); #ifdef FEAT_AUTOCHDIR // If 'acd' is set, check we are using that directory. If yes, then