sublimehq / sublime_text

Issue tracker for Sublime Text
https://www.sublimetext.com
807 stars 39 forks source link

All commands available to the user in the Command Palette #1844

Open ghost opened 7 years ago

ghost commented 7 years ago

Summary

Automatically register all internal commands in the Command Palette.

Expected behavior

Call the Command Palette and be able to browse all available internal commands.

All ST's internal commands should be automatically registered and updated in the Command Palette. For example, update_check is registered in some part of ST's code. So, why the currently available Palette commands are cherry picked and not be made to automatically pick up all internal registered commands?

Actual behavior

Call the Command Palette and only a subset of commands is available.

Missing Palette Commands is a workaround. It adds the missing commands manually but if ST removes or adds a new command in the future, this package will have to be manually updated.

ST already does the right thing on third-party packages which declare a .sublime-commands file, automatically registering it in the Command Palette. If I add/remove a command to a specific .sublime-commands file, it will auto update in the Command Palette.

Steps to reproduce

N/A

Environment

keith-hall commented 7 years ago

Some commands only make sense in combination with specific parameters, so I think it makes sense that internal commands are not "automatically" exposed in the command palette. But there could be a case for the Default package including more commands in it's Default.sublime-commands file. I guess this just moves the work from the contributors of the Missing Palette Commands package you mentioned to the ST devs, but it could make sense as only the ST devs know when they add or remove commands, and whether they should be exposed in the command palette.

ghost commented 7 years ago

Some commands only make sense in combination with specific parameters, so I think it makes sense that internal commands are not "automatically" exposed in the command palette.

Yes, I might be unaware of all internal ST's commands. Correcting myself, I actually meant all commands that are available to the user (through the menus and default keybindings file).

I guess this just moves the work from the contributors of the Missing Palette Commands package you mentioned to the ST devs, but it could make sense as only the ST devs know when they add or remove commands, and whether they should be exposed in the command palette.

Exactly, keeping it more up-to-date.

Furthermore, the Command Palette is a good cheatsheet to remind us of forgotten keybings.

deathaxe commented 7 years ago

Thanks @megadr01d for pointing to Missing Palette Commands .

I don't like the messy main menu, too, and love to do everything with keybindings or command pallet. Therefore I was looking for many missing commands in the past, but never found something like the Missing Commands package.

I'd really love to see all available commands as part of the command pallet, too.

But I agree with @keith-hall. All the commands should be added to the Default.sublime-commands

keith-hall commented 7 years ago

Maybe it should be automatic that every menu item be added to the command palette if not already there? For example, this would help when people want package settings available from the command palette, but the author only added menu entries.

ghost commented 7 years ago

Maybe it should be automatic that every menu item be added to the command palette if not already there? For example, this would help when people want package settings available from the command palette, but the author only added menu entries.

So, why the currently available Palette commands are cherry picked and not be made to automatically pick up all internal registered commands?

Exactly my request! If a command (ST's internal or package) is added/removed from the menu, the Command Palette would update accordingly. Even the Help > Documentation menu, just as an example.

Another example is View > Ruler> .... It's not even in Missing Palette Commands. I just had to add it as:

{ "command": "set_setting", "args": {"setting": "rulers", "value": []} , "caption": "Ruler: None" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [70]} , "caption": "Ruler: 70" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [72]} , "caption": "Ruler: 72" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [78]} , "caption": "Ruler: 78" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [80]} , "caption": "Ruler: 80" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [100]} , "caption": "Ruler: 100" },
{ "command": "set_setting", "args": {"setting": "rulers", "value": [120]} , "caption": "Ruler: 120" },

This shouldn't be needed. If it's in the menu, it's available to the user. If it's available to the user it should be accessible mouse-free.

ghost commented 7 years ago

BTW, if you're on macOS, there's a built-in feature to kind of workaround this. it's actually an accessibility feature and works, although it's a bit clunky.

Just set a key combo for System Preferences > Keyboard > Shortcuts > App Shortcuts > All Applications > Show Help menu.

