anchor.diff:        Inc(Result, cmdFirstPluginCommand);
     end
     else
  -    //usual item
  +  begin
  +    //str(number) item
       Result:= StrToIntDef(AId, -1);
  +
  +    //for broken keys config which has incorrect int keys, issue #4590
  +    if (Result>=cmdFirstPluginCommand) and (Result<=cmdLastPluginCommand) then
  +      Result:= -1;
  +  end;
   end;
   
   class function TPluginHelper.Debug_PluginCommands(const AModule: string): string;
  
positive.code:       DoReadConfigToKeys(StrId+'/s1', AKeymap[nitem].Keys1);
        DoReadConfigToKeys(StrId+'/s2', AKeymap[nitem].Keys2);
        AKeymap[nitem].LexerSpecific:= AForLexer;
      end;
    finally
      skeys.Free;
  
negative.code:   var
      j: integer;
    begin
      keys.Clear;
      cfg.GetValue(path, skeys, '');
      for j:= 0 to skeys.count-1 do
      begin
        if skeys[j]<>'' then
          keys.Data[j]:= TextToShortCut(skeys[j]);
      end;
    end;
    //
  var
  