import sublime, sublime_plugin

class VimWindowNavigateLeftCommand(sublime_plugin.WindowCommand):
	def run(self):
		next = 0
		active = self.window.active_group()

		if active > 0:
			next = active - 1

		self.window.focus_group(next)
		self.window.active_view().run_command('exit_insert_mode')

class VimWindowNavigateRightCommand(sublime_plugin.WindowCommand):
	def run(self):
		active = self.window.active_group()
		groups = self.window.num_groups()

		next = active + 1
		if active + 2 > groups:
			next = groups - 1

		self.window.focus_group(next)
		self.window.active_view().run_command('exit_insert_mode')

class VimWindowNavigateUpCommand(sublime_plugin.WindowCommand):
	def run(self):
		active = self.window.active_group()
		groups = self.window.num_groups()

		next = 0
		if active > 1:
			if groups == 4:
				next = active - 2
			else:
				next = active - 1

		self.window.focus_group(next)
		self.window.active_view().run_command('exit_insert_mode')

class VimWindowNavigateDownCommand(sublime_plugin.WindowCommand):
	def run(self):
		active = self.window.active_group()
		groups = self.window.num_groups()

		next = groups - 1
		if active < 2:
			if groups == 4:
				next = active + 2
			else:
				next = active + 1

		self.window.focus_group(next)
		self.window.active_view().run_command('exit_insert_mode')

class VimSaveAllAndExitInsertModeCommand(sublime_plugin.WindowCommand):
	def run(self):
		self.window.run_command('save_all')
		self.window.active_view().run_command('exit_insert_mode')