Then, in any app, hit that combo and type any command which is available through the app menu (the menus will expand/collapse as requested, hence the clunky part).

But of course the Command Palette is much better and available in all platforms.

rwols commented 7 years ago

I agree that any command in the menu should automatically also be in the command palette. However, the names are usually a bit different. For instance, it's usually the case that plugins prefix their commands in the command palette with their name. e.g.

Package Control: Do This
Package Control: Do That

While in the menu it's only

Do This
Do That

How would you solve this? Note that a plugin may place its command in the menu literally anywhere, not just in a submenu with the plugin's name.

keith-hall commented 7 years ago

Just determine uniqueness based on the command and it's args rather than the caption of the command palette or menu entry.

deathaxe commented 7 years ago

this would help when people want package settings available from the command palette, but the author only added menu entries

I guess this is a separate issue, but I honestly find approaches like https://packagecontrol.io/packages/Side-by-Side%20Settings or https://packagecontrol.io/packages/ReadmePlease which provide a common method to gain access to all packages settings files and readme files best. The need for each package to create a menu item and/or command pallet entry to provide access to settings, readme, changelog, issues, etc. is quite ugly and doesn't help introducing common ways to handle all of that.

A package provides a *.sublime-settings which needs to be reachable by command pallet and main menu automatically or it does not have one. Same with readme.

deathaxe commented 7 years ago

Missing Packages seems to miss some recent/useful entries. Therefore I created a file with all commands from Default package, Missing Packages and some additions, which I placed into another "Default" package in my Packages folder to override everything.

see: https://github.com/deathaxe/sublime-commands

It does not provide any automatism but may be a source to pick some commands.

Remarks:

ghost commented 7 years ago

It does not provide any automatism but may be a source to pick some commands.

Thanks for the effort, I'm actually using it now. Anyway, I had to rename commands back to reflect the name that's in the menus, and that's why automatism would still be preferable.

deathaxe commented 7 years ago

I renamed some commands just because of my personal preferences and the fact I don't use menu at all if not required due to missing alternative.

Naming is a big deal. With "View" in mind it is a standard to be used for visual settings in windows main menus, while a view is also describes the text area. So the double usage may be misleading sometimes. As @wbond introduced "UI: " prefix for "Select Color Scheme" and "Select Theme" commands which apply globally, I had in mind to prefix all commands with global results like that.

But as I said, this might be personal taste.

ghost commented 6 years ago

Just a ping to direct the subscribers' attention to @deathaxe's effort. I've been using the menus less and less because of him.

evandrocoan commented 5 years ago

For indexing GitHub search:

  1. build
  2. clone_file_to_new_group
  3. close
  4. close_folder_list
  5. close_pane
  6. close_window
  7. copy
  8. cut
  9. decrease_font_size
  10. delete_to_mark
  11. delete_word
  12. detect_indentation
  13. duplicate_line
  14. edit_package_settings
  15. exit
  16. expand_selection
  17. expand_selection_to_paragraph
  18. find_all_under
  19. find_next
  20. find_prev
  21. find_under
  22. find_under_expand
  23. find_under_expand_skip
  24. focus_group
  25. focus_neighboring_group
  26. fold
  27. fold_all
  28. fold_by_level
  29. goto_definition
  30. goto_reference
  31. goto_symbol_in_project
  32. increase_font_size
  33. indent
  34. invert_selection
  35. join_lines
  36. jump_back
  37. jump_forward
  38. move_to
  39. move_to_group
  40. move_to_neighboring_group
  41. new_file
  42. new_pane
  43. new_plugin
  44. new_snippet
  45. new_syntax
  46. new_window
  47. new_window_for_project
  48. next_misspelling
  49. next_modification
  50. next_view
  51. next_view_in_stack
  52. open_file_settings
  53. paste
  54. paste_and_indent
  55. paste_from_history
  56. prev_misspelling
  57. prev_modification
  58. prev_view
  59. prev_view_in_stack
  60. prompt_open_file
  61. prompt_open_folder
  62. prompt_open_project_or_workspace
  63. prompt_save_as
  64. prompt_select_workspace
  65. prompt_switch_project_or_workspace
  66. redo_or_repeat
  67. reopen_encoding
  68. reopen_last_file
  69. replace_next
  70. reset_font_size
  71. reveal_in_side_bar
  72. run_macro
  73. run_macro_file
  74. save
  75. save_encoding
  76. save_macro
  77. save_workspace_as
  78. select_all
  79. select_bookmark
  80. select_lines
  81. select_to_mark
  82. set_encoding
  83. set_layout
  84. set_line_ending
  85. set_line_endings
  86. set_mark
  87. set_setting
  88. show_at_center
  89. show_overlay
  90. show_panel
  91. show_scope_name
  92. single_selection
  93. slurp_find_string
  94. slurp_replace_string
  95. soft_redo
  96. soft_undo
  97. split_selection_into_lines
  98. swap_line_down
  99. swap_line_up
  100. swap_with_mark
  101. toggle_distraction_free
  102. toggle_full_screen
  103. toggle_log_built_systems
  104. toggle_log_commands
  105. toggle_log_indexing
  106. toggle_log_input
  107. toggle_log_result_regex
  108. toggle_menubar
  109. toggle_record_macro
  110. undo
  111. unfold
  112. unindent
  113. update_check
  114. yank

