diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js
index b22e7299470632fc3ab9445088b97690e6e14a53..0876ad1da01c64ea844f23ff2c93c65e17e2dd92 100644
--- a/pd/nw/pd_canvas.js
+++ b/pd/nw/pd_canvas.js
@@ -71,6 +71,14 @@ pdgui.post("flub!");
     canvas_events.search();
 }
 
+function cmd_or_ctrl_key(evt) {
+    if (process.platform === "darwin") {
+        return evt.metaKey;
+    } else {
+        return evt.ctrlKey;
+    }
+}
+
 var canvas_events = (function() {
     var name,
         state,
@@ -88,11 +96,11 @@ var canvas_events = (function() {
         events = {
             mousemove: function(evt) {
                 //pdgui.post("x: " + evt.pageX + " y: " + evt.pageY +
-                //    " modifier: " + (evt.shiftKey + (evt.ctrlKey << 1)));
+                //    " modifier: " + (evt.shiftKey + (cmd_or_ctrl_key(evt) << 1)));
                 pdgui.pdsend(name, "motion",
                     (evt.pageX + svg_view.x),
                     (evt.pageY + svg_view.y),
-                    (evt.shiftKey + (evt.ctrlKey << 1))
+                    (evt.shiftKey + (cmd_or_ctrl_key(evt) << 1))
                 );
                 evt.stopPropagation();
                 evt.preventDefault();
@@ -120,7 +128,7 @@ var canvas_events = (function() {
                 if (b === 3) { // right-click
                     mod = 8;
                 } else {
-                    mod = (evt.shiftKey + (evt.ctrlKey << 1)); 
+                    mod = (evt.shiftKey + (cmd_or_ctrl_key(evt) << 1)); 
                 }
                 pdgui.pdsend(name, "mouse",
                     (evt.pageX + svg_view.x),
@@ -179,25 +187,25 @@ var canvas_events = (function() {
                     // Which don't fire a keypress for some odd reason
 
                     case 65:
-                        if (evt.ctrlKey === true) {
+                        if (cmd_or_ctrl_key(evt)) {
                             pdgui.pdsend(name, "selectall");
                             hack = 0; // not sure what to report here...
                         }
                         break;
                     case 88:
-                        if (evt.ctrlKey === true) {
+                        if (cmd_or_ctrl_key(evt)) {
                             pdgui.pdsend(name, "cut");
                             hack = 0; // not sure what to report here...
                         }
                         break;
                     case 67:
-                        if (evt.ctrlKey === true) {
+                        if (cmd_or_ctrl_key(evt)) {
                             pdgui.pdsend(name, "copy");
                             hack = 0; // not sure what to report here...
                         }
                         break;
                     case 86:
-                        if (evt.ctrlKey === true) {
+                        if (cmd_or_ctrl_key(evt)) {
                             pdgui.pdsend(name, "paste");
                             hack = 0; // not sure what to report here...
                         }
@@ -224,7 +232,7 @@ var canvas_events = (function() {
                 // pd_shortcuts.js so we can keep them all in a central
                 // location, but that's a bigger project.
                 if (evt.charCode === 26) {
-                    if (evt.ctrlKey === true) {
+                    if (cmd_or_ctrl_key(evt)) {
                         if (evt.shiftKey === true) { // ctrl-Shift-z
                             pdgui.pdsend(name, "redo");
                         } else { // ctrl-z
@@ -245,7 +253,7 @@ var canvas_events = (function() {
                 var my_char_code = pdgui.get_char_code(evt.keyCode);
                 pdgui.gui_canvas_sendkey(name, 0, evt, my_char_code);
                 //pdgui.post("keyup time: charcode is: " + my_char_code);
-                if (evt.keyCode === 13 && evt.ctrlKey) {
+                if (evt.keyCode === 13 && cmd_or_ctrl_key(evt)) {
                     pdgui.pdsend(name, "reselect");
                 }
                 evt.stopPropagation();
@@ -289,7 +297,7 @@ var canvas_events = (function() {
                 evt.stopPropagation();    
                 //evt.preventDefault();
                 // ctrl-Enter to reselect
-                if (evt.keyCode === 13 && evt.ctrlKey) {
+                if (evt.keyCode === 13 && cmd_or_ctrl_key(evt)) {
                     canvas_events.set_obj();
                     pdgui.pdsend(name, "reselect");
                 }