# HG changeset patch # User Steve Losh # Date 1308014274 14400 # Node ID 0797e3cc502016faea8bc5c30e4565a3eaf938fb # Parent 83d8eb7f58e83a8e4b7fcaba492eae8eef3f96c7 Oh hell yes, Python 2.5. diff -r 83d8eb7f58e8 -r 0797e3cc5020 plugin/threesomelib/modes.py --- a/plugin/threesomelib/modes.py Mon Jun 13 20:58:58 2011 -0400 +++ b/plugin/threesomelib/modes.py Mon Jun 13 21:17:54 2011 -0400 @@ -1,3 +1,5 @@ +from __future__ import with_statement + import vim from util import buffers, windows from settings import boolsetting, setting @@ -11,9 +13,8 @@ def diff(self, diffmode): - curwindow = windows.currentnr() - getattr(self, '_diff_%d' % diffmode)() - windows.focus(curwindow) + with windows.remain(): + getattr(self, '_diff_%d' % diffmode)() # Reset the scrollbind to whatever it was before we diffed. if not diffmode: @@ -27,21 +28,19 @@ def diffoff(self): - curwindow = windows.currentnr() - - for winnr in range(2, 2 + self._number_of_windows): - windows.focus(winnr) - curbuffer = buffers.current + with windows.remain(): + for winnr in range(2, 2 + self._number_of_windows): + windows.focus(winnr) + curbuffer = buffers.current - for buffer in buffers.all: - buffer.open() - vim.command('diffoff') - if setting('wrap'): - vim.command('setlocal ' + setting('wrap')) + for buffer in buffers.all: + buffer.open() + vim.command('diffoff') + if setting('wrap'): + vim.command('setlocal ' + setting('wrap')) - curbuffer.open() + curbuffer.open() - windows.focus(curwindow) def key_diffoff(self): self.diff(0) @@ -51,23 +50,19 @@ if self._current_diff_mode: return - curwindow = windows.currentnr() - pos = vim.current.window.cursor - self._current_scrollbind = enabled + with windows.remain(): + self._current_scrollbind = enabled - for winnr in range(2, 2 + self._number_of_windows): - windows.focus(winnr) + for winnr in range(2, 2 + self._number_of_windows): + windows.focus(winnr) + + if enabled: + vim.command('set scrollbind') + else: + vim.command('set noscrollbind') if enabled: - vim.command('set scrollbind') - else: - vim.command('set noscrollbind') - - if enabled: - vim.command('syncbind') - - windows.focus(curwindow) - vim.current.window.cursor = pos + vim.command('syncbind') def key_scrollbind(self): self.scrollbind(not self._current_scrollbind) @@ -159,19 +154,16 @@ return lines def redraw_hud(self): - curwindow = windows.currentnr() - - windows.focus(1) + with windows.remain(): + windows.focus(1) - vim.command('setlocal modifiable') - buffers.hud.set_lines(self.hud_lines()) - vim.command('setlocal nomodifiable') + vim.command('setlocal modifiable') + buffers.hud.set_lines(self.hud_lines()) + vim.command('setlocal nomodifiable') - vim.command('set winfixheight') - vim.command('resize ' + setting('hud_size', '3')) - vim.command('wincmd =') - - windows.focus(curwindow) + vim.command('set winfixheight') + vim.command('resize ' + setting('hud_size', '3')) + vim.command('wincmd =') class GridMode(Mode): diff -r 83d8eb7f58e8 -r 0797e3cc5020 plugin/threesomelib/util/windows.py --- a/plugin/threesomelib/util/windows.py Mon Jun 13 20:58:58 2011 -0400 +++ b/plugin/threesomelib/util/windows.py Mon Jun 13 21:17:54 2011 -0400 @@ -21,3 +21,16 @@ def currentnr(): return int(vim.eval('winnr()')) +def pos(): + return vim.current.window.cursor + + +class remain: + def __enter__(self): + self.curwindow = currentnr() + self.pos = pos() + + def __exit__(self, type, value, traceback): + focus(self.curwindow) + vim.current.window.cursor = self.pos +