diff --git a/src/nsmenu.m b/src/nsmenu.m
index d5321dcdc6..36566e9a11 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -552,9 +552,76 @@ - (void)fillWithWidgetValue: (void *)wvptr
         maxNameWidth = MAX(maxNameWidth, nameSize.width);
         if (wv->key)
           {
-            NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)];
+            NSMutableString *key =
+              [NSMutableString stringWithUTF8String: skipspc (wv->key)];
+            [key replaceOccurrencesOfString: @"<backspace>"
+                                 withString: @"⌫"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"DEL"
+                                 withString: @"⌫"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<deletechar>"
+                                 withString: @"⌦"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<return>"
+                                 withString: @"↩"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"RET"
+                                 withString: @"↩"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<left>"
+                                 withString: @"←"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<right>"
+                                 withString: @"→"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<up>"
+                                 withString: @"↑"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<down>"
+                                 withString: @"↓"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<prior>"
+                                 withString: @"⇞"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<next>"
+                                 withString: @"⇟"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<home>"
+                                 withString: @"↖"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<end>"
+                                 withString: @"↘"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<tab>"
+                                 withString: @"⇥"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"TAB"
+                                 withString: @"⇥"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
+            [key replaceOccurrencesOfString: @"<backtab>"
+                                 withString: @"⇤"
+                                    options: NSLiteralSearch
+                                      range: NSMakeRange (0, [key length])];
             NSSize keySize = [key sizeWithAttributes: font_attribs];
             maxKeyWidth = MAX(maxKeyWidth, keySize.width);
+            Lisp_Object newkey = build_string ([key UTF8String]);
+            wv->key = SSDATA (newkey);
           }
       }
 