Sources:

  1. https://github.com/deathaxe/sublime-commands/blob/master/Default.sublime-commands
  2. https://github.com/fjl/Sublime-Missing-Palette-Commands/blob/st3/Missing.sublime-commands
deathaxe commented 5 years ago

Just a ping to direct the subscribers' attention to @deathaxe's effort. I've been using the menus less and less because of him.

I'd prefer a way to be able to completely disable it. Pressing Alt key keeps displaying it, which is good to bring it up, but is annoying sometimes when working with key combos.

ghost commented 5 years ago

I'd prefer a way to be able to completely disable it. Pressing Alt key keeps displaying it, which is good to bring it up, but is annoying sometimes when working with key combos.

This is a Windows-only issue (accessibility feature, actually) which I gladly don't suffer from, since I'm on OS X. After a bit of research, tho, here are a couple of possible 3rd party solutions, most involving using AutoHotkey, the "Windows version" of Karabiner.

evandrocoan commented 5 years ago

I have bound a key bind to show/hide the menu bar:

{ "keys": ["ctrl+k", "ctrl+m"], "command": "toggle_menu" },

And usually work with him hidden. May be I should add allow it to auto-hide itself.

but is annoying sometimes when working with key combos.

Yeah! Half the time I am trying to hit a Alt keybind combo, but nothing happens because the menu is hooked with some empty Alt key press.

Then, I just researched and found this script to work 100%. No Alt key ever anymore.

Alt::
KeyWait, Alt
return

LAlt Up::
if (A_PriorKey = "Alt")
    return
return

If you prefer too, you can also restrict this solution to Sublime Text only:

#IfWinActive ahk_exe sublime_text.exe
    Alt::
    KeyWait, Alt
    return

    LAlt Up::
    if (A_PriorKey = "Alt")
        return
    return
#IfWinActive
  1. https://www.autohotkey.com/boards/viewtopic.php?p=248473#p248473
UltraInstinct05 commented 3 years ago

Here's the current diff between the Default.sublime-commands file of 4093 & 4094 (Since 4094 added a bunch more commands to the command palette).

