Identifying and Handling Transient Data on the Clipboard

 

The Issue


TextExpander, Butler, TypeIt4Me, Typinator, Keyboard Maestro, pasteboard history applications, and other applications briefly commandeer the general pasteboard to transport large chunks of data into the user's current context quickly and without undue cursor animation. These applications tend to identify their data as being transient and/or not explicitly Copied by the user using additional pasteboard types.


CopyPaste, PTHPasteboard, and other applications maintain histories of the pasteboard contents. Pasteboard data identified as transient should not be included in these histories. They may also choose to treat content identified as not explicitly Copied by the user differently, either by excluding it, or by presenting it differently.


iClip 5.1 includes support for the 3rd party transient identifiers below as well as for org.nspasteboard.AutoGeneratedType and org.nspasteboard.TransientType.


The Solution


1. Identify and respect currently-defined transient and not-user-Copied pasteboard data identifiers.


2. Define new, shared transient and not-user-Copied pasteboard data identifiers to use and respect in the future.


Existing Identifiers


Textpander, TextExpander, Butler:

@"de.petermaurer.TransientPasteboardType"

TypeIt4Me:

@"com.typeit4me.clipping"

Typinator:

@"Pasteboard generator type"


Please send your identifiers to: register@nspasteboard.org, and we’ll add them to this list.


New Universal Identifier


@"org.nspasteboard.AutoGeneratedType": content was generated by an application; the user had no intention to Copy this content and may not expect to find it on the pasteboard.

@"org.nspasteboard.TransientType": content will be on the pasteboard only momentarily (pasteboard will either be restored to previous content, or the current content will be replaced); presence of this type indicates transient data


Future Actions for Applications Which Paste Transient Data


  1. Add @"org.nspasteboard.TransientType" and/or @"org.nspasteboard.AutoGeneratedType" with a payload of your choice. For example:

    [thePasteboard setData: [NSData data] forType: @"org.nspasteboard.TransientType"];

  1. If you have an existing application which places data on the general pasteboard in a scenario with no "Copy" action or intent by the user, please add the @"org.nspasteboard.AutoGeneratedType" data identifier

  2. If you have an existing application which places transient data on the general pasteboard, please add @"org.nspasteboard.TransientType" in addition to your existing transient data identifier

  3. If you're writing a new application in this area, please don't create new identifiers for generated or transient data


Future Actions for Clipboard Historians


  1. Add support for existing identifiers (see above) of transient data not already supported by your application

  2. Add support for the new universal identifiers:
            @"org.nspasteboard.AutoGeneratedType" and
            @"org.nspasteboard.TransientType"


Document History


  1. Updated May 27, 2011 with AutoGeneratedType to make a distinction between automatically generated content and transient content.