Browse Source

mksession: always unix slashes "/" for filepaths

tags/nightly
Justin M. Keyes 2 months ago
parent
commit
1c3ca4f18f
6 changed files with 19 additions and 26 deletions
  1. +3
    -0
      ci/build.ps1
  2. +0
    -15
      runtime/doc/usr_21.txt
  3. +10
    -6
      src/nvim/ex_docmd.c
  4. +2
    -2
      src/nvim/option_defs.h
  5. +3
    -2
      test/functional/ex_cmds/mksession_spec.lua
  6. +1
    -1
      test/functional/helpers.lua

+ 3
- 0
ci/build.ps1 View File

@@ -173,6 +173,9 @@ if (-not $NoTests) {
# Functional tests
# The $LastExitCode from MSBuild can't be trusted
$failed = $false

# Run only this test file:
# $env:TEST_FILE = "test\functional\foo.lua"
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
foreach { $failed = $failed -or
$_ -match 'functional tests failed with error'; $_ }


+ 0
- 15
runtime/doc/usr_21.txt View File

@@ -339,21 +339,6 @@ window, move the cursor to the filename and press "O". Double clicking with
the mouse will also do this.


UNIX AND MS-WINDOWS

Some people have to do work on MS-Windows systems one day and on Unix another
day. If you are one of them, consider adding "slash" and "unix" to
'sessionoptions'. The session files will then be written in a format that can
be used on both systems. This is the command to put in your |init.vim| file:
>
:set sessionoptions+=unix,slash

Vim will use the Unix format then, because the MS-Windows Vim can read and
write Unix files, but Unix Vim can't read MS-Windows format session files.
Similarly, MS-Windows Vim understands file names with / to separate names, but
Unix Vim doesn't understand \.


SESSIONS AND SHADA

Sessions store many things, but not the position of marks, contents of


+ 10
- 6
src/nvim/ex_docmd.c View File

@@ -8089,6 +8089,10 @@ static void close_redir(void)
do { if (FAIL == put_line(fd, (s))) { return FAIL; } } while (0)

/// ":mkexrc", ":mkvimrc", ":mkview", ":mksession".
///
/// Legacy 'sessionoptions' flags SSOP_UNIX, SSOP_SLASH are always enabled.
/// - SSOP_UNIX: line-endings are always LF
/// - SSOP_SLASH: filenames are always written with "/" slash
static void ex_mkrc(exarg_T *eap)
{
FILE *fd;
@@ -9112,6 +9116,8 @@ char_u *expand_sfile(char_u *arg)

/// Writes commands for restoring the current buffers, for :mksession.
///
/// Legacy 'sessionoptions' flags SSOP_UNIX, SSOP_SLASH are always enabled.
///
/// @param dirnow Current directory name
/// @param fd File descriptor to write to
///
@@ -9840,12 +9846,10 @@ static char *ses_escape_fname(char *name, unsigned *flagp)
char *p;
char *sname = (char *)home_replace_save(NULL, (char_u *)name);

if (*flagp & SSOP_SLASH) {
// change all backslashes to forward slashes
for (p = sname; *p != NUL; MB_PTR_ADV(p)) {
if (*p == '\\') {
*p = '/';
}
// Always SSOP_SLASH: change all backslashes to forward slashes.
for (p = sname; *p != NUL; MB_PTR_ADV(p)) {
if (*p == '\\') {
*p = '/';
}
}



+ 2
- 2
src/nvim/option_defs.h View File

@@ -577,8 +577,8 @@ static char *(p_ssop_values[]) = {
# define SSOP_HELP 0x040
# define SSOP_BLANK 0x080
# define SSOP_GLOBALS 0x100
# define SSOP_SLASH 0x200
# define SSOP_UNIX 0x400 // Deprecated, not used.
# define SSOP_SLASH 0x200 // Deprecated, always set.
# define SSOP_UNIX 0x400 // Deprecated, always set.
# define SSOP_SESDIR 0x800
# define SSOP_CURDIR 0x1000
# define SSOP_FOLDS 0x2000


+ 3
- 2
test/functional/ex_cmds/mksession_spec.lua View File

@@ -96,7 +96,8 @@ describe(':mksession', function()

it('restores CWD for :terminal buffers #11288', function()
local cwd_dir = funcs.fnamemodify('.', ':p:~'):gsub([[[\/]*$]], '')
local session_path = cwd_dir..get_pathsep()..session_file
cwd_dir = cwd_dir:gsub([[\]], '/') -- :mksession always uses unix slashes.
local session_path = cwd_dir..'/'..session_file

command('cd '..tab_dir)
command('terminal echo $PWD')
@@ -108,7 +109,7 @@ describe(':mksession', function()
clear()
command('silent source '..session_path)

local expected_cwd = cwd_dir..get_pathsep()..tab_dir
local expected_cwd = cwd_dir..'/'..tab_dir
matches('^term://'..pesc(expected_cwd)..'//%d+:', funcs.expand('%'))
command('qall!')
end)


+ 1
- 1
test/functional/helpers.lua View File

@@ -794,7 +794,7 @@ function module.alter_slashes(obj)
end
return ret
else
assert(false, 'Could only alter slashes for tables of strings and strings')
assert(false, 'expected string or table of strings, got '..type(obj))
end
end



Loading…
Cancel
Save