Skip to content

Instantly share code, notes, and snippets.

@devonzuegel
Last active June 13, 2024 19:43
Show Gist options
  • Save devonzuegel/c6e69d1d9981fc740a46 to your computer and use it in GitHub Desktop.
Save devonzuegel/c6e69d1d9981fc740a46 to your computer and use it in GitHub Desktop.
My .pryrc file
# === EDITOR ===
Pry.editor = 'vi'
require 'awesome_print'
# == Pry-Nav - Using pry as a debugger ==
Pry.commands.alias_command 'c', 'continue' rescue nil
Pry.commands.alias_command 's', 'step' rescue nil
Pry.commands.alias_command 'n', 'next' rescue nil
# === CUSTOM PROMPT ===
# This prompt shows the ruby version (useful for RVM)
# Pry.prompt = [proc { |obj, nest_level, _| "#{RUBY_VERSION} (#{obj}):#{nest_level} > " }, proc { |obj, nest_level, _| "#{RUBY_VERSION} (#{obj}):#{nest_level} * " }]
BLACK = "\001\e[0;30m\002"
WHITE = "\001\e[0m\002"
Pry.prompt = [
proc { |target_self, nest_level, pry|
line_num = pry.input_array.size
prompt = "#{line_num} "
"#{BLACK}#{prompt}#{WHITE}"
},
proc { |target_self, nest_level, pry|
prompt = ". "
"#{BLACK}#{prompt}#{WHITE}"
}
]
# === Listing config ===
# Better colors - by default the headings for methods are too
# similar to method name colors leading to a "soup"
# These colors are optimized for use with Solarized scheme
# for your terminal
Pry.config.ls.separator = "\n" # new lines between methods
Pry.config.ls.heading_color = :magenta
Pry.config.ls.public_method_color = :green
Pry.config.ls.protected_method_color = :yellow
Pry.config.ls.private_method_color = :bright_black
# == PLUGINS ===
# awesome_print gem: great syntax colorized printing
# look at ~/.aprc for more settings for awesome_print
begin
require 'awesome_print'
# The following line enables awesome_print for all pry output,
# and it also enables paging
Pry.config.print = proc { |output, value|
formatted = value.ai
value.ai.split("\n").each_with_index do |v, i|
prefix = (i == 0) ? "=>" : '. '
output.puts "#{BLACK}#{prefix}#{WHITE} #{v}"
end
# output.puts formatted
# Pry::Helpers::BaseHelpers.stagger_output("#{BLACK}=>#{WHITE} #{value.ai}", output)
}
# If you want awesome_print without automatic pagination, use the line below
# Pry.config.print = proc { |output, value| output.puts value.ai }
rescue LoadError => err
puts "gem install awesome_print # <-- highly recommended"
end
# === CUSTOM COMMANDS ===
# from: https://gist.github.com/1297510
default_command_set = Pry::CommandSet.new do
command "copy", "Copy argument to the clip-board" do |str|
IO.popen('pbcopy', 'w') { |f| f << str.to_s }
end
command "clear" do
system 'clear'
if ENV['RAILS_ENV']
output.puts "Rails Environment: " + ENV['RAILS_ENV']
end
end
command "sql", "Send sql over AR." do |query|
if ENV['RAILS_ENV'] || defined?(Rails)
pp ActiveRecord::Base.connection.select_all(query)
else
pp "No rails env defined"
end
end
command "caller_method" do |depth|
depth = depth.to_i || 1
if /^(.+?):(\d+)(?::in `(.*)')?/ =~ caller(depth+1).first
file = Regexp.last_match[1]
line = Regexp.last_match[2].to_i
method = Regexp.last_match[3]
output.puts [file, line, method]
end
end
end
Pry.config.commands.import default_command_set
# === CONVENIENCE METHODS ===
# Stolen from https://gist.github.com/807492
# Use Array.toy or Hash.toy to get an array or hash to play with
class Array
def self.toy(n=10, &block)
block_given? ? Array.new(n,&block) : Array.new(n) {|i| i+1}
end
end
class Hash
def self.toy(n=10)
Hash[Array.toy(n).zip(Array.toy(n){|c| (96+(c+1)).chr})]
end
end
# === COLOR CUSTOMIZATION ===
# Everything below this line is for customizing colors, you have to use the ugly
# color codes, but such is life.
CodeRay.scan("example", :ruby).term # just to load necessary files
# Token colors pulled from: https://github.com/rubychan/coderay/blob/master/lib/coderay/encoders/terminal.rb
$LOAD_PATH << File.dirname(File.realpath(__FILE__))
# In CodeRay >= 1.1.0 token colors are defined as pre-escaped ANSI codes
if Gem::Version.new(CodeRay::VERSION) >= Gem::Version.new('1.1.0')
require "escaped_colors"
else
require "unescaped_colors"
end
module CodeRay
module Encoders
class Terminal < Encoder
# override old colors
TERM_TOKEN_COLORS.each_pair do |key, value|
TOKEN_COLORS[key] = value
end
end
end
end
@kernelsmith
Copy link

The require 'awesome_print' at L43 will get rescued if it fails, but the one on L3 won't and obviously it gets hit first

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment