diff --git a/lib/pry/config/default.rb b/lib/pry/config/default.rb index 7d441e21..0821f576 100644 --- a/lib/pry/config/default.rb +++ b/lib/pry/config/default.rb @@ -119,12 +119,17 @@ class Pry }, history: proc { Pry::Config.from_hash({should_save: true, should_load: true}, nil).tap do |history| - history.file = File.expand_path("~/.pry_history") rescue nil - if history.file.nil? - self.should_load_rc = false - history.should_save = false - history.should_load = false - end + history_file = + if File.exist?(File.expand_path('~/.pry_history')) + '~/.pry_history' + elsif ENV.key?('XDG_CACHE_HOME') && ENV['XDG_CACHE_HOME'] != '' + # See XDG Base Directory Specification at + # https://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html + ENV['XDG_CACHE_HOME'] + '/pry/pry_history' + else + '~/.cache/pry/pry_history' + end + history.file = File.expand_path(history_file) end }, exec_string: proc { diff --git a/lib/pry/history.rb b/lib/pry/history.rb index b40dac50..8f1fec55 100644 --- a/lib/pry/history.rb +++ b/lib/pry/history.rb @@ -136,6 +136,9 @@ class Pry if defined?(@history_file) @history_file else + unless File.exist?(history_file_path) + FileUtils.mkdir_p(File.dirname(history_file_path)) + end @history_file = File.open(history_file_path, 'a', 0600).tap do |file| file.sync = true end