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