anchor.diff:     * Shift + SPACE works automatically on the right editor (ICEMultiDocObserver)
      * Automatic insertion is handled in TCESynMemo.KeyUp()
      *)
  -  TCEStaticEditorMacro = class(TWritableLfmTextComponent, ICEMultiDocObserver)
  +  TCEStaticEditorMacro = class(TWritableLfmTextComponent, ICEMultiDocObserver, ICEEditableOptions)
     private
  +    //TODO-cfeature: exposes fCompletor shortcut with ICEEDItableShortcut
       fCompletor: TSynAutoComplete;
       fMacros: TStringList;
       fDoc: TCESynMemo;
       fAutomatic: boolean;
  +    fOptions: TStaticMacrosOptions;
  +    fOptionBackup: TStaticMacrosOptions;
       procedure sanitize;
       procedure addDefaults;
       procedure updateCompletor;
  
positive.code:     '$v=void (){}'
    );
  
  var
    StaticEditorMacro: TCEStaticEditorMacro = nil;
  
  implementation
  
  uses
    ce_observer, ce_common;
  
  {$REGION Standard Comp/Obj -----------------------------------------------------}
  constructor TCEStaticEditorMacro.create(aOwner: TComponent);
  
negative.code:   if aDoc <> fDoc then
      exit;
    fDoc := nil;
  end;
  {$ENDREGION}
  
  {$REGION ICEEditableOptions ----------------------------------------------------}
  function TCEStaticEditorMacro.optionedWantCategory(): string;
  begin
  	exit('Static macros');
  end;
  
  function TCEStaticEditorMacro.optionedWantEditorKind: TOptionEditorKind;
  begin
  	exit(oekGeneric);
  end;
  
  function TCEStaticEditorMacro.optionedWantContainer: TPersistent;
  begin
  	fOptions.Assign(self);
    fOptionBackup.Assign(fOptions);
    exit(fOptions);
  end;
  
  procedure TCEStaticEditorMacro.optionedEvent(anEvent: TOptionEditorEvent);
  begin
  	case anEvent of
      oeeAccept:
      begin
        fOptions.AssignTo(self);
        fOptionBackup.Assign(self);
      end;
      oeeCancel:
      begin
        fOptionBackup.AssignTo(self);
        fOptionBackup.AssignTo(fOptions);
      end;
      oeeChange: fOptions.AssignTo(self);
    end;
  end;
  {$ENDREGION}
  
  