From 1a1f0b69d18a5bed37fcecd78825715ce15b63b6 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Fri, 3 Feb 2017 01:44:05 +0900 Subject: [PATCH 1/7] Uses Vim's timer instead of CursorHold trigger --- autoload/ensime.vim | 8 -------- ensime_shared/client.py | 9 ++------- ensime_shared/editor.py | 9 ++------- ensime_shared/ensime.py | 10 ++++------ plugin/ensime.vim | 2 -- rplugin/python/ensime.py | 11 +++-------- 6 files changed, 11 insertions(+), 38 deletions(-) diff --git a/autoload/ensime.vim b/autoload/ensime.vim index c085531..15ae872 100644 --- a/autoload/ensime.vim +++ b/autoload/ensime.vim @@ -43,14 +43,6 @@ function! ensime#au_buf_leave(filename) abort return s:call_plugin('au_buf_leave', [a:filename]) endfunction -function! ensime#au_cursor_hold(filename) abort - return s:call_plugin('au_cursor_hold', [a:filename]) -endfunction - -function! ensime#au_cursor_moved(filename) abort - return s:call_plugin('au_cursor_moved', [a:filename]) -endfunction - function! ensime#com_en_no_teardown(args, range) abort return s:call_plugin('com_en_no_teardown', [a:args, a:range]) endfunction diff --git a/ensime_shared/client.py b/ensime_shared/client.py index 89bd823..6b53224 100644 --- a/ensime_shared/client.py +++ b/ensime_shared/client.py @@ -170,6 +170,7 @@ def lazy_initialize_ensime(): try: self.ensime = self.launcher.launch() + self.editor.start_timer() except InvalidJavaPathError: self.editor.message('invalid_java') # TODO: also disable plugin @@ -602,7 +603,7 @@ def unqueue_and_display(self, filename): self.editor.lazy_display_error(filename) self.unqueue() - def on_cursor_hold(self, filename): + def refresh(self, filename): """Handler for event CursorHold.""" if self.connection_attempts < 10: # Trick to connect ASAP when @@ -611,12 +612,6 @@ def on_cursor_hold(self, filename): self.setup(True, False) self.connection_attempts += 1 self.unqueue_and_display(filename) - self.editor.cursorhold() - - def on_cursor_move(self, filename): - """Handler for event CursorMoved.""" - self.setup(True, False) - self.unqueue_and_display(filename) def vim_enter(self, filename): """Set up EnsimeClient when vim enters. diff --git a/ensime_shared/editor.py b/ensime_shared/editor.py index f3240b4..0e04bcc 100644 --- a/ensime_shared/editor.py +++ b/ensime_shared/editor.py @@ -200,8 +200,6 @@ def write(self, noautocmd=False): # ftplugin/scala/ensime.vim, custom/dotted filetypes & syntax def initialize(self): """Sets up initial ensime-vim editor settings.""" - self._vim.options['updatetime'] = 1000 - # TODO: This seems wrong, the user setting value is never used anywhere. if 'EnErrorStyle' not in self._vim.vars: self._vim.vars['EnErrorStyle'] = 'EnError' @@ -348,11 +346,8 @@ def cursorhold(self): class since it represents "the Vim plugin" as an entity, iterating through its list of clients and calling the logic for each. """ - # Make sure no plugin overrides this - self._vim.options['updatetime'] = 1000 - # Keys with no effect, just retrigger CursorHold - # http://vim.wikia.com/wiki/Timer_to_execute_commands_periodically - self._vim.command(r'call feedkeys("f\e")') + self._vim.eval("timer_start({}, 'EnRefreshMessages', {{'repeat': -1}})" + .format(500)) def display_notes(self, notes): """Renders "notes" reported by ENSIME, such as typecheck errors.""" diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index 6013926..9c6e7de 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -278,12 +278,10 @@ def au_buf_leave(self, client, filename): client.buffer_leave(filename) @execute_with_client() - def au_cursor_hold(self, client, filename): - client.on_cursor_hold(filename) - - @execute_with_client(quiet=True) - def au_cursor_moved(self, client, filename): - client.on_cursor_move(filename) + def refresh_messages(self, client): + filename = client.editor.path() + if filename.endswith(".scala"): + client.refresh(filename) @execute_with_client() def fun_en_complete_func(self, client, findstart_and_base, base=None): diff --git a/plugin/ensime.vim b/plugin/ensime.vim index f23b67d..67c0fd1 100644 --- a/plugin/ensime.vim +++ b/plugin/ensime.vim @@ -61,8 +61,6 @@ augroup ensime autocmd VimLeave *.java,*.scala call ensime#au_vim_leave(expand("")) autocmd VimEnter *.java,*.scala call ensime#au_vim_enter(expand("")) autocmd BufLeave *.java,*.scala call ensime#au_buf_leave(expand("")) - autocmd CursorHold *.java,*.scala call ensime#au_cursor_hold(expand("")) - autocmd CursorMoved *.java,*.scala call ensime#au_cursor_moved(expand("")) augroup END command! -nargs=* -range EnInstall call ensime#com_en_install([], '') diff --git a/rplugin/python/ensime.py b/rplugin/python/ensime.py index af37707..1eb18b9 100644 --- a/rplugin/python/ensime.py +++ b/rplugin/python/ensime.py @@ -6,7 +6,6 @@ import neovim - def ensime_init_path(): path = os.path.abspath(inspect.getfile(inspect.currentframe())) expected_nvim_path_end = os.path.join('rplugin', 'python', 'ensime.py') @@ -172,13 +171,9 @@ def au_vim_leave(self, *args, **kwargs): def au_buf_leave(self, *args, **kwargs): super(NeovimEnsime, self).au_buf_leave(*args, **kwargs) - @neovim.autocmd('CursorHold', **autocmd_params) - def au_cursor_hold(self, *args, **kwargs): - super(NeovimEnsime, self).au_cursor_hold(*args, **kwargs) - - @neovim.autocmd('CursorMoved', **autocmd_params) - def au_cursor_moved(self, *args, **kwargs): - super(NeovimEnsime, self).au_cursor_moved(*args, **kwargs) + @neovim.function('EnRefreshMessages', sync=True) + def refresh_messages(self, timer): + super(NeovimEnsime, self).refresh_messages() @neovim.function('EnCompleteFunc', sync=True) def fun_en_complete_func(self, *args, **kwargs): From 7a86f9bedc6e45cc87fe8dca236b25ceeba2d2b3 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Sat, 4 Feb 2017 18:22:25 +0900 Subject: [PATCH 2/7] Addresses PR remarks. --- autoload/ensime.vim | 12 ++++++++++++ ensime_shared/client.py | 5 ++--- ensime_shared/editor.py | 15 -------------- ensime_shared/ensime.py | 42 ++++++++++++++++++++++++++++++++-------- ensime_shared/ticker.py | 39 +++++++++++++++++++++++++++++++++++++ ensime_shared/util.py | 5 +++++ plugin/ensime.vim | 8 ++++++++ rplugin/python/ensime.py | 14 +++++++++++--- 8 files changed, 111 insertions(+), 29 deletions(-) create mode 100644 ensime_shared/ticker.py diff --git a/autoload/ensime.vim b/autoload/ensime.vim index 15ae872..3a93346 100644 --- a/autoload/ensime.vim +++ b/autoload/ensime.vim @@ -147,6 +147,18 @@ function! ensime#com_en_clients(args, range) abort return s:call_plugin('com_en_clients', [a:args, a:range]) endfunction +function! ensime#au_cursor_hold(filename) abort + return s:call_plugin('au_cursor_hold', [a:filename]) +endfunction + +function! ensime#au_cursor_moved(filename) abort + return s:call_plugin('au_cursor_moved', [a:filename]) +endfunction + +function! ensime#fun_en_tick(timer) abort + return s:call_plugin('en_tick', [a:timer]) +endfunction + function! s:call_plugin(method_name, args) abort " TODO: support nvim rpc if has('nvim') diff --git a/ensime_shared/client.py b/ensime_shared/client.py index 6b53224..a81f72a 100644 --- a/ensime_shared/client.py +++ b/ensime_shared/client.py @@ -170,7 +170,6 @@ def lazy_initialize_ensime(): try: self.ensime = self.launcher.launch() - self.editor.start_timer() except InvalidJavaPathError: self.editor.message('invalid_java') # TODO: also disable plugin @@ -603,8 +602,8 @@ def unqueue_and_display(self, filename): self.editor.lazy_display_error(filename) self.unqueue() - def refresh(self, filename): - """Handler for event CursorHold.""" + def tick(self, filename): + """Try to connect and display messages in queue.""" if self.connection_attempts < 10: # Trick to connect ASAP when # plugin is started without diff --git a/ensime_shared/editor.py b/ensime_shared/editor.py index 0e04bcc..74f8b4a 100644 --- a/ensime_shared/editor.py +++ b/ensime_shared/editor.py @@ -334,21 +334,6 @@ def indent(line): return ".".join(fqn) - def cursorhold(self): - """Stuff that EnsimeClient does on CursorHold. - - Todo: - This is a temporary placeholder for further refactoring. - - IMO EnsimeClient should not have methods like ``on_cursor_hold``, - it's the wrong layer of abstraction for handlers of editor events. - I'm not sure where these should go yet though -- maybe the Ensime - class since it represents "the Vim plugin" as an entity, iterating - through its list of clients and calling the logic for each. - """ - self._vim.eval("timer_start({}, 'EnRefreshMessages', {{'repeat': -1}})" - .format(500)) - def display_notes(self, notes): """Renders "notes" reported by ENSIME, such as typecheck errors.""" diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index 9c6e7de..9fef1db 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -6,6 +6,8 @@ from .config import ProjectConfig from .editor import Editor from .launcher import EnsimeLauncher +from .util import is_buffer_ensime_compatible +from .ticker import Ticker def execute_with_client(quiet=False, @@ -48,6 +50,7 @@ def __init__(self, vim): # race condition of autocommand handlers being invoked as they're being # defined. self._vim = vim + self._ticker = None self.clients = {} @property @@ -55,6 +58,11 @@ def using_server_v2(self): """bool: Whether user has configured the plugin to use ENSIME v2 protocol.""" return bool(self.get_setting('server_v2', 0)) + def is_buffer_ensime_compatible(self): + """Return True if the current buffer is supported by Ensime.""" + current_filetype = self._vim.eval('&filetype') + return current_filetype in ['scala', 'java'] + def get_setting(self, key, default): """Returns the value of a Vim variable ``g:ensime_{key}`` if it is set, and ``default`` otherwise. @@ -119,6 +127,12 @@ def create_client(self, config_path): else: return EnsimeClientV1(editor, launcher) + def _create_ticker(self): + """Create and start the periodic ticker.""" + if not self._ticker: + self._ticker = Ticker(self._vim) + + def disable_plugin(self): """Disable ensime-vim, in the event of an error we can't usefully recover from. @@ -147,6 +161,14 @@ def runtime_paths(self): # TODO: memoize return paths + def tick_clients(self): + """Trigger the periodic tick function in the client.""" + if not self._ticker: + self._create_ticker() + + for client in self.clients.values(): + self._ticker.tick(client) + @execute_with_client() def com_en_toggle_teardown(self, client, args, range=None): client.do_toggle_teardown(None, None) @@ -274,20 +296,24 @@ def au_vim_leave(self, client, filename): self.teardown() @execute_with_client() - def au_buf_leave(self, client, filename): - client.buffer_leave(filename) + def au_cursor_hold(self, client, filename): + self.tick_clients() @execute_with_client() - def refresh_messages(self, client): - filename = client.editor.path() - if filename.endswith(".scala"): - client.refresh(filename) + def au_cursor_moved(self, client, filename): + self.tick_clients() + + def fun_en_tick(self, timer): + self.tick_clients() + + @execute_with_client() + def au_buf_leave(self, client, filename): + client.buffer_leave(filename) @execute_with_client() def fun_en_complete_func(self, client, findstart_and_base, base=None): """Invokable function from vim and neovim to perform completion.""" - current_filetype = self._vim.eval('&filetype') - if current_filetype not in ['scala', 'java']: + if not is_buffer_ensime_compatible(self._vim): return if isinstance(findstart_and_base, list): diff --git a/ensime_shared/ticker.py b/ensime_shared/ticker.py new file mode 100644 index 0000000..d3c4843 --- /dev/null +++ b/ensime_shared/ticker.py @@ -0,0 +1,39 @@ +import neovim + +REFRESH_TIMER = 1000 + +from .util import is_buffer_ensime_compatible + + +class Ticker(object): + + def __init__(self, _vim): + self._vim = _vim + self.has_timers = bool(int(self._vim.eval("has('timers')"))) + + if self.has_timers: + self._timer = None + self._start_refresh_timer() + + def tick(self, client): + filename = client.editor.path() + + if not is_buffer_ensime_compatible(self._vim): + return + + client.tick(filename) + + if not self.has_timers: + self._repeat_cursor_hold() + + def _repeat_cursor_hold(self): + self._vim.options['updatetime'] = REFRESH_TIMER + self._vim.command('call feedkeys("f\e")') + + def _start_refresh_timer(self): + """Start the Vim timer. """ + if not self._timer: + self._timer = self._vim.eval( + "timer_start({}, 'EnTick', {{'repeat': -1}})" + .format(REFRESH_TIMER) + ) diff --git a/ensime_shared/util.py b/ensime_shared/util.py index a2c4324..b34f2f1 100644 --- a/ensime_shared/util.py +++ b/ensime_shared/util.py @@ -41,6 +41,11 @@ def extract_package_name(lines): break return package +def is_buffer_ensime_compatible(_vim): + """Return True if the current buffer is supported by Ensime.""" + current_filetype = _vim.eval('&filetype') + return current_filetype in ['scala', 'java'] + @contextmanager def catch(exception, handler=lambda e: None): diff --git a/plugin/ensime.vim b/plugin/ensime.vim index 67c0fd1..1128a8d 100644 --- a/plugin/ensime.vim +++ b/plugin/ensime.vim @@ -61,6 +61,10 @@ augroup ensime autocmd VimLeave *.java,*.scala call ensime#au_vim_leave(expand("")) autocmd VimEnter *.java,*.scala call ensime#au_vim_enter(expand("")) autocmd BufLeave *.java,*.scala call ensime#au_buf_leave(expand("")) + if !has('timers'): + autocmd CursorHold *.java,*.scala call ensime#au_cursor_hold(expand("")) + autocmd CursorMoved *.java,*.scala call ensime#au_cursor_moved(expand("")) + endif augroup END command! -nargs=* -range EnInstall call ensime#com_en_install([], '') @@ -100,6 +104,10 @@ function! EnCompleteFunc(a, b) abort return ensime#fun_en_complete_func(a:a, a:b) endfunction +function! EnTick(timer) abort + return ensime#fun_en_tick(a:timer) +endfunction + let g:loaded_ensime = 1 " vim:set et sw=4 ts=4 tw=78: diff --git a/rplugin/python/ensime.py b/rplugin/python/ensime.py index 1eb18b9..64097e0 100644 --- a/rplugin/python/ensime.py +++ b/rplugin/python/ensime.py @@ -171,9 +171,17 @@ def au_vim_leave(self, *args, **kwargs): def au_buf_leave(self, *args, **kwargs): super(NeovimEnsime, self).au_buf_leave(*args, **kwargs) - @neovim.function('EnRefreshMessages', sync=True) - def refresh_messages(self, timer): - super(NeovimEnsime, self).refresh_messages() + @neovim.autocmd('CursorHold', **autocmd_params) + def au_cursor_hold(self, *args, **kwargs): + super(NeovimEnsime, self).au_cursor_hold(*args, **kwargs) + + @neovim.autocmd('CursorMoved', **autocmd_params) + def au_cursor_moved(self, *args, **kwargs): + super(NeovimEnsime, self).au_cursor_moved(*args, **kwargs) + + @neovim.function('EnTick', sync=True) + def tick(self, timer): + super(NeovimEnsime, self).fun_en_tick(timer) @neovim.function('EnCompleteFunc', sync=True) def fun_en_complete_func(self, *args, **kwargs): From 19a6b52534e64e4c16c69196c729637a38deab57 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Sat, 4 Feb 2017 18:24:04 +0900 Subject: [PATCH 3/7] Removes duplicate function --- ensime_shared/ensime.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index 9fef1db..cd7e3f5 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -58,11 +58,6 @@ def using_server_v2(self): """bool: Whether user has configured the plugin to use ENSIME v2 protocol.""" return bool(self.get_setting('server_v2', 0)) - def is_buffer_ensime_compatible(self): - """Return True if the current buffer is supported by Ensime.""" - current_filetype = self._vim.eval('&filetype') - return current_filetype in ['scala', 'java'] - def get_setting(self, key, default): """Returns the value of a Vim variable ``g:ensime_{key}`` if it is set, and ``default`` otherwise. From 814a9808512904d7bd4a3897d473db10e5a8f3fa Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Sun, 12 Mar 2017 18:50:32 +0100 Subject: [PATCH 4/7] Moves is_buffer_ensime_compatible into the Editor class --- ensime_shared/editor.py | 5 +++++ ensime_shared/ensime.py | 4 ---- ensime_shared/ticker.py | 5 ++--- ensime_shared/util.py | 6 ------ 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/ensime_shared/editor.py b/ensime_shared/editor.py index 74f8b4a..bc20ca5 100644 --- a/ensime_shared/editor.py +++ b/ensime_shared/editor.py @@ -117,6 +117,11 @@ def menu(self, prompt, choices): return choices[choice - 1] + def is_buffer_ensime_compatible(self): + """Return True if the current buffer is supported by Ensime.""" + current_filetype = self._vim.eval('&filetype') + return current_filetype in ['scala', 'java'] + def set_buffer_options(self, options, bufnr=None): """Set buffer-local options for a buffer, defaulting to current. diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index cd7e3f5..3c0ba2e 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -6,7 +6,6 @@ from .config import ProjectConfig from .editor import Editor from .launcher import EnsimeLauncher -from .util import is_buffer_ensime_compatible from .ticker import Ticker @@ -308,9 +307,6 @@ def au_buf_leave(self, client, filename): @execute_with_client() def fun_en_complete_func(self, client, findstart_and_base, base=None): """Invokable function from vim and neovim to perform completion.""" - if not is_buffer_ensime_compatible(self._vim): - return - if isinstance(findstart_and_base, list): # Invoked by neovim findstart = findstart_and_base[0] diff --git a/ensime_shared/ticker.py b/ensime_shared/ticker.py index d3c4843..8044ad1 100644 --- a/ensime_shared/ticker.py +++ b/ensime_shared/ticker.py @@ -2,8 +2,6 @@ REFRESH_TIMER = 1000 -from .util import is_buffer_ensime_compatible - class Ticker(object): @@ -18,7 +16,8 @@ def __init__(self, _vim): def tick(self, client): filename = client.editor.path() - if not is_buffer_ensime_compatible(self._vim): + # XXX is this necessary ? + if not client.editor.is_buffer_ensime_compatible(): return client.tick(filename) diff --git a/ensime_shared/util.py b/ensime_shared/util.py index b34f2f1..2660b6c 100644 --- a/ensime_shared/util.py +++ b/ensime_shared/util.py @@ -41,12 +41,6 @@ def extract_package_name(lines): break return package -def is_buffer_ensime_compatible(_vim): - """Return True if the current buffer is supported by Ensime.""" - current_filetype = _vim.eval('&filetype') - return current_filetype in ['scala', 'java'] - - @contextmanager def catch(exception, handler=lambda e: None): """If exception runs handler.""" From f4e157ff4ad77aa6462b98932e85084d1cfd65f8 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Mon, 20 Mar 2017 09:11:29 +0100 Subject: [PATCH 5/7] Removes CursorHold and CursorMove autocmd for nvim --- ensime_shared/ensime.py | 1 + rplugin/python/ensime.py | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index 3c0ba2e..02b8535 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -283,6 +283,7 @@ def com_en_package_inspect(self, client, args, range=None): @execute_with_client(quiet=True) def au_vim_enter(self, client, filename): + self.tick_clients() client.vim_enter(filename) @execute_with_client() diff --git a/rplugin/python/ensime.py b/rplugin/python/ensime.py index 64097e0..29a7160 100644 --- a/rplugin/python/ensime.py +++ b/rplugin/python/ensime.py @@ -171,14 +171,6 @@ def au_vim_leave(self, *args, **kwargs): def au_buf_leave(self, *args, **kwargs): super(NeovimEnsime, self).au_buf_leave(*args, **kwargs) - @neovim.autocmd('CursorHold', **autocmd_params) - def au_cursor_hold(self, *args, **kwargs): - super(NeovimEnsime, self).au_cursor_hold(*args, **kwargs) - - @neovim.autocmd('CursorMoved', **autocmd_params) - def au_cursor_moved(self, *args, **kwargs): - super(NeovimEnsime, self).au_cursor_moved(*args, **kwargs) - @neovim.function('EnTick', sync=True) def tick(self, timer): super(NeovimEnsime, self).fun_en_tick(timer) From c10e0111e430b5f21ca17206f0791c8219ac28f8 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Mon, 20 Mar 2017 10:06:18 +0100 Subject: [PATCH 6/7] Trigger Ensime Client creation using BufEnter autocmd w/ timers With the removal of CursorHold and CursorMove autocmd, this is needed to start the connection to the Ensime server without having to execute a command manually. --- autoload/ensime.vim | 4 ++++ ensime_shared/ensime.py | 14 +++++++++++--- plugin/ensime.vim | 2 ++ rplugin/python/ensime.py | 4 ++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/autoload/ensime.vim b/autoload/ensime.vim index 3a93346..5a5f584 100644 --- a/autoload/ensime.vim +++ b/autoload/ensime.vim @@ -39,6 +39,10 @@ function! ensime#au_vim_enter(filename) abort return s:call_plugin('au_vim_enter', [a:filename]) endfunction +function! ensime#au_buf_enter(filename) abort + return s:call_plugin('au_buf_enter', [a:filename]) +endfunction + function! ensime#au_buf_leave(filename) abort return s:call_plugin('au_buf_leave', [a:filename]) endfunction diff --git a/ensime_shared/ensime.py b/ensime_shared/ensime.py index 02b8535..c48a1ff 100644 --- a/ensime_shared/ensime.py +++ b/ensime_shared/ensime.py @@ -117,9 +117,13 @@ def create_client(self, config_path): launcher = EnsimeLauncher(self._vim, config) if self.using_server_v2: - return EnsimeClientV2(editor, launcher) + client = EnsimeClientV2(editor, launcher) else: - return EnsimeClientV1(editor, launcher) + client = EnsimeClientV1(editor, launcher) + + self._create_ticker() + + return client def _create_ticker(self): """Create and start the periodic ticker.""" @@ -283,7 +287,6 @@ def com_en_package_inspect(self, client, args, range=None): @execute_with_client(quiet=True) def au_vim_enter(self, client, filename): - self.tick_clients() client.vim_enter(filename) @execute_with_client() @@ -301,6 +304,11 @@ def au_cursor_moved(self, client, filename): def fun_en_tick(self, timer): self.tick_clients() + @execute_with_client() + def au_buf_enter(self, client, filename): + # Only set up to trigger the creation of a client + pass + @execute_with_client() def au_buf_leave(self, client, filename): client.buffer_leave(filename) diff --git a/plugin/ensime.vim b/plugin/ensime.vim index 1128a8d..0808665 100644 --- a/plugin/ensime.vim +++ b/plugin/ensime.vim @@ -64,6 +64,8 @@ augroup ensime if !has('timers'): autocmd CursorHold *.java,*.scala call ensime#au_cursor_hold(expand("")) autocmd CursorMoved *.java,*.scala call ensime#au_cursor_moved(expand("")) + else + autocmd BufEnter *.java,*.scala call ensime#au_buf_enter(expand("")) endif augroup END diff --git a/rplugin/python/ensime.py b/rplugin/python/ensime.py index 29a7160..0d10803 100644 --- a/rplugin/python/ensime.py +++ b/rplugin/python/ensime.py @@ -171,6 +171,10 @@ def au_vim_leave(self, *args, **kwargs): def au_buf_leave(self, *args, **kwargs): super(NeovimEnsime, self).au_buf_leave(*args, **kwargs) + @neovim.autocmd('BufEnter', **autocmd_params) + def au_buf_enter(self, *args, **kwargs): + super(NeovimEnsime, self).au_buf_enter(*args, **kwargs) + @neovim.function('EnTick', sync=True) def tick(self, timer): super(NeovimEnsime, self).fun_en_tick(timer) From a20e1f3a5183e83597268f81bc84b2defbded2a1 Mon Sep 17 00:00:00 2001 From: Jocelyn Boullier Date: Tue, 21 Mar 2017 20:19:58 +0100 Subject: [PATCH 7/7] Various fixes to make it work with vim --- autoload/ensime.vim | 2 +- ensime_shared/ticker.py | 2 -- plugin/ensime.vim | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/autoload/ensime.vim b/autoload/ensime.vim index 5a5f584..e1fb0f3 100644 --- a/autoload/ensime.vim +++ b/autoload/ensime.vim @@ -160,7 +160,7 @@ function! ensime#au_cursor_moved(filename) abort endfunction function! ensime#fun_en_tick(timer) abort - return s:call_plugin('en_tick', [a:timer]) + return s:call_plugin('fun_en_tick', [a:timer]) endfunction function! s:call_plugin(method_name, args) abort diff --git a/ensime_shared/ticker.py b/ensime_shared/ticker.py index 8044ad1..bb79ecc 100644 --- a/ensime_shared/ticker.py +++ b/ensime_shared/ticker.py @@ -1,5 +1,3 @@ -import neovim - REFRESH_TIMER = 1000 diff --git a/plugin/ensime.vim b/plugin/ensime.vim index 0808665..219c8e3 100644 --- a/plugin/ensime.vim +++ b/plugin/ensime.vim @@ -61,7 +61,7 @@ augroup ensime autocmd VimLeave *.java,*.scala call ensime#au_vim_leave(expand("")) autocmd VimEnter *.java,*.scala call ensime#au_vim_enter(expand("")) autocmd BufLeave *.java,*.scala call ensime#au_buf_leave(expand("")) - if !has('timers'): + if !has('timers') autocmd CursorHold *.java,*.scala call ensime#au_cursor_hold(expand("")) autocmd CursorMoved *.java,*.scala call ensime#au_cursor_moved(expand("")) else