anchor.diff:      return new Disposable(obj.callMethod("onDidChangeGrammar", [(e) => callback(new Grammar(e))]));
     }
   
  +  Disposable onDidAddSelection(Consumer<Selection> callback) {
  +    return new Disposable(obj.callMethod("onDidAddSelection", [(e) => callback(new Selection(e))]));
  +  }
  +
  +  Disposable onDidRemoveSelection(Consumer<Selection> callback) {
  +    return new Disposable(obj.callMethod("onDidRemoveSelection", [(e) => callback(new Selection(e))]));
  +  }
  +
  +  ScopeDescriptor get rootScopeDescriptor => new ScopeDescriptor.wrap(obj.callMethod("getRootScopeDescriptor"));
  +  ScopeDescriptor scopeDescriptorForBufferPosition(f) =>
  +    new ScopeDescriptor.wrap(obj.callMethod("scopeDescriptorForBufferPosition", [f is Point ? f.toJS() : f]));
  +
     Disposable observeGrammar(Consumer<Grammar> callback) {
       return new Disposable(obj.callMethod("observeGrammar", [(e) => callback(new Grammar(e))]));
     }
  
positive.code:   Disposable onDidSave(Action callback) => new Disposable(obj.callMethod("onDidSave", [(e) => callback()]));
    Disposable onDidDestroy(Action callback) => new Disposable(obj.callMethod("onDidDestroy", [callback]));
  
    void transpose() {
      obj.callMethod("transpose");
    }
  
negative.code: 
    void cutToEndOfLine() {
      obj.callMethod("cutSelectedText");
    }
  
    void pasteText() {
      obj.callMethod("pasteText");
    }
  
    void foldCurrentRow() {
  