```diff diff --git a/./4093/Default.sublime-commands b/./4094/Default.sublime-commands index 83a5107..4054fb0 100644 --- a/./4093/Default.sublime-commands +++ b/./4094/Default.sublime-commands @@ -1,51 +1,32 @@ [ - { - "caption": "Rename File", - "command": "rename_file", - }, - { - "caption": "Arithmetic", - "command": "arithmetic", - }, - { - "caption": "View Package File", - "command": "view_resource", - }, + { "caption": "Rename File", "command": "rename_file" }, - { - "caption": "Word Wrap: Toggle", - "command": "toggle_setting", - "args": {"setting": "word_wrap"} - }, - { - "caption": "Convert Case: Upper Case", - "command": "upper_case" - }, - { - "caption": "Convert Case: Lower Case", - "command": "lower_case" - }, - { - "caption": "Convert Case: Title Case", - "command": "title_case" - }, - { - "caption": "Convert Case: Swap Case", - "command": "swap_case" - }, + { "caption": "Arithmetic", "command": "arithmetic" }, + + { "caption": "Wrap at Ruler", "command": "wrap_lines" }, + + { "caption": "Word Wrap: Toggle", "command": "toggle_setting", "args": {"setting": "word_wrap"} }, + + { "caption": "Convert Case: Title Case", "command": "title_case" }, + { "caption": "Convert Case: Upper Case", "command": "upper_case" }, + { "caption": "Convert Case: Lower Case", "command": "lower_case" }, + { "caption": "Convert Case: Swap Case", "command": "swap_case" }, - { "command": "toggle_comment", "args": {"block": false}, "caption": "Toggle Comment" }, - { "command": "toggle_comment", "args": {"block": true}, "caption": "Toggle Block Comment" }, + { "caption": "Toggle Comment", "command": "toggle_comment", "args": {"block": false} }, + { "caption": "Toggle Block Comment", "command": "toggle_comment", "args": {"block": true} }, - { "command": "toggle_bookmark", "caption": "Bookmarks: Toggle" }, - { "command": "next_bookmark", "caption": "Bookmarks: Select Next" }, - { "command": "prev_bookmark", "caption": "Bookmarks: Select Previous" }, - { "command": "clear_bookmarks", "caption": "Bookmarks: Clear All" }, - { "command": "select_all_bookmarks", "caption": "Bookmarks: Select All" }, + { "caption": "Bookmarks: Toggle", "command": "toggle_bookmark" }, + { "caption": "Bookmarks: Select Next", "command": "next_bookmark" }, + { "caption": "Bookmarks: Select Previous", "command": "prev_bookmark" }, + { "caption": "Bookmarks: Clear All", "command": "clear_bookmarks" }, + { "caption": "Bookmarks: Select All", "command": "select_all_bookmarks" }, + + { "caption": "Jump to Matching Bracket", "command": "move_to", "args": {"to": "brackets"} }, { "caption": "Indentation: Convert to Tabs", "command": "unexpand_tabs", "args": {"set_translate_tabs": true} }, { "caption": "Indentation: Convert to Spaces", "command": "expand_tabs", "args": {"set_translate_tabs": true} }, { "caption": "Indentation: Reindent Lines", "command": "reindent", "args": {"single_line": false} }, + { "caption": "Indentation: Detect", "command": "detect_indentation" }, { "caption": "View: Toggle Side Bar", "command": "toggle_side_bar" }, { "caption": "View: Toggle Open Files in Side Bar", "command": "toggle_show_open_files" }, @@ -53,6 +34,8 @@ { "caption": "View: Toggle Tabs", "command": "toggle_tabs" }, { "caption": "View: Toggle Status Bar", "command": "toggle_status_bar" }, { "caption": "View: Toggle Menu", "command": "toggle_menu" }, + { "caption": "View: Toggle Full Screen", "command": "toggle_full_screen" }, + { "caption": "View: Toggle Distraction Free", "command": "toggle_distraction_free" }, { "caption": "Project: Save As", "command": "save_project_and_workspace_as" }, { "caption": "Project: Close", "command": "close_workspace" }, @@ -60,6 +43,9 @@ { "caption": "Project: Refresh Folders", "command": "refresh_folder_list" }, { "caption": "Project: Edit Project", "command": "open_file", "args": {"file": "${project}"} }, + { "caption": "View Package File", "command": "view_resource" }, + + { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }, { "caption": "Preferences: Settings", "command": "edit_settings", "args": @@ -69,9 +55,14 @@ } }, { "caption": "Preferences: Settings – Syntax Specific", "command": "edit_syntax_settings" }, - { "caption": "Install Package Control", "command": "install_package_control" }, - { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }, - + { + "caption": "Preferences: Settings – Distraction Free", + "command": "edit_settings", "args": + { + "base_file": "${packages}/Default/Distraction Free.sublime-settings", + "default": "{\n\t$0\n}\n" + } + }, { "caption": "Preferences: Key Bindings", "command": "edit_settings", "args": @@ -81,19 +72,17 @@ } }, - { - "caption": "UI: Select Color Scheme", - "command": "select_color_scheme" - }, - { - "caption": "UI: Select Theme", - "command": "select_theme" - }, + { "caption": "Install Package Control", "command": "install_package_control" }, + + { "caption": "UI: Select Color Scheme", "command": "select_color_scheme" }, + { "caption": "UI: Select Theme", "command": "select_theme" }, { "caption": "File: Save All", "command": "save_all" }, { "caption": "File: Revert", "command": "revert" }, { "caption": "File: New View into File", "command": "clone_file" }, + { "caption": "File: Split View", "command": "clone_file", "args": {"add_to_selection": true} }, { "caption": "File: Close All", "command": "close_all" }, + { "caption": "File: Print", "command": "html_print" }, { "caption": "Sublime Merge: Open Repository", "command": "sublime_merge_open_repo" }, { "caption": "Sublime Merge: File History", "command": "sublime_merge_file_history" }, @@ -108,6 +97,24 @@ { "caption": "Sort Lines", "command": "sort_lines", "args": {"case_sensitive": false} }, { "caption": "Sort Lines (Case Sensitive)", "command": "sort_lines", "args": {"case_sensitive": true} }, + { "caption": "Selection: Split into Lines", "command": "split_selection_into_lines" }, + { "caption": "Selection: Select All", "command": "select_all" }, + { "caption": "Selection: Expand", "command": "expand_selection", "args": {"to": "smart"} }, + { "caption": "Selection: Expand to Line", "command": "expand_selection", "args": {"to": "line"} }, + { "caption": "Selection: Expand to Word", "command": "find_under_expand" }, + { "caption": "Selection: Expand to Paragraph", "command": "expand_selection_to_paragraph" }, + { "caption": "Selection: Expand to Scope", "command": "expand_selection", "args": {"to": "scope"} }, + { "caption": "Selection: Expand to Brackets", "command": "expand_selection", "args": {"to": "brackets"} }, + { "caption": "Selection: Expand to Indentation", "command": "expand_selection", "args": {"to": "indentation"} }, + { "caption": "Selection: Add Previous Line", "command": "select_lines", "args": {"forward": false} }, + { "caption": "Selection: Add Next Line", "command": "select_lines", "args": {"forward": true} }, + + { "caption": "History: Revert Hunk", "command": "revert_hunk" }, + { "caption": "History: Revert Modification", "command": "revert_modification" }, + { "caption": "History: Next Modification", "command": "next_modification" }, + { "caption": "History: Previous Modification", "command": "prev_modification" }, + { "caption": "History: Toggle Inline Diff", "command": "toggle_inline_diff" }, + { "caption": "Permute Lines: Reverse", "command": "permute_lines", "args": {"operation": "reverse"} }, { "caption": "Permute Lines: Unique", "command": "permute_lines", "args": {"operation": "unique"} }, { "caption": "Permute Lines: Shuffle", "command": "permute_lines", "args": {"operation": "shuffle"} }, @@ -118,6 +125,9 @@ { "caption": "Permute Selections: Unique", "command": "permute_selection", "args": {"operation": "unique"} }, { "caption": "Permute Selections: Shuffle", "command": "permute_selection", "args": {"operation": "shuffle"} }, + { "caption": "Code Folding: Fold", "command": "fold" }, + { "caption": "Code Folding: Fold All", "command": "fold_by_level", "args": {"level": 1} }, + { "caption": "Code Folding: Unfold", "command": "unfold" }, { "caption": "Code Folding: Unfold All", "command": "unfold_all" }, { "caption": "Code Folding: Fold Tag Attributes", "command": "fold_tag_attributes" }, @@ -127,7 +137,9 @@ { "caption": "Plugin Development: Convert Syntax to .sublime-syntax", "command": "convert_syntax" }, { "caption": "Plugin Development: Convert Color Scheme to .sublime-color-scheme", "command": "convert_color_scheme" }, - { "caption": "About", "command": "show_about_window" }, - { "caption": "Changelog", "command": "show_changelog" }, - { "caption": "Indexing Status", "command": "show_progress_window" }, + { "caption": "Help: Documentation", "command": "open_url", "args": {"url": "http://www.sublimetext.com/docs/3/"} }, + { "caption": "Help: Indexing Status", "command": "show_progress_window" }, + { "caption": "Help: Check for Updates", "command": "update_check", "platform": "!Linux" }, + { "caption": "Help: Changelog", "command": "show_changelog" }, + { "caption": "Help: About", "command": "show_about_window" }, ] ```
michaelblyons commented 3 years ago

