code: func (t *watcherTree) rm(w *BufferWatcher) bool {
  	if w == nil {
  		return false
  	}
  	var found bool
  	for _, p := range w.Prefixes {
  		prefix := string(p)
  		val, ok := t.Tree.Get(prefix)
  		if !ok {
  			continue
  		}
  		buffers := val.([]*BufferWatcher)
  		prevLen := len(buffers)
  		for i := range buffers {
  			if buffers[i] == w {
  				buffers = append(buffers[:i], buffers[i+1:]...)
  				found = true
  				break
  			}
  		}
  		if len(buffers) == 0 {
  			t.Tree.Delete(prefix)
  		} else if len(buffers) != prevLen {
  			t.Tree.Insert(prefix, buffers)
  		}
  	}
  	return found
  }
docs: // rm removes the buffer watcher from the prefix tree