]> git.cworth.org Git - sup/blob - lib/sup/modes/console-mode.rb
console mode
[sup] / lib / sup / modes / console-mode.rb
1 require 'pp'
2
3 module Redwood
4
5 class Console
6   def initialize mode
7     @mode = mode
8   end
9 end
10
11 class ConsoleMode < LogMode
12   def initialize
13     super
14     @binding = Console.new(self).instance_eval { binding }
15   end
16
17   def execute cmd
18     begin
19       self << ">> #{cmd}\n"
20       ret = eval cmd, @binding
21       self << "=> #{ret.pretty_inspect}\n"
22     rescue Exception
23       self << "#{$!.class}: #{$!.message}\n"
24       clean_backtrace = []
25       $!.backtrace.each { |l| break if l =~ /console-mode/; clean_backtrace << l }
26       clean_backtrace.each { |l| self << "#{l}\n" }
27     end
28   end
29
30   def prompt
31     BufferManager.ask :console, "eval: "
32   end
33
34   def run
35     while true
36       cmd = prompt or return
37       execute cmd
38     end
39   end
40 end
41
42 end