@Ultra-Instinct-05 Do you mind re-rerunning the diff with --ignore-space-change (-b)? Hopefully that will skip the ones that have just been switched between single-line and multi-line.

UltraInstinct05 commented 3 years ago

I actually used window.run_command("diff_files") for it. Using git for it never crossed my mind. I have updated it (though I don't see any difference in it by using git diff "path_to_4093_file" "path_to_4094_file" --ignore-space-change --output="output.txt")

michaelblyons commented 3 years ago

Ah. There were commas added/removed as well. That probably throws off the space change. 😞 My mistake. Thanks anyway.

Using git for it never crossed my mind.

I do this everywhere. gdiff is an alias to git diff --no-index on pretty much every system I use.

FichteFoll commented 3 years ago

I just went through the list of commands provided by the Missing Palette Commands package and removed all the commands that have since been added, which left me with the following:

```js [ // File { "command": "new_file", "caption": "File: New File" }, { "command": "prompt_open_file", "caption": "File: Open File" }, { "command": "reopen_last_file", "caption": "File: Reopen Closed File" }, { "command": "save", "caption": "File: Save" }, { "command": "prompt_save_as", "caption": "File: Save As…" }, { "command": "close", "caption": "File: Close" }, { "command": "new_window", "caption": "New Window" }, { "command": "close_window", "caption": "Close Window" }, { "command": "exit", "caption": "Exit Sublime Text" }, // Selection { "caption": "Selection: Single Selection", "command": "single_selection" }, { "caption": "Selection: Invert Selection", "command": "invert_selection" }, { "caption": "Selection: Expand to Tag", "command": "expand_selection", "args": {"to": "tag"}}, { "caption": "Selection: Undo Selection", "command": "soft_undo" }, { "caption": "Selection: Redo Selection", "command": "soft_redo" }, // Edit { "caption": "Edit: Undo", "command": "undo" }, { "caption": "Edit: Redo or Repeat", "command": "redo_or_repeat" }, { "caption": "Edit: Copy", "command": "copy" }, { "caption": "Edit: Cut", "command": "cut" }, { "caption": "Edit: Paste", "command": "paste" }, { "caption": "Edit: Paste and Indent", "command": "paste_and_indent" }, { "caption": "Edit: Paste from History", "command": "paste_from_history" }, { "caption": "Indentation: Indent", "command": "indent" }, { "caption": "Indentation: Unindent", "command": "unindent" }, { "caption": "Edit: Swap Line Up", "command": "swap_line_up" }, { "caption": "Edit: Swap Line Down", "command": "swap_line_down" }, { "caption": "Edit: Duplicate Line", "command": "duplicate_line" }, { "caption": "Edit: Delete Line", "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} }, { "caption": "Edit: Join Lines", "command": "join_lines" }, { "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"}, "caption": "Edit: Delete Line" }, { "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"}, "caption": "Edit: Delete to End" }, { "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"}, "caption": "Edit: Delete to Beginning" }, { "command": "set_mark", "caption": "Mark: Set Mark" }, { "command": "select_to_mark", "caption": "Mark: Select to Mark" }, { "command": "delete_to_mark", "caption": "Mark: Delete to Mark" }, { "command": "swap_with_mark", "caption": "Mark: Swap with Mark" }, { "command": "clear_bookmarks", "args": {"name": "mark"}, "caption": "Mark: Clear Mark" }, { "command": "yank", "caption": "Mark: Yank" }, // Find { "command": "show_panel", "args": {"panel": "find", "reverse": false}, "caption": "Find…" }, { "command": "find_next", "caption": "Find Next" }, { "command": "find_prev", "caption": "Find Previous" }, { "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false}, "caption": "Incremental Find" }, { "command": "show_panel", "args": {"panel": "replace", "reverse": false}, "caption": "Replace…" }, { "command": "replace_next", "caption": "Replace Next" }, { "command": "find_under", "caption": "Quick Find" }, { "command": "find_all_under", "caption": "Quick Find All" }, { "command": "find_under_expand", "caption": "Quick Add Next" }, { "command": "slurp_find_string", "caption": "Use Selection for Find" }, { "command": "slurp_replace_string", "caption": "Use Selection for Replace" }, { "command": "show_panel", "args": {"panel": "find_in_files"}, "caption": "Find in Files…" }, // View { "command": "show_panel", "args": {"panel": "console"}, "caption": "View: Show Console" }, { "caption": "Layout: Single", "command": "set_layout", "args": { "cols": [0.0, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1]] } }, { "caption": "Layout: 2 Columns", "command": "set_layout", "args": { "cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1]] } }, { "caption": "Layout: 3 Columns", "command": "set_layout", "args": { "cols": [0.0, 0.33, 0.66, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]] } }, { "caption": "Layout: 4 Columns", "command": "set_layout", "args": { "cols": [0.0, 0.25, 0.5, 0.75, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]] } }, { "caption": "Layout: 2 Rows", "command": "set_layout", "args": { "cols": [0.0, 1.0], "rows": [0.0, 0.5, 1.0], "cells": [[0, 0, 1, 1], [0, 1, 1, 2]] } }, { "caption": "Layout: 3 Rows", "command": "set_layout", "args": { "cols": [0.0, 1.0], "rows": [0.0, 0.33, 0.66, 1.0], "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]] } }, { "caption": "Layout: Grid", "command": "set_layout", "args": { "cols": [0.0, 0.5, 1.0], "rows": [0.0, 0.5, 1.0], "cells": [ [0, 0, 1, 1], [1, 0, 2, 1], [0, 1, 1, 2], [1, 1, 2, 2] ] } }, { "command": "new_pane", "caption": "Group: Move to New Group" }, { "command": "new_pane", "args": {"move": false}, "caption": "Group: New Group" }, { "command": "close_pane", "caption": "Group: Close Group" }, { "command": "focus_neighboring_group", "caption": "Group: Focus Next Group" }, { "command": "focus_neighboring_group", "args": {"forward": false}, "caption": "Group: Focus Previous Group" }, { "command": "focus_group", "args": {"group": 0}, "caption": "Group: Focus Group 1" }, { "command": "focus_group", "args": {"group": 1}, "caption": "Group: Focus Group 2" }, { "command": "focus_group", "args": {"group": 2}, "caption": "Group: Focus Group 3" }, { "command": "focus_group", "args": {"group": 3}, "caption": "Group: Focus Group 4" }, { "command": "move_to_neighboring_group", "caption": "Group: Move to Next Group" }, { "command": "move_to_neighboring_group", "args": {"forward": false}, "caption": "Group: Move to Previous Group" }, { "command": "move_to_group", "args": {"group": 0}, "caption": "Group: Move to Group 1" }, { "command": "move_to_group", "args": {"group": 1}, "caption": "Group: Move to Group 2" }, { "command": "move_to_group", "args": {"group": 2}, "caption": "Group: Move to Group 3" }, { "command": "move_to_group", "args": {"group": 3}, "caption": "Group: Move to Group 4" }, { "caption": "Indentation: Tab Width: 1", "command": "set_setting", "args": {"setting": "tab_size", "value": 1} }, { "caption": "Indentation: Tab Width: 2", "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "caption": "Indentation: Tab Width: 3", "command": "set_setting", "args": {"setting": "tab_size", "value": 3} }, { "caption": "Indentation: Tab Width: 4", "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }, { "caption": "Indentation: Tab Width: 5", "command": "set_setting", "args": {"setting": "tab_size", "value": 5} }, { "caption": "Indentation: Tab Width: 6", "command": "set_setting", "args": {"setting": "tab_size", "value": 6} }, { "caption": "Indentation: Tab Width: 7", "command": "set_setting", "args": {"setting": "tab_size", "value": 7} }, { "caption": "Indentation: Tab Width: 8", "command": "set_setting", "args": {"setting": "tab_size", "value": 8} }, { "command": "toggle_setting", "args": {"setting": "translate_tabs_to_spaces"}, "caption": "Indentation: Use Spaces" }, { "command": "set_line_ending", "args": {"type": "windows"}, "caption": "Line Endings: Windows" }, { "command": "set_line_ending", "args": {"type": "unix"}, "caption": "Line Endings: Unix" }, { "command": "set_line_ending", "args": {"type": "cr"}, "caption": "Line Endings: Mac OS 9" }, { "command": "toggle_setting", "args": {"setting": "spell_check"}, "caption": "Spelling: Spell Check" }, { "command": "next_misspelling", "caption": "Spelling: Next Misspelling" }, { "command": "prev_misspelling", "caption": "Spelling: Previous Misspelling" }, // Goto { "command": "show_overlay", "args": {"overlay": "goto", "show_files": true}, "caption": "Goto: Anything…" }, { "command": "show_overlay", "args": {"overlay": "goto", "text": "@"}, "caption": "Goto: Symbol…" }, { "command": "goto_symbol_in_project", "caption": "Goto: Symbol in Project…" }, { "command": "goto_definition", "caption": "Goto: Definition…" }, { "command": "show_overlay", "args": {"overlay": "goto", "text": ":"}, "caption": "Goto: Line…" }, { "command": "jump_back", "caption": "Jump Back" }, { "command": "jump_forward", "caption": "Jump Forward" }, { "command": "next_view", "caption": "Switch: Next File" }, { "command": "prev_view", "caption": "Switch: Previous File" }, { "command": "next_view_in_stack", "caption": "Switch: Next File in Stack" }, { "command": "prev_view_in_stack", "caption": "Switch: Previous File in Stack" }, { "command": "show_at_center", "caption": "Scroll to Selection" }, // Tools { "command": "show_panel", "args": {"panel": "output.exec"}, "caption": "Build: Show Results", "mnemonic": "S" }, { "command": "toggle_record_macro", "caption": "Macro: Record Macro" }, { "command": "run_macro", "caption": "Macro: Playback Macro" }, { "command": "save_macro", "caption": "Macro: Save Macro…" }, { "command": "new_snippet", "caption": "New Snippet…" }, // Project { "command": "prompt_open_project_or_workspace", "caption": "Project: Open Project…" }, { "command": "prompt_switch_project_or_workspace", "caption": "Project: Switch Project…" }, { "command": "prompt_select_workspace", "caption": "Project: Quick Switch Project…"}, { "command": "new_window_for_project", "caption": "Project: New Workspace for Project" }, { "command": "close_folder_list", "caption": "Project: Remove all Folders from Project" }, // Preferences Menu { "caption": "Font: Increase Font Size", "command": "increase_font_size" }, { "caption": "Font: Decrease Font Size", "command": "decrease_font_size" }, { "caption": "Font: Reset Font Size", "command": "reset_font_size" }, // Misc (not in menu) { "caption": "View: Toggle Gutter", "command": "toggle_setting", "args": {"setting": "gutter"} }, { "caption": "View: Toggle Line Numbers", "command": "toggle_setting", "args": {"setting": "line_numbers"} }, { "caption": "Reveal Current File in Side Bar", "command": "reveal_in_side_bar" } ] ```

Now, I don't think all of these should be added, but I would definitely appreciate some of them, such as:

I pretty much never want to use the menu and I don't need to have every command bound to a key, especially when I only use them rarely.

A couple of others would be nice to discover their key bindings, which I like using the palette for should I happen to forget a binding and helps discovery in general.