diff --git a/lua/pl/path.lua b/lua/pl/path.lua index 1e044e11..e08436a6 100644 --- a/lua/pl/path.lua +++ b/lua/pl/path.lua @@ -493,12 +493,29 @@ end -- In windows, if HOME isn't set, then USERPROFILE is used in preference to -- HOMEDRIVE HOMEPATH. This is guaranteed to be writeable on all versions of Windows. -- @string P A file path +-- @treturn[1] string The file path with the `~` prefix substituted, or the input path if it had no prefix. +-- @treturn[2] nil +-- @treturn[2] string Error message if the environment variables were unavailable. function path.expanduser(P) assert_string(1,P) if at(P,1) == '~' then local home = getenv('HOME') - if not home then -- has to be Windows - home = getenv 'USERPROFILE' or (getenv 'HOMEDRIVE' .. getenv 'HOMEPATH') + if (not home) and path.is_windows then + home = getenv 'USERPROFILE' + if not home then + local hd = getenv 'HOMEDRIVE' + local hp = getenv 'HOMEPATH' + if hd and hp then + home = hd..hp + end + end + if not home then + return nil, "failed to expand '~' (HOME, USERPROFILE and HOMEDRIVE or HOMEPATH not set)" + end + else + if not home then + return nil, "failed to expand '~' (HOME not set)" + end end return home..sub(P,2) else