-- parse Lua modified keymap.clj into Markdown table local keymaps = { macos = { ["A"] = "add", ["Alt+Backspace"] = "delete-prev-word", ["Alt+Delete"] = "delete-next-word", ["Alt+Down"] = "end-of-line", ["Alt+Down"] = "move-down", ["Alt+Left"] = "prev-word", ["Alt+F9"] = "edit-breakpoint", ["Alt+Meta+E"] = "select-next-occurrence", ["Alt+Meta+F"] = "replace-text", ["Alt+Meta+G"] = "replace-next", ["Alt+Right"] = "next-word", ["Alt+Up"] = "beginning-of-line", ["Alt+Up"] = "move-up", ["Backspace"] = "delete-backward", ["Ctrl+A"] = "beginning-of-line", ["Ctrl+D"] = "delete-line", ["Ctrl+E"] = "end-of-line", ["Ctrl+I"] = "reindent", ["Ctrl+K"] = "delete-to-end-of-line", ["Ctrl+Meta+H"] = "toggle-component-guides", ["Ctrl+R"] = "open-recent-file", ["Ctrl+Space"] = "proposals", ["Delete"] = "delete", ["Down"] = "down", ["E"] = "rotate-tool", ["End"] = "end-of-line", ["Enter"] = "enter", ["Esc"] = "escape", ["F"] = "frame-selection", ["F1"] = "documentation", ["F10"] = "step-over", ["F11"] = "step-into", ["F2"] = "rename", ["F5"] = "start-debugger", ["F5"] = "continue", ["F6"] = "toggle-pane-left", ["F7"] = "toggle-pane-bottom", ["F8"] = "toggle-pane-right", ["F9"] = "toggle-breakpoint", ["F12"] = "goto-definition", ["Home"] = "beginning-of-line-text", ["Left"] = "left", ["Meta+'+'"] = "zoom-in", ["Meta+'-'"] = "zoom-out", ["Meta+A"] = "select-all", ["Meta+B"] = "build", ["Meta+C"] = "copy", ["Meta+Comma"] = "preferences", ["Meta+D"] = "select-next-occurrence", ["Meta+Delete"] = "delete-to-end-of-line", ["Meta+Down"] = "end-of-file", ["Meta+E"] = "hide-toggle-selected", ["Meta+F"] = "filter-form", ["Meta+F"] = "find-text", ["Meta+G"] = "find-next", ["Meta+L"] = "goto-line", ["Meta+Left"] = "beginning-of-line-text", ["Meta+N"] = "new-file", ["Meta+O"] = "open", ["Meta+P"] = "open-asset", ["Meta+Q"] = "quit", ["Meta+R"] = "hot-reload", ["Meta+Right"] = "end-of-line", ["Meta+S"] = "save-all", ["Meta+'/'"] = "toggle-comment", ["Meta+T"] = "scene-stop", ["Meta+U"] = "rebundle", ["Meta+J"] = "close-engine", ["Meta+Up"] = "beginning-of-file", ["Meta+V"] = "paste", ["Meta+W"] = "close", ["Meta+X"] = "cut", ["Meta+Z"] = "undo", ["Page Down"] = "page-down", ["Page Up"] = "page-up", ["Period"] = "realign-camera", ["R"] = "scale-tool", ["Right"] = "right", ["Shift+A"] = "add-secondary", ["Shift+Alt+Down"] = "select-end-of-line", ["Shift+Alt+Left"] = "select-prev-word", ["Shift+Alt+Right"] = "select-next-word", ["Shift+Alt+Up"] = "select-beginning-of-line", ["Shift+Backspace"] = "delete-backward", ["Shift+Ctrl+A"] = "select-beginning-of-line", ["Shift+Ctrl+E"] = "select-end-of-line", ["Shift+Ctrl+Left"] = "select-prev-word", ["Shift+Ctrl+Right"] = "select-next-word", ["Shift+Down"] = "down-major", ["Shift+Down"] = "select-down", ["Shift+E"] = "erase-tool", ["Shift+End"] = "select-end-of-line", ["Shift+F11"] = "step-out", ["Shift+F12"] = "find-references", ["Shift+Home"] = "select-beginning-of-line-text", ["Shift+Left"] = "left-major", ["Shift+Left"] = "select-left", ["Shift+Meta+B"] = "rebuild", ["Shift+Meta+Delete"] = "delete-to-end-of-line", ["Shift+Meta+Down"] = "select-end-of-file", ["Shift+Meta+E"] = "show-last-hidden", ["Shift+Meta+F"] = "search-in-files", ["Shift+Meta+G"] = "find-prev", ["Shift+Meta+I"] = "toggle-visibility-filters", ["Shift+Meta+L"] = "split-selection-into-lines", ["Shift+Meta+Left"] = "select-beginning-of-line-text", ["Shift+Meta+R"] = "open-asset", ["Shift+Meta+Right"] = "select-end-of-line", ["Shift+Meta+T"] = "reopen-recent-file", ["Shift+Meta+Up"] = "select-beginning-of-file", ["Shift+Meta+W"] = "close-all", ["Shift+Meta+Y"] = "async-reload", ["Shift+Meta+Z"] = "redo", ["Shift+Page Down"] = "select-page-down", ["Shift+Page Up"] = "select-page-up", ["Shift+Right"] = "right-major", ["Shift+Right"] = "select-right", ["Shift+Tab"] = "backwards-tab-trigger", ["Shift+Up"] = "select-up", ["Shift+Up"] = "up-major", ["Space"] = "scene-play", ["Space"] = "show-palette", ["Tab"] = "tab", ["Up"] = "up", ["W"] = "move-tool", ["X"] = "flip-brush-horizontally", ["Y"] = "flip-brush-vertically", ["Z"] = "rotate-brush-90-degrees]", }, win32 = { ["A"] = "add", ["Alt+Down"] = "move-down", ["Alt+F9"] = "edit-breakpoint", ["Alt+R"] = "open-recent-file", ["Alt+Up"] = "move-up", ["Backspace"] = "delete-backward", ["Ctrl+'+'"] = "zoom-in", ["Ctrl+'-'"] = "zoom-out", ["Ctrl+A"] = "select-all", ["Ctrl+B"] = "build", ["Ctrl+Backspace"] = "delete-prev-word", ["Ctrl+C"] = "copy", ["Ctrl+Comma"] = "preferences", ["Ctrl+D"] = "select-next-occurrence", ["Ctrl+Delete"] = "delete-next-word", ["Ctrl+E"] = "hide-toggle-selected", ["Ctrl+End"] = "end-of-file", ["Ctrl+F"] = "filter-form", ["Ctrl+F"] = "find-text", ["Ctrl+G"] = "find-next", ["Ctrl+H"] = "replace-text", ["Ctrl+H"] = "toggle-component-guides", ["Ctrl+Home"] = "beginning-of-file", ["Ctrl+I"] = "reindent", ["Ctrl+K"] = "delete-to-end-of-line", ["Ctrl+L"] = "goto-line", ["Ctrl+Left"] = "prev-word", ["Ctrl+N"] = "new-file", ["Ctrl+O"] = "open", ["Ctrl+P"] = "open-asset", ["Ctrl+Q"] = "quit", ["Ctrl+R"] = "hot-reload", ["Ctrl+Right"] = "next-word", ["Ctrl+S"] = "save-all", ["Ctrl+'/'"] = "toggle-comment", ["Ctrl+Space"] = "proposals", ["Ctrl+T"] = "scene-stop", ["Ctrl+U"] = "rebundle", ["Ctrl+J"] = "close-engine", ["Ctrl+V"] = "paste", ["Ctrl+W"] = "close", ["Ctrl+X"] = "cut", ["Ctrl+Z"] = "undo", ["Delete"] = "delete", ["Down"] = "down", ["E"] = "rotate-tool", ["End"] = "end-of-line", ["Enter"] = "enter", ["Esc"] = "escape", ["F"] = "frame-selection", ["F1"] = "documentation", ["F10"] = "step-over", ["F11"] = "step-into", ["F2"] = "rename", ["F5"] = "start-debugger", ["F5"] = "continue", ["F6"] = "toggle-pane-left", ["F7"] = "toggle-pane-bottom", ["F8"] = "toggle-pane-right", ["F9"] = "toggle-breakpoint", ["F12"] = "goto-definition", ["Home"] = "beginning-of-line-text", ["Left"] = "left", ["Page Down"] = "page-down", ["Page Up"] = "page-up", ["Period"] = "realign-camera", ["R"] = "scale-tool", ["Right"] = "right", ["Shift+A"] = "add-secondary", ["Shift+Backspace"] = "delete-backward", ["Shift+Ctrl+B"] = "rebuild", ["Shift+Ctrl+Delete"] = "delete-to-end-of-line", ["Shift+Ctrl+E"] = "show-last-hidden", ["Shift+Ctrl+End"] = "select-end-of-file", ["Shift+Ctrl+F"] = "search-in-files", ["Shift+Ctrl+G"] = "find-prev", ["Shift+Ctrl+H"] = "replace-next", ["Shift+Ctrl+Home"] = "select-beginning-of-file", ["Shift+Ctrl+I"] = "toggle-visibility-filters", ["Shift+Ctrl+L"] = "split-selection-into-lines", ["Shift+Ctrl+Left"] = "select-prev-word", ["Shift+Ctrl+R"] = "open-asset", ["Shift+Ctrl+Right"] = "select-next-word", ["Shift+Ctrl+T"] = "reopen-recent-file", ["Shift+Ctrl+W"] = "close-all", ["Shift+Ctrl+Y"] = "async-reload", ["Shift+Ctrl+Z"] = "redo", ["Shift+Down"] = "down-major", ["Shift+Down"] = "select-down", ["Shift+E"] = "erase-tool", ["Shift+End"] = "select-end-of-line", ["Shift+F11"] = "step-out", ["Shift+F12"] = "find-references", ["Shift+F5"] = "stop-debugger", ["Shift+Home"] = "select-beginning-of-line-text", ["Shift+Left"] = "left-major", ["Shift+Left"] = "select-left", ["Shift+Page Down"] = "select-page-down", ["Shift+Page Up"] = "select-page-up", ["Shift+Right"] = "right-major", ["Shift+Right"] = "select-right", ["Shift+Tab"] = "backwards-tab-trigger", ["Shift+Up"] = "select-up", ["Shift+Up"] = "up-major", ["Space"] = "scene-play", ["Space"] = "show-palette", ["Tab"] = "tab", ["Up"] = "up", ["W"] = "move-tool", ["X"] = "flip-brush-horizontally", ["Y"] = "flip-brush-vertically", ["Z"] = "rotate-brush-90-degrees]", }, linux = { ["A"] = "add", ["Alt+Down"] = "move-down", ["Alt+F9"] = "edit-breakpoint", ["Alt+R"] = "open-recent-file", ["Alt+Up"] = "move-up", ["Backspace"] = "delete-backward", ["Ctrl+'+'"] = "zoom-in", ["Ctrl+'-'"] = "zoom-out", ["Ctrl+A"] = "select-all", ["Ctrl+B"] = "build", ["Ctrl+Backspace"] = "delete-prev-word", ["Ctrl+C"] = "copy", ["Ctrl+Comma"] = "preferences", ["Ctrl+D"] = "select-next-occurrence", ["Ctrl+Delete"] = "delete-next-word", ["Ctrl+E"] = "hide-toggle-selected", ["Ctrl+End"] = "end-of-file", ["Ctrl+F"] = "filter-form", ["Ctrl+F"] = "find-text", ["Ctrl+G"] = "find-next", ["Ctrl+H"] = "replace-text", ["Ctrl+H"] = "toggle-component-guides", ["Ctrl+Home"] = "beginning-of-file", ["Ctrl+I"] = "reindent", ["Ctrl+K"] = "delete-to-end-of-line", ["Ctrl+L"] = "goto-line", ["Ctrl+Left"] = "prev-word", ["Ctrl+N"] = "new-file", ["Ctrl+O"] = "open", ["Ctrl+P"] = "open-asset", ["Ctrl+Q"] = "quit", ["Ctrl+R"] = "hot-reload", ["Ctrl+Right"] = "next-word", ["Ctrl+S"] = "save-all", ["Ctrl+'/'"] = "toggle-comment", ["Ctrl+Space"] = "proposals", ["Ctrl+T"] = "scene-stop", ["Ctrl+U"] = "rebundle", ["Ctrl+J"] = "close-engine", ["Ctrl+V"] = "paste", ["Ctrl+W"] = "close", ["Ctrl+X"] = "cut", ["Ctrl+Z"] = "undo", ["Delete"] = "delete", ["Down"] = "down", ["E"] = "rotate-tool", ["End"] = "end-of-line", ["Enter"] = "enter", ["Esc"] = "escape", ["F"] = "frame-selection", ["F1"] = "documentation", ["F10"] = "step-over", ["F11"] = "step-into", ["F2"] = "rename", ["F5"] = "start-debugger", ["F5"] = "continue", ["F6"] = "toggle-pane-left", ["F7"] = "toggle-pane-bottom", ["F8"] = "toggle-pane-right", ["F9"] = "toggle-breakpoint", ["F12"] = "goto-definition", ["Home"] = "beginning-of-line-text", ["Left"] = "left", ["Page Down"] = "page-down", ["Page Up"] = "page-up", ["Period"] = "realign-camera", ["R"] = "scale-tool", ["Right"] = "right", ["Shift+A"] = "add-secondary", ["Shift+Backspace"] = "delete-backward", ["Shift+Ctrl+B"] = "rebuild", ["Shift+Ctrl+Delete"] = "delete-to-end-of-line", ["Shift+Ctrl+E"] = "show-last-hidden", ["Shift+Ctrl+End"] = "select-end-of-file", ["Shift+Ctrl+F"] = "search-in-files", ["Shift+Ctrl+G"] = "find-prev", ["Shift+Ctrl+H"] = "replace-next", ["Shift+Ctrl+Home"] = "select-beginning-of-file", ["Shift+Ctrl+I"] = "toggle-visibility-filters", ["Shift+Ctrl+L"] = "split-selection-into-lines", ["Shift+Ctrl+Left"] = "select-prev-word", ["Shift+Ctrl+R"] = "open-asset", ["Shift+Ctrl+Right"] = "select-next-word", ["Shift+Ctrl+T"] = "reopen-recent-file", ["Shift+Ctrl+W"] = "close-all", ["Shift+Ctrl+Y"] = "async-reload", ["Shift+Ctrl+Z"] = "redo", ["Shift+Down"] = "down-major", ["Shift+Down"] = "select-down", ["Shift+E"] = "erase-tool", ["Shift+End"] = "select-end-of-line", ["Shift+F11"] = "step-out", ["Shift+F12"] = "find-references", ["Shift+F5"] = "stop-debugger", ["Shift+Home"] = "select-beginning-of-line-text", ["Shift+Left"] = "left-major", ["Shift+Left"] = "select-left", ["Shift+Page Down"] = "select-page-down", ["Shift+Page Up"] = "select-page-up", ["Shift+Right"] = "right-major", ["Shift+Right"] = "select-right", ["Shift+Tab"] = "backwards-tab-trigger", ["Shift+Up"] = "select-up", ["Shift+Up"] = "up-major", ["Space"] = "scene-play", ["Space"] = "show-palette", ["Tab"] = "tab", ["Up"] = "up", ["W"] = "move-tool", ["X"] = "flip-brush-horizontally", ["Y"] = "flip-brush-vertically", ["Z"] = "rotate-brush-90-degrees", } } local function fix_binding(binding) if not binding then return "" end binding = binding:gsub("Meta", "Cmd") binding = "" .. binding .. "" binding = binding:gsub("+", "+") return binding end local commands = {} for os,keymap in pairs(keymaps) do for keybinding,command in pairs(keymap) do commands[command] = commands[command] or {} commands[command][os] = keybinding end end local sorted_commands = {} for command,bindings in pairs(commands) do bindings.command = command sorted_commands[#sorted_commands + 1] = bindings end table.sort(sorted_commands, function(a, b) return a.command < b.command end) print("| Command | Windows | macOS | Linux |") print("|---------|---------|-------|-------|") for _,bindings in ipairs(sorted_commands) do local command = bindings.command command = command:gsub("-", " ") command = command:sub(1,1):upper() .. command:sub(2) local win32 = fix_binding(bindings.win32) local macos = fix_binding(bindings.macos) local linux = fix_binding(bindings.linux) print(("| %s | %s | %s | %s |"):format(command, win32, macos, linux)) end