anchor.diff:      var id = int.parse(elem.id, onError: (e) => -1);
       filters.removeWhere((filter) => filter.id == id);
   
  -    // This is a bit of a hammer where we would prefer something elegant.
  -    // Specifically, let's say I've scrolled to see a particular record.
  -    // If I drop a filter, I want to stay scrolled to that record.
  -    // This will do for a first pass, though.
  +    // TODO: stay scrolled to roughly the same place.
       messages.clear();
       messages.addAll(_logs.where((record) => !filters.any((filter) => !filter.match(record))));
     }
  
positive.code: 
    void addFilter(var filter) {
      if (filter is String) {
        // TODO person specifying multiple filters?
        // eg file:foo "bar"
        for (var parsed in Filter.parseAll(filter)) {
          addFilter(parsed);
        }
  
negative.code:   StreamSubscription<LogRecord> _sub;
  
    LogViewer.created() : super.created() {
      this.changes.listen((change) {
        if (_oldLog == log) {
          return;
  