lib/rib/more/multiline_history.rb in rib-0.1.0 vs lib/rib/more/multiline_history.rb in rib-0.9.0

- old
+ new

@@ -1,31 +1,43 @@ -require 'rib/more/multiline' # dependency +require 'rib/core/history' # dependency +require 'rib/core/multiline' # dependency module Rib::MultilineHistory include Rib::Plugin Shell.use(self) + # --------------- Rib API --------------- + + def before_loop + @multiline_trash = 0 + super + end + def loop_eval input return super if MultilineHistory.disabled? - value = super - rescue Exception - # might be multiline editing, ignore - raise - else - if multiline_buffer.size > 1 - # so multiline editing is considering done here - (multiline_buffer.size + (@multiline_trash || 0)).times{ history.pop } - history << "\n" + multiline_buffer.join("\n") - end - value + super + ensure + # SyntaxError might mean we're multiline editing + handle_multiline unless multiline?($!) end def handle_interrupt return super if MultilineHistory.disabled? if multiline_buffer.size > 1 @multiline_trash ||= 0 @multiline_trash += 1 end super + end + + + + private + def handle_multiline + if multiline_buffer.size > 1 + # so multiline editing is considering done here + (multiline_buffer.size + @multiline_trash).times{ history.pop } + history << "\n" + multiline_buffer.join("\n") + end end end