diff --git a/index.html b/index.html index 19d3117..f8cff93 100644 --- a/index.html +++ b/index.html @@ -114,12 +114,14 @@ 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; + } }; } };