- 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.cc
const std::string& url,
                              mate::Arguments* args) {
  ui::ScopedClipboardWriter writer(GetClipboardType(args));
  writer.WriteBookmark(title, url);
}
gfx::Image Clipboard::ReadImage(mate::Arguments* args) {
  ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
  SkBitmap bitmap = clipboard->ReadImage(GetClipboardType(args));
  return gfx::Image::CreateFrom1xBitmap(bitmap);
}
void Clipboard::WriteImage(const gfx::Image& image, mate::Arguments* args) {
  ui::ScopedClipboardWriter writer(GetClipboardType(args));
  writer.WriteImage(image.AsBitmap());
}
#if !defined(OS_MACOSX)
void Clipboard::WriteFindText(const base::string16& text) {}
base::string16 Clipboard::ReadFindText() { return base::string16(); }
#endif
void Clipboard::Clear(mate::Arguments* args) {
  ui::Clipboard::GetForCurrentThread()->Clear(GetClipboardType(args));
}
}  
}  
namespace {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,