From 15e1fc929ed84c161abc5afc9be73488a41df397 Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Sat, 3 Nov 2018 16:16:04 +0800 Subject: [PATCH] config/default: add support for $XDG_CACHE_HOME for history Fixes #1316 (support XDG Base Directory Specification) --- lib/pry/config/default.rb | 17 +++++++++++------ lib/pry/history.rb | 3 +++ 2 files changed, 14 insertions(+), 6 deletions(-) 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