From 2f9c7500a337a03c059c8ef68886b91e9ab4da68 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 8 Aug 2025 19:33:00 +0900 Subject: [PATCH] Use `~/.config` only if `$XDG_CONFIG_HOME` is unset or empty --- lib/optparse.rb | 12 +++++++++--- test/optparse/test_load.rb | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/optparse.rb b/lib/optparse.rb index 23b4844..06e33db 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -2049,10 +2049,16 @@ def load(filename = nil, **keywords) basename = File.basename($0, '.*') return true if load(File.expand_path("~/.options/#{basename}"), **keywords) rescue nil basename << ".options" + if !(xdg = ENV['XDG_CONFIG_HOME']) or xdg.empty? + # https://specifications.freedesktop.org/basedir-spec/latest/#variables + # + # If $XDG_CONFIG_HOME is either not set or empty, a default + # equal to $HOME/.config should be used. + xdg = ['~/.config', true] + end return [ - # XDG - ENV['XDG_CONFIG_HOME'], - ['~/.config', true], + xdg, + *ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR), # Haiku diff --git a/test/optparse/test_load.rb b/test/optparse/test_load.rb index 8c83503..f664cfb 100644 --- a/test/optparse/test_load.rb +++ b/test/optparse/test_load.rb @@ -47,7 +47,7 @@ def setup_options(env, dir, suffix = nil) begin yield dir, optdir ensure - File.unlink(file) + File.unlink(file) rescue nil Dir.rmdir(optdir) rescue nil end else @@ -101,7 +101,7 @@ def test_load_home_options end def test_load_xdg_config_home - result, = setup_options_xdg_config_home + result, dir = setup_options_xdg_config_home assert_load(result) setup_options_home_config do @@ -115,6 +115,11 @@ def test_load_xdg_config_home setup_options_home_config_settings do assert_load(result) end + + File.unlink("#{dir}/#{@basename}.options") + setup_options_home_config do + assert_load_nothing + end end def test_load_home_config @@ -128,6 +133,11 @@ def test_load_home_config setup_options_home_config_settings do assert_load(result) end + + setup_options_xdg_config_home do |_, dir| + File.unlink("#{dir}/#{@basename}.options") + assert_load_nothing + end end def test_load_xdg_config_dirs