public/ckeditor/4.4dev/plugins/undo/plugin.js
function( evt ) {
			// Block undo/redo keystrokes when at the bottom/top of the undo stack (#11126 and #11677).
			if ( CKEDITOR.tools.indexOf( keystrokes, evt.data.getKeystroke() ) > -1 ) {
				evt.data.preventDefault();
				return;
			}

			// Cleaning tab functional keys.
			this.keyEventsStack.cleanUp( evt );

			var keyCode = evt.data.getKey(),
				undoManager = this.undoManager;

			// Gets last record for provided keyCode. If not found will create one.
			var last = this.keyEventsStack.getLast( keyCode );
			if ( !last ) {
				this.keyEventsStack.push( keyCode );
			}

			// We need to store an image which will be used in case of key group
			// change.
			this.lastKeydownImage = new Image( undoManager.editor );

			if ( UndoManager.isNavigationKey( keyCode ) || this.undoManager.keyGroupChanged( keyCode ) ) {
				if ( undoManager.strokesRecorded[ 0 ] || undoManager.strokesRecorded[ 1 ] ) {
					// We already have image, so we'd like to reuse it.
					undoManager.save( false, this.lastKeydownImage );
					undoManager.resetType();
				}
			}
		}
function( evt ) {
			// Block undo/redo keystrokes when at the bottom/top of the undo stack (#11126 and #11677).
			if ( CKEDITOR.tools.indexOf( keystrokes, evt.data.getKeystroke() ) > -1 ) {
				evt.data.preventDefault();
				return;
			}

			// Cleaning tab functional keys.
			this.keyEventsStack.cleanUp( evt );

			var keyCode = evt.data.getKey(),
				undoManager = this.undoManager;

			// Gets last record for provided keyCode. If not found will create one.
			var last = this.keyEventsStack.getLast( keyCode );
			if ( !last ) {
				this.keyEventsStack.push( keyCode );
			}

			// We need to store an image which will be used in case of key group
			// change.
			this.lastKeydownImage = new Image( undoManager.editor );

			if ( UndoManager.isNavigationKey( keyCode ) || this.undoManager.keyGroupChanged( keyCode ) ) {
				if ( undoManager.strokesRecorded[ 0 ] || undoManager.strokesRecorded[ 1 ] ) {
					// We already have image, so we'd like to reuse it.
					undoManager.save( false, this.lastKeydownImage );
					undoManager.resetType();
				}
			}
		}
function ( evt ) { // Block undo/redo keystrokes when at the bottom/top of the undo stack (#11126 and #11677).
 if ( CKEDITOR . tools . indexOf ( keystrokes , evt . data . getKeystroke ( ) ) > - 1 ) { evt . data . preventDefault ( ) ; return ; } // Cleaning tab functional keys.
 this . keyEventsStack . cleanUp ( evt ) ; var keyCode = evt . data . getKey ( ) , undoManager = this . undoManager ; // Gets last record for provided keyCode. If not found will create one.
 var last = this . keyEventsStack . getLast ( keyCode ) ; if ( ! last ) { this . keyEventsStack . push ( keyCode ) ; } // We need to store an image which will be used in case of key group
 // change.
 this . lastKeydownImage = new Image ( undoManager . editor ) ; if ( UndoManager . isNavigationKey ( keyCode ) || this . undoManager . keyGroupChanged ( keyCode ) ) { if ( undoManager . strokesRecorded [ 0 ] || undoManager . strokesRecorded [ 1 ] ) { // We already have image, so we'd like to reuse it.
 undoManager . save ( false , this . lastKeydownImage ) ; undoManager . resetType ( ) ; } } }
The `keydown` event listener.

@param {CKEDITOR.dom.event} evt
The keydown event listener .