- Electron version: 1.1.3

The clipboard API docs are somewhat confusing, but it looks like you can only deal with plain text, RTF, HTML, and image data.

It would be great if I could define arbitrary data types. Ideally, multiple types in a single clipboard.write operator.

This is how the Javascript DOM clipboard API works, and Chromium supports it, so hopefully the capability can be exposed in Electron.

The call might look like

```
clipboard.write({
    text: "Textual representation",
    html: "<p>HTML representation</p>",
    "application/graph-editor": "<xml>...custom representation</xml>",
});
```

(The `type` arguments to all the calls describe the _clipboard_ type, not the data type. The only meaningful arguments are `undefined` and `"selection"`, as far as I can tell. Please let me know if I'm wrong about this.)

atom/common/api/atom_api_clipboard.h
public:
  static ui::ClipboardType GetClipboardType(mate::Arguments* args);
  static std::vector<base::string16> AvailableFormats(mate::Arguments* args);
  static bool Has(const std::string& format_string, mate::Arguments* args);
  static void Clear(mate::Arguments* args);
  static std::string Read(const std::string& format_string);
  static void Write(const mate::Dictionary& data, mate::Arguments* args);
  static base::string16 ReadText(mate::Arguments* args);
  static void WriteText(const base::string16& text, mate::Arguments* args);
  static base::string16 ReadRtf(mate::Arguments* args);
  static void WriteRtf(const std::string& text, mate::Arguments* args);
  static base::string16 ReadHtml(mate::Arguments* args);
  static void WriteHtml(const base::string16& html, mate::Arguments* args);
  static v8::Local<v8::Value> ReadBookmark(mate::Arguments* args);
  static void WriteBookmark(const base::string16& title,
                            const std::string& url,
                            mate::Arguments* args);
  static gfx::Image ReadImage(mate::Arguments* args);
  static void WriteImage(const gfx::Image& image, mate::Arguments* args);
  static base::string16 ReadFindText();
  static void WriteFindText(const base::string16& text);
  static v8::Local<v8::Value> ReadBuffer(const std::string& format_string,
                                         mate::Arguments* args);
 private:
  DISALLOW_COPY_AND_ASSIGN(Clipboard);
};
}  
}  
#endif