Skip to content

Instantly share code, notes, and snippets.

@kl0tl
Forked from StefanoRausch/Default (OSX).sublime-keymap
Last active August 29, 2015 14:21
Show Gist options
  • Save kl0tl/fec0d73dd4fd2dffaf48 to your computer and use it in GitHub Desktop.
Save kl0tl/fec0d73dd4fd2dffaf48 to your computer and use it in GitHub Desktop.
import sublime, sublime_plugin
# Takes an array of commands (same as those you'd provide to a key binding) with
# an optional context (defaults to view commands) & runs each command in order.
# Valid contexts are 'text', 'window', and 'app' for running a TextCommand,
# WindowCommands, or ApplicationCommand respectively.
class RunMultipleCommandsCommand(sublime_plugin.TextCommand):
def exec_command(self, command):
if not 'command' in command:
raise Exception('No command name provided.')
args = None
if 'args' in command:
args = command['args']
# default context is the view since it's easiest to get the other contexts
# from the view
context = self.view
if 'context' in command:
context_name = command['context']
if context_name == 'window':
context = context.window()
elif context_name == 'app':
context = sublime
elif context_name == 'text':
pass
else:
raise Exception('Invalid command context "'+context_name+'".')
run = lambda: context.run_command(command['command'], args)
if 'delay' in command:
sublime.set_timeout(run, command['delay'])
else:
run()
def run(self, edit, commands = None):
if commands is None:
return # not an error
for command in commands:
self.exec_command(command)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment