11 Enumerable::Enumerator.new(Index, :each_message, Index.parse_query(query))
14 def add_labels(query, *labels)
15 query(query).each { |m| m.labels += labels; m.save Index }
18 def remove_labels(query, *labels)
19 query(query).each { |m| m.labels -= labels; m.save Index }
22 def xapian; Index.instance.instance_variable_get :@xapian; end
23 def ferret; Index.instance.instance_variable_get :@index; end
24 def special_methods; methods - Object.methods end
26 ## files that won't cause problems when reloaded
27 ## TODO expand this list / convert to blacklist
28 RELOAD_WHITELIST = %w(sup/xapian_index.rb sup/modes/console-mode.rb)
31 old_verbose = $VERBOSE
35 fs = $".grep(/^sup\//)
36 fs.reject! { |f| not RELOAD_WHITELIST.member? f }
37 fs.each { |f| $".delete f }
39 @mode << "reloading #{f}\n"
43 raise unless e.message =~ /no such file to load/
48 $".concat old_features
51 $VERBOSE = old_verbose
62 class ConsoleMode < LogMode
63 register_keymap do |k|
64 k.add :run, "Restart evaluation", 'e'
69 @console = Console.new self
70 @binding = @console.instance_eval { binding }
76 ret = eval cmd, @binding
77 self << "=> #{ret.pretty_inspect}\n"
79 self << "#{$!.class}: #{$!.message}\n"
81 $!.backtrace.each { |l| break if l =~ /console-mode/; clean_backtrace << l }
82 clean_backtrace.each { |l| self << "#{l}\n" }
87 BufferManager.ask :console, ">> "
92 Sup v#{VERSION} console session started.
93 Available extra commands: #{(@console.special_methods) * ", "}
94 Ctrl-G stops evaluation; 'e' restarts it.
101 self << "Console session ended."