diff --git a/src/internals.jl b/src/internals.jl index 4983dd1..e0c9b8d 100644 --- a/src/internals.jl +++ b/src/internals.jl @@ -10,20 +10,14 @@ export @defaccessor, @setxdg, @setxdgs @static if Sys.isunix() macro setxdg(envvar::Symbol, default) quote $(esc(envvar))[] = if haskey(ENV, $("XDG_$envvar")) && !isempty(ENV[$("XDG_$envvar")]) - path = ENV[$("XDG_$envvar")] - if endswith(path, first(Base.Filesystem.path_separator)) - path[begin:end-1] - else path end + chopsuffix(ENV[$("XDG_$envvar")], Base.Filesystem.path_separator) else expanduser($(esc(default))) end end end else macro setxdg(envvar::Symbol, default) quote $(esc(envvar))[] = if haskey(ENV, $("XDG_$envvar")) && !isempty(ENV[$("XDG_$envvar")]) - path = ENV[$("XDG_$envvar")] - if endswith(path, first(Base.Filesystem.path_separator)) - path[begin:end-1] - else path end + chopsuffix(ENV[$("XDG_$envvar")], Base.Filesystem.path_separator) else $(esc(default)) end end end @@ -32,9 +26,7 @@ end macro setxdgs(envvar::Symbol, defaults) quote $(esc(envvar))[] = if haskey(ENV, $("XDG_$envvar")) && !isempty(ENV[$("XDG_$envvar")]) map(split(ENV[$("XDG_$envvar")], ':')) do path - if endswith(path, first(Base.Filesystem.path_separator)) - path[begin:end-1] - else path end + chopsuffix(path, Base.Filesystem.path_separator) end else $(esc(defaults)) end end diff --git a/src/unix.jl b/src/unix.jl index 3f10214..3285b1f 100644 --- a/src/unix.jl +++ b/src/unix.jl @@ -20,10 +20,10 @@ function parseuserdirs(configdir::String) key, value = split(line, '=', limit=2) if key in validnames if startswith(value, '"') && endswith(value, '"') - value = unescape_string(value[2:end-1]) + value = unescape_string(chop(value, head=1, tail=1)) end if startswith(value, "\$HOME") - value = string(homedir(), value[6:end]) + value = string(homedir(), chopprefix(value, "$HOME")) end if startswith(value, '/') push!(keys, Symbol(key)) diff --git a/test/runtests.jl b/test/runtests.jl index 43336cf..e26d79b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -115,6 +115,34 @@ elseif Sys.isunix() @test BaseDirs.User.fonts() == ["$usr/.local/share/fonts", "$usr/.fonts"] @test BaseDirs.User.applications() == ["$usr/.local/share/applications"] end + @testset "User (customised)" begin + userdirs_jpn = raw""" + XDG_DESKTOP_DIR="$HOME/デスクトップ" + XDG_DOWNLOAD_DIR="$HOME/ダウンロード" + XDG_TEMPLATES_DIR="$HOME/テンプレート" + XDG_PUBLICSHARE_DIR="$HOME/公開" + XDG_DOCUMENTS_DIR="$HOME/ドキュメント" + XDG_MUSIC_DIR="$HOME/ミュージック" + XDG_PICTURES_DIR="$HOME/ピクチャ" + XDG_VIDEOS_DIR="$HOME/ビデオ" + """ + userdirs_file = joinpath(BaseDirs.CONFIG_HOME[], "user-dirs.dirs") + isfile(userdirs_file) && + mv(userdirs_file, userdirs_file * ".backup") + write(userdirs_file, userdirs_jpn) + @test BaseDirs.reload() === nothing + @test BaseDirs.User.desktop() == "$usr/デスクトップ" + @test BaseDirs.User.downloads() == "$usr/ダウンロード" + @test BaseDirs.User.documents() == "$usr/ドキュメント" + @test BaseDirs.User.music() == "$usr/ミュージック" + @test BaseDirs.User.pictures() == "$usr/ピクチャ" + @test BaseDirs.User.videos() == "$usr/ビデオ" + @test BaseDirs.User.templates() == "$usr/テンプレート" + @test BaseDirs.User.public() == "$usr/公開" + rm(userdirs_file) + isfile(userdirs_file * ".backup") && + mv(userdirs_file * ".backup", userdirs_file) + end @testset "System" begin @test BaseDirs.System.data() == ["/usr/local/share", "/usr/share"] @test BaseDirs.System.config() == ["/etc/xdg"]