-- 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