diff --git a/index.html b/index.html
index 19d3117..f8cff93 100644
--- a/index.html
+++ b/index.html
@@ -114,12 +114,14 @@
- ALT-n: Toggle nicklist
- ALT-l: Focus on input bar
- - ALT-[0-9]: Focus on buffer
+ - ALT-[0-9]: Switch to buffer number N
- ALT-a: Focus on next buffer with activity
- - ALT-<: Switch to previous buffer
+ - ALT-<: Switch to previous active buffer
- ALT-g: Focus on buffer list filter
- Esc-Esc: disconnect (double-tap)
- - arrow keys: history navigation
+ - Arrow keys: history navigation
+ - Tab key: nick complete
+ - The following readline/emacs style keybindings works: Ctrl-a, Ctrl-e, Ctrl-u, Ctrl-k, Ctrl-w
diff --git a/js/glowingbear.js b/js/glowingbear.js
index e0cf16f..fcae26b 100644
--- a/js/glowingbear.js
+++ b/js/glowingbear.js
@@ -1517,12 +1517,45 @@ weechat.directive('inputBar', function() {
}
// Enter to submit, shift-enter for newline
- //
if (code == 13 && !$event.shiftKey && document.activeElement === inputNode) {
$event.preventDefault();
$scope.sendMessage();
return true;
}
+ // Some readline keybindings
+ if ($event.ctrlKey && !$event.altKey && !$event.shiftKey && document.activeElement === inputNode) {
+ // Ctrl-a
+ if (code == 65) {
+ inputNode.setSelectionRange(0, 0);
+ // Ctrl-e
+ } else if (code == 69) {
+ inputNode.setSelectionRange($scope.command.length, $scope.command.length);
+ // Ctrl-u
+ } else if (code == 85) {
+ $scope.command = $scope.command.slice(caretPos);
+ setTimeout(function() {
+ inputNode.setSelectionRange(0, 0);
+ });
+ // Ctrl-k
+ } else if (code == 75) {
+ $scope.command = $scope.command.slice(0, caretPos);
+ setTimeout(function() {
+ inputNode.setSelectionRange($scope.command.length, $scope.command.length);
+ });
+ // Ctrl-w
+ } else if (code == 87) {
+ var trimmedValue = $scope.command.slice(0, caretPos);
+ var lastSpace = trimmedValue.lastIndexOf(' ') + 1;
+ $scope.command = $scope.command.slice(0, lastSpace) + $scope.command.slice(caretPos, $scope.command.length);
+ setTimeout(function() {
+ inputNode.setSelectionRange(lastSpace, lastSpace);
+ });
+ } else {
+ return false;
+ }
+ $event.preventDefault();
+ return true;
+ }
};
}
};