 		case "keypad7": self = .keypad7
 		case "keypad8": self = .keypad8
 		case "keypad9": self = .keypad9
-		case "return", "\r": self = .return
-		case "tab", "\t": self = .tab
-		case "space", " ": self = .space
-		case "delete": self = .delete
-		case "escape": self = .escape
-		case "command": self = .command
-		case "shift": self = .shift
-		case "capsLock": self = .capsLock
-		case "option": self = .option
-		case "control": self = .control
+		case "return", "\r", "↩︎", "⏎", "⮐": self = .return
+		case "tab", "\t", "⇥": self = .tab
+		case "space", " ", "␣": self = .space
+		case "delete", "⌫": self = .delete
+		case "escape", "⎋": self = .escape
+		case "command", "⌘", "": self = .command
+		case "shift", "⇧": self = .shift
+		case "capslock", "⇪": self = .capsLock
+		case "option", "⌥": self = .option
+		case "control", "⌃": self = .control
 		case "rightcommand": self = .rightCommand
 		case "rightshift": self = .rightShift
 		case "rightoption": self = .rightOption
 		case "rightcontrol": self = .rightControl
-		case "function": self = .function
-		case "f17": self = .f17
-		case "volumeup": self = .volumeUp
-		case "volumedown": self = .volumeDown
-		case "mute": self = .mute
-		case "f18": self = .f18
-		case "f19": self = .f19
-		case "f20": self = .f20
-		case "f5": self = .f5
-		case "f6": self = .f6
-		case "f7": self = .f7
-		case "f3": self = .f3
-		case "f8": self = .f8
-		case "f9": self = .f9
-		case "f11": self = .f11
-		case "f13": self = .f13
-		case "f16": self = .f16
-		case "f14": self = .f14
-		case "f10": self = .f10
-		case "f12": self = .f12
-		case "f15": self = .f15
-		case "help": self = .help
-		case "home": self = .home
-		case "pageup": self = .pageUp
-		case "forwarddelete": self = .forwardDelete
-		case "f4": self = .f4
-		case "end": self = .end
-		case "f2": self = .f2
-		case "pagedown": self = .pageDown
-		case "f1": self = .f1
-		case "leftarrow": self = .leftArrow
-		case "rightarrow": self = .rightArrow
-		case "downarrow": self = .downArrow
-		case "uparrow": self = .upArrow
+		case "function", "fn": self = .function
+		case "f17", "F17": self = .f17
+		case "volumeup", "🔊": self = .volumeUp
+		case "volumedown", "🔉": self = .volumeDown
+		case "mute", "🔇": self = .mute
+		case "f18", "F18": self = .f18
+		case "f19", "F19": self = .f19
+		case "f20", "F20": self = .f20
+		case "f5", "F5": self = .f5
+		case "f6", "F6": self = .f6
+		case "f7", "F7": self = .f7
+		case "f3", "F3": self = .f3
+		case "f8", "F8": self = .f8
+		case "f9", "F9": self = .f9
+		case "f11", "F11": self = .f11
+		case "f13", "F13": self = .f13
+		case "f16", "F16": self = .f16
+		case "f14", "F14": self = .f14
+		case "f10", "F10": self = .f10
+		case "f12", "F12": self = .f12
+		case "f15", "F15": self = .f15
+		case "help", "?⃝": self = .help
+		case "home", "↖": self = .home
+		case "pageup", "⇞": self = .pageUp
+		case "forwarddelete", "⌦": self = .forwardDelete
+		case "f4", "F4": self = .f4
+		case "end", "↘": self = .end
+		case "f2", "F2": self = .f2
+		case "pagedown", "⇟": self = .pageDown
+		case "f1", "F1": self = .f1
+		case "leftarrow", "←": self = .leftArrow
+		case "rightarrow", "→": self = .rightArrow
+		case "downarrow", "↓": self = .downArrow
+		case "uparrow", "↑": self = .upArrow
 		default: return nil
 		}
 	}

		case "n": self = .n
		case "m": self = .m
		case "period", ".": self = .period
		case "grave": self = .grave
		case "keypaddecimal": self = .keypadDecimal
		case "keypadmultiply": self = .keypadMultiply
		case "keypadplus": self = .keypadPlus
		case "keypadclear": self = .keypadClear
		case "keypaddivide": self = .keypadDivide
		case "keypadenter": self = .keypadEnter
		case "keypadminus": self = .keypadMinus

import Carbon

public enum Key {

    // MARK: - Letters

    case a
    case b
    case c
    case d
    case e
    case f
    case g
    case h
    case i
    case j
    case k
    case l
    case m
    case n
    case o
    case p
    case q
    case r
    case s
    case t
    case u
    case v
    case w
    case x
    case y
    case z

    // MARK: - Numbers

    case zero
    case one
    case two
    case three
    case four
    case five
    case six
    case seven
    case eight
    case nine

    // MARK: - Symbols

    case period
    case quote
    case rightBracket
    case semicolon
    case slash
    case backslash
    case comma
    case equal
    case grave // Backtick
    case leftBracket
    case minus

    // MARK: - Whitespace

    case space
    case tab
    case `return`

    // MARK: - Modifiers

    case command
    case rightCommand
    case option
    case rightOption
    case control
    case rightControl
    case shift
    case rightShift
    case function
    case capsLock

    // MARK: - Navigation

    case pageUp
    case pageDown
    case home
    case end
    case upArrow
    case rightArrow
    case downArrow
    case leftArrow

    // MARK: - Functions

    case f1
    case f2
    case f3
    case f4
    case f5
    case f6
    case f7
    case f8
    case f9
    case f10
    case f11
    case f12
    case f13
    case f14
    case f15
    case f16
    case f17
    case f18
    case f19
    case f20

    // MARK: - Keypad

    case keypad0
    case keypad1
    case keypad2
    case keypad3
    case keypad4
    case keypad5
    case keypad6
    case keypad7
    case keypad8
    case keypad9
    case keypadClear
    case keypadDecimal
    case keypadDivide
    case keypadEnter
    case keypadEquals
    case keypadMinus
    case keypadMultiply
    case keypadPlus

    // MARK: - Misc

    case escape
    case delete
    case forwardDelete
    case help
    case volumeUp
    case volumeDown
    case mute

    // MARK: - Initializers

	public init?(string: String) {
		switch string.lowercased() {
