Index: program/js/list.js
===================================================================
--- program/js/list.js	(revision 287227502a35aa895c6ec218f3ead6b8bbf27926)
+++ program/js/list.js	(revision e9b57bb8745118c2bc5302081aff8772cf6c8fee)
@@ -88,5 +88,5 @@
     // set body events
     if (this.keyboard)
-      rcube_event.add_listener({element:document, event:'keydown', object:this, method:'key_press'});
+      rcube_event.add_listener({element:document, event:'keypress', object:this, method:'key_press'});
   }
 },
@@ -558,4 +558,6 @@
     case 40:
     case 38: 
+	case 63233: // "down", in safari keypress
+	case 63232: // "up", in safari keypress
       return this.use_arrow_key(keyCode, mod_key);
       break;
@@ -577,7 +579,9 @@
 {
   var new_row;
-  if (keyCode == 40) // down arrow key pressed
+  // Safari uses the nonstandard keycodes 63232/63233 for up/down, if we're
+  // using the keypress event (but not the keydown or keyup event).
+  if (keyCode == 40 || keyCode == 63233) // down arrow key pressed
     new_row = this.get_next_row();
-  else if (keyCode == 38) // up arrow key pressed
+  else if (keyCode == 38 || keyCode == 63232) // up arrow key pressed
     new_row = this.get_prev_row();
 
