docs: function(renderer, opts){
  		// handle parameters
  		opts		= opts		|| {};
  		var charCode	= opts.charCode	|| 'p'.charCodeAt(0);
  		var width	= opts.width;
  		var height	= opts.height;
  		var callback	= opts.callback	|| function(url){
  			window.open(url, "name-"+Math.random());
  		};
  
  		// callback to handle keypress
  		var __bind	= function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
  		var onKeyPress	= __bind(function(event){
  			// return now if the KeyPress isnt for the proper charCode
  			if( event.which !== charCode )	return;
  			// get the renderer output
  			var dataUrl	= this.toDataURL(renderer);
  
  			if( width === undefined && height === undefined ){
  				callback( dataUrl )
  			}else{
  				// resize it and notify the callback
  				// * resize == async so if callback is a window open, it triggers the pop blocker
  				_aspectResize(dataUrl, width, height, callback);				
  			}
  		}, this);
  
  		// listen to keypress
  		// NOTE: for firefox it seems mandatory to listen to document directly
  		document.addEventListener('keypress', onKeyPress, false);
  
  		return {
  			unbind	: function(){
  				document.removeEventListener('keypress', onKeyPress, false);
  			}
  		};
  	}