diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js
index 8f434bf7e..406fd7e77 100644
--- a/resources/assets/js/controllers.js
+++ b/resources/assets/js/controllers.js
@@ -379,6 +379,15 @@ module.exports = function (ngApp, events) {
             saveDraft();
         };
 
+        // Listen to shortcuts coming via events
+        $scope.$on('editor-keydown', (event, data) => {
+            // Save shortcut (ctrl+s)
+            if (data.keyCode == 83 && (navigator.platform.match("Mac") ? data.metaKey : data.ctrlKey)) {
+                data.preventDefault();
+                saveDraft();
+            }
+        });
+
         /**
          * Discard the current draft and grab the current page
          * content from the system via an AJAX request.
diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js
index f5cf7569b..d41fdd83b 100644
--- a/resources/assets/js/directives.js
+++ b/resources/assets/js/directives.js
@@ -185,6 +185,10 @@ module.exports = function (ngApp, events) {
                         scope.mceChange(content);
                     });
 
+                    editor.on('keydown', (event) => {
+                        scope.$emit('editor-keydown', event);
+                    });
+
                     editor.on('init', (e) => {
                         scope.mceModel = editor.getContent();
                     });
@@ -305,8 +309,9 @@ module.exports = function (ngApp, events) {
                     lastScroll = now;
                 });
 
-                // Insert image shortcut
+                // Editor key-presses
                 input.keydown(event => {
+                    // Insert image shortcut
                     if (event.which === 73 && event.ctrlKey && event.shiftKey) {
                         event.preventDefault();
                         var caretPos = input[0].selectionStart;
@@ -316,7 +321,10 @@ module.exports = function (ngApp, events) {
                         input.focus();
                         input[0].selectionStart = caretPos + ("![](".length);
                         input[0].selectionEnd = caretPos + ('![](http://'.length);
+                        return;
                     }
+                    // Pass key presses to controller via event
+                    scope.$emit('editor-keydown', event);
                 });
 
                 // Insert image from image manager