# CKEDITOR.commandDefinition

class abstract

Virtual class that illustrates the features of command objects to be passed to the CKEDITOR.editor.addCommand function.

## Properties

• ### async : BooleanCKEDITOR.commandDefinition#async

Whether the command is asynchronous, which means that the CKEDITOR.editor.afterCommandExec event will be fired by the command itself manually, and that the return value of this command is not to be returned by the exec function.

    editorInstance.addCommand( 'loadoptions', {
exec: function( editor ) {
var cmd = this;
// Asynchronous operation below.
editor.fire( 'afterCommandExec', {
command: cmd
} );
} );
},
async: true // The command needs some time to complete after the exec function returns.
} );


Defaults to false

• ### canUndo : BooleanCKEDITOR.commandDefinition#canUndo

Whether the command needs to be hooked into the redo/undo system.

editorInstance.addCommand( 'alertName', {
exec: function( editor ) {
},
canUndo: false // No support for undo/redo.
} );


Defaults to true

• ### context : BooleanCKEDITOR.commandDefinition#context

Sets the element name used to reflect the command state on selection changes. If the selection is in a place where the element is not allowed, the command will be disabled. Setting this property overrides contextSensitive to true.

Defaults to true

• ### contextSensitive : BooleanCKEDITOR.commandDefinition#contextSensitive

Indicates that this command is sensitive to the selection context. If true, the CKEDITOR.command.refresh method will be called for this command on selection changes, with a single parameter representing the current elements path.

Defaults to true

• ### editorFocus : BooleanCKEDITOR.commandDefinition#editorFocus

Whether the command should give focus to the editor before execution.

editorInstance.addCommand( 'maximize', {
exec: function( editor ) {
// ...
},
editorFocus: false // The command does not require focusing the editing document.
} );


Defaults to true

• ### fakeKeystroke : NumberCKEDITOR.commandDefinition#fakeKeystroke

since 4.6.0

A property that should be set when a command has no keystroke assigned by CKEDITOR.editor.setKeystroke, but the keystroke is still supported. For example: cut, copy and paste commands are handled that way. This property is used when displaying keystroke information in tooltips and context menus. It is used by CKEDITOR.editor.getCommandKeystroke.

• ### modes : ObjectCKEDITOR.commandDefinition#modes

The editor modes within which the command can be executed. The execution will have no action if the current mode is not listed in this property.

editorInstance.addCommand( 'link', {
exec: function( editor ) {
// ...
},
modes: { wysiwyg:1 } // The command is available in wysiwyg mode only.
} );


Defaults to { wysiwyg:1 }

• ### readOnly : BooleanCKEDITOR.commandDefinition#readOnly

since 4.0

Whether the command should be enabled in the read-only mode.

Defaults to false

• ### startDisabled : BooleanCKEDITOR.commandDefinition#startDisabled

Whether the command state should be set to CKEDITOR.TRISTATE_DISABLED on startup.

editorInstance.addCommand( 'unlink', {
exec: function( editor ) {
// ...
},
startDisabled: true // The command is unavailable until the selection is inside a link.
} );


Defaults to false

## Methods

• ### exec( editor, [ data ] ) → BooleanCKEDITOR.commandDefinition#exec

The function to be fired when the commend is executed.

editorInstance.addCommand( 'sample', {
exec: function( editor ) {
alert( 'Executing a command for the editor name "' + editor.name + '"!' );
}
} );


#### Parameters

editor : editor

The editor within which to run the command.

[ data ] : Object

Additional data to be used to execute the command.

#### Returns

Boolean

Whether the command has been successfully executed. Defaults to true if nothing is returned.

• ### refresh( editor, path )CKEDITOR.commandDefinition#refresh

Defined by the command definition, a function to determine the command state. It will be invoked when the editor has its states or selection changed.

Note: The function provided must be calling CKEDITOR.command.setState in all circumstances if it is intended to update the command state.

#### Parameters

editor : editor
path : elementPath