The most thorough documentation I can find of how to add a new keyboard shortcut to TinyMC is at this page: http://www.lifeinsuranceonmyterms.com/other/custom-keyboard-shortcuts-for-tinymce-how-to
It involves adding this code to the main TinyMCE source file, tiny_mce_src.js (and then recompressing):
t.addShortcut([keyboard command], [shortcut name], [command name]);
Is there a way to add a shortcut without hacking the core/TinyMCE?
Update: Specifically, I want to add shortcuts to apply h2/h3/h4 or other TinyMCE button actions to selected text in TinyMCE.
Last time i added a keybord shortcut it was using jQuery.
take a look at jquery.hotkeys plugin which lets you enable keyboard shortcuts with a simple one liner:
$(document).bind('keydown', 'ctrl+a', fn);
update
if you want to check if the TinyMCE editor is active and it has a selected text then here are the functions you need:
function isTinyMCEactive(){ //check if editor is active
is_tinyMCE_active = false;
if (typeof(tinyMCE) != "undefined") {
if (tinyMCE.activeEditor == null || tinyMCE.activeEditor.isHidden() != false) {
is_tinyMCE_active = true;
}
}
return is_tinyMCE_active;
}
function tinyMCEhotkeys(tag){
if (isTinyMCEactive()){
var selected_content="";
selected_content = tinyMCE.activeEditor.selection.getContent();
if (selected_content != '' || selected_content != null){ //check if editor has selection
tinyMCE.activeEditor.execCommand("mceInsertContent", 0, '<' + tag + '>' + selected_content + '</' + tag + '>');
}
}
}
now once you have these functions the rest is easy:
$(document).bind('keydown', 'ctrl+1', tinyMCEhotkeys('h1'));
$(document).bind('keydown', 'ctrl+2', tinyMCEhotkeys('h2'));
$(document).bind('keydown', 'ctrl+3', tinyMCEhotkeys('h3'));
$(document).bind('keydown', 'ctrl+4', tinyMCEhotkeys('h4'));