Skip to content

Commit

Permalink
Show easter-egg inside document dialog in autocomplete mode
Browse files Browse the repository at this point in the history
  • Loading branch information
tompng committed Oct 21, 2023
1 parent 802b1cb commit 1b2810e
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 10 deletions.
17 changes: 12 additions & 5 deletions lib/irb/easter-egg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,22 @@ def render_frame(i)
end
end

private def easter_egg_logo(type)
@easter_egg_logos ||= File.binread(File.join(__dir__, 'ruby_logo.aa'))
.force_encoding(Encoding::UTF_8)
.split(/TYPE: ([A-Z]+)\n/)[1..]
.each_slice(2)
.to_h
@easter_egg_logos[type.to_s.upcase]
end

private def easter_egg(type = nil)
type ||= [:logo, :dancing].sample
case type
when :logo
File.open(File.join(__dir__, 'ruby_logo.aa')) do |f|
require "rdoc"
RDoc::RI::Driver.new.page do |io|
IO.copy_stream(f, io)
end
require "rdoc"
RDoc::RI::Driver.new.page do |io|
io.write easter_egg_logo(:large)
end
when :dancing
STDOUT.cooked do
Expand Down
15 changes: 10 additions & 5 deletions lib/irb/input-method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,16 @@ def show_doc_dialog_proc
end
formatter = RDoc::Markup::ToAnsi.new
formatter.width = width
dialog.trap_key = alt_d
mod_key = RUBY_PLATFORM.match?(/darwin/) ? "Option" : "Alt"
message = "Press #{mod_key}+d to read the full document"
contents = [message] + doc.accept(formatter).split("\n")
contents = contents.take(preferred_dialog_height)
if name =~ /\ARubyVM/ and not ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
type = STDOUT.external_encoding == Encoding::UTF_8 ? :unicode : :ascii
contents = IRB.send(:easter_egg_logo, type).split("\n").take(preferred_dialog_height)
else
dialog.trap_key = alt_d
mod_key = RUBY_PLATFORM.match?(/darwin/) ? "Option" : "Alt"
message = "Press #{mod_key}+d to read the full document"
contents = [message] + doc.accept(formatter).split("\n")
contents = contents.take(preferred_dialog_height)
end

y = cursor_pos_to_render.y
Reline::DialogRenderInfo.new(pos: Reline::CursorPos.new(x, y), contents: contents, width: width, bg_color: '49')
Expand Down
43 changes: 43 additions & 0 deletions lib/irb/ruby_logo.aa
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
TYPE: LARGE

-+smJYYN?mm-
HB"BBYT TQg NggT
Expand Down Expand Up @@ -35,3 +36,45 @@
m7 NW H N HSVO1z=?11-
NgTH bB kH WBHWWHBHWmQgg&gggggNNN
NNggggggNN
TYPE: ASCII
,,,;;;;''''';;;'';,
,,;'' ';;,;;; ',
,,'' ;;'';'''';;;;;;
,;' ;; ',, ;
,;' ,;' ';, ;
;' ,;; ',,,;
,' ,;;,,,,,,,,,,,;;;;
;' ;;';;;; ,;;
;' ,;' ;; '',, ,;;;
;; ,;' ; '';, ,; ;'
;; ,;;' ;; ;; ;;
;;, ,,;;' ; ;'; ;;
;';;,,,,;;;;;;;,,, ;; ,' ; ;;
; ;;''' ,;'; ''';,,, ; ,;' ;;;;
;;;;, ; '; ''';;;' ';;;
;'; ;, ;' '; ,;' ', ;;;
;;; ; ,; '; ,,' ',, ;;
;;; '; ;' ';,,'' ';,;;
'; ';,; ,,;''''''''';;;;;;,,;;;
';,,;;,,;;;;;;;;;;''''''''''''''
TYPE: UNICODE
⣀⣤⣴⣾⣿⣿⣿⡛⠛⠛⠛⠛⣻⣿⠿⠛⠛⠶⣤⡀
⣀⣴⠾⠛⠉⠁ ⠙⣿⣶⣤⣶⣟⣉ ⠈⠻⣦
⣀⣴⠟⠋ ⢸⣿⠟⠻⣯⡙⠛⠛⠛⠶⠶⠶⢶⣽⣇
⣠⡾⠋⠁ ⣾⡿ ⠈⠛⢦⣄ ⣿
⣠⡾⠋ ⣰⣿⠃ ⠙⠷⣤⡀ ⣿
⢀⡾⠋ ⣰⣿⡏ ⠈⠻⣦⣄⢠⣿
⣰⠟⠁ ⣴⣿⣿⣁⣀⣠⣤⣤⣤⣤⣤⣤⣤⣴⠶⠿⣿⡏
⣼⠏ ⢀⣾⣿⠟⣿⠿⣯⣍⠁ ⣰⣿⡇
⢀⣼⠋ ⢀⣴⣿⠟⠁ ⢸⡇ ⠙⠻⢦⣄⡀ ⢠⡿⣿⡇
⢀⣾⡏ ⢀⣴⣿⠟⠁ ⣿ ⠉⠻⢶⣄⡀⣰⡟ ⣿⠃
⣾⣿⠁ ⣠⣶⡿⠋⠁ ⢹⡇ ⠈⣿⡏ ⢸⣿
⣿⣿⡆ ⢀⣠⣴⣿⡿⠋ ⠈⣿ ⢀⡾⠋⣿ ⢸⣿
⣿⠸⣿⣶⣤⣤⣤⣤⣶⣾⠿⠿⣿⣿⠶⣤⣤⣀⡀ ⢹⡇ ⣴⠟⠁ ⣿⡀⢸⣿
⣿⢀⣿⣟⠛⠋⠉⠁ ⢰⡟⠹⣧ ⠈⠉⠛⠻⠶⢦⣤⣀⡀ ⠈⣿ ⣠⡾⠃ ⢸⡇⢸⡇
⣿⣾⣿⢿⡄ ⣿⠁ ⠘⣧ ⠉⠙⠛⠷⣿⣿⡋ ⠸⣇⣸⡇
⣿⠃⣿⠈⢿⡄ ⣸⠇ ⠘⣧ ⢀⣤⠾⠋⠈⠻⣦⡀ ⣿⣿⡇
⣿⢸⡏ ⠈⣷⡀ ⢠⡿ ⠘⣧⡀ ⣠⡴⠟⠁ ⠈⠻⣦⣀ ⢿⣿⠁
⢻⣾⡇ ⠘⣷ ⣼⠃ ⠘⣷⣠⣴⠟⠋ ⠙⢷⣄⢸⣿
⠻⣧⡀ ⠘⣧⣰⡏ ⢀⣠⣤⠶⠛⠉⠛⠛⠛⠛⠛⠛⠻⢶⣶⣶⣶⣶⣶⣤⣤⣽⣿⣿
⠈⠛⠷⢦⣤⣽⣿⣥⣤⣶⣶⡿⠿⠿⠶⠶⠶⠶⠾⠛⠛⠛⠛⠛⠛⠛⠋⠉⠉⠉⠉⠉⠉⠁

0 comments on commit 1b2810e

Please sign in to comment.