This project is part of Atuhi
The cordova.plugins.ExternalKeyboard
provides an easy way to configure keyboard shortcuts for iOS 7 devices with an external bluetooth keyboard. Currently the plugin requires a little bit of manual installation (see below).
First install the plugin proper:
cordova plugin add https://github.com/petrsimon/cordova.externalkeyboard.git
After running the command above, open the iOS project in XCode and add the following code:
replace
@interface MainViewController : CDVViewController
@end
with
#import "ExternalKeyboard.h"
@interface MainViewController : CDVViewController {
NSMutableArray *commands;
}
- (void) setKeyCommands:(NSArray*) commands;
@end
add
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void) setKeyCommands: (NSMutableArray*) cmds {
commands = cmds;
}
- (NSArray *)keyCommands {
return commands;
}
- (void) onKeyPress:(UIKeyCommand*) cmd {
NSLog(@"onKeyPress");
NSString *combo = [ExternalKeyboard getCombo:cmd];
NSLog(@"COMBO [%@]", combo);
NSString *jsStatement = [NSString stringWithFormat:@"handleKeyCommand('%@')", combo];
[self.commandDelegate evalJs:jsStatement];
}
Currently the expected format for shortcuts is a simple string with modifier keys and input keys delimited by a space and the commands delimited by a configurable string such as |
:
var commands = "ctrl s|ctrl n|meta s|meta alt j|up|shift up";
You can use arrow keys (up
, down
, left
, right
) and enter
, space
, tab
, del
either as single key commands or with combination with modifier. Please notice, that these keys will stop fullfilling their default funtion.
The meta
key stands for the Command Key (โ) on Mac. The Mac Option Key (โฅ) is represented by "alt".
Then send the commands to the plugin:
var commands = "ctrl s|ctrl n|meta s|meta alt j",
delimiter = "|";
cordova.plugins.ExternalKeyboard.setKeyCommands(commands, delimiter);
On the page or in one of your modules, create the function handleKeyCommand
like so:
window.handleKeyCommand = function(combo) {
// do something usefull
}
In AngularJS or Ionic it is quite possible to define or overwrite the handleKeyCommand
function in a controller or to send the combo to a service that will take care of it, e.g.
window.handleKeyCommand = function(combo) {
$scope.handleCombo(combo)
// or using a service
Keymap.handleShortcut(combo);
}
- iOS