multiple "commands" in a single Sublime Text 2 user keymap shortcut

Satans Sidekick picture Satans Sidekick · Nov 14, 2012 · Viewed 9k times · Source

Is there a way to have multiple "commands" associated with one shortcut?

I have these two shortcuts. First shortcut makes the window on the left larger than the right one (in a 2 column view) and the next shortcut puts the focus on the first window. I tend to forget one or the other shortcut when coding quickly.

{
    "keys": ["super+alt+left"],
    "command": "set_layout",
    "args":
    {
        "cols": [0.0, 0.66, 1.0],
        "rows": [0.0, 1.0],
        "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
    }
},
{ "keys": ["ctrl+alt+left"], "command": "focus_group", "args": { "group": 0 } }

This question makes me sound like i'm lazy but i'd like to think of it as being efficient.

Any advice or suggestions, please?

Answer

John Mellor picture John Mellor · Jan 17, 2015

Install the "Chain of Command" plugin (works in both ST2 and ST3):
https://github.com/jisaacks/ChainOfCommand https://packagecontrol.io/packages/Chain%20of%20Command

Then you'll be able to do stuff like:

{ "keys": ["ctrl+d"],
  "context": [
    { "key": "panel_visible", "operator": "equal", "operand": true }
  ],
  "command": "chain",
  "args": {
    "commands": [
      ["hide_panel", {"cancel": true}],
      ["find_under_expand"],
    ]
  },
},

which redefines Ctrl+D so that it'll close the Find panel if it's open, then perform its normal action (Quick Add Next).

You can do any number of subcommands. Each is an array with the command name (e.g. "hide_panel") followed optionally by the arguments (e.g. {"cancel": true}).