26
import distutils.spawn as spawn
25
28
# pida core import(s)
26
29
import pida.core.service as service
28
31
# pida utils import(s)
29
import pida.utils.vim.vimcom as vimcom
30
32
import pida.utils.vim.vimembed as vimembed
31
33
import pida.utils.vim.vimeditor as vimeditor
33
35
defs = service.definitions
37
from pida.model import attrtypes as types
40
__order__ = ['behaviour', 'vim_command', 'display']
41
class vim_command(defs.optiongroup):
42
"""Vim command options."""
43
__order__ = ['use_cream']
46
class use_cream(defs.option):
47
"""Whether Cream for Vim will be used"""
51
class display(defs.optiongroup):
52
"""Vim display options"""
53
__order__ = ['colour_scheme', 'hide_vim_menu']
55
class colour_scheme(defs.option):
56
"""The colour scheme to use in vim (Empty will be ignored)."""
58
label = "Color scheme:"
60
class hide_vim_menu(defs.option):
61
"""Whether the vim menu will be hidden."""
63
label = "Hide Vim menu"
66
class behaviour(defs.optiongroup):
67
"""How Vim behaves with PIDA"""
68
__order__ = ['open_directories_in_pida']
70
class open_directories_in_pida(defs.option):
71
"""Whether directories opened in Vim will open in the PIDA file
74
label = "Open directories in PIDA"
77
__markup__ = lambda self: 'Vim Embedded'
37
80
class vim_embedded_editor(vimeditor.vim_editor, service.service):
39
82
display_name = 'Embedded Vim'
41
single_view_type = vimembed.vim_embed
42
single_view_book = 'edit'
84
config_definition = VimEmbedConfig
87
view_type = vimembed.vim_embed
90
def cmd_grab_focus(self):
91
self.single_view.grab_input_focus()
46
96
vimeditor.vim_editor.init(self)
48
class vim_command(defs.optiongroup):
49
"""Vim command options."""
50
class use_cream(defs.option):
54
class vim_events(defs.optiongroup):
55
"""How PIDA will react to events from Vim."""
56
class shutdown_with_vim(defs.option):
99
def get_sanity_errors(self):
100
if not spawn.find_executable('gvim'):
101
return ['Gvim is not installed']
60
103
def get_server(self):
61
104
"""Return our only server."""
63
106
server = property(get_server)
66
self.create_single_view()
67
if self.opt('vim_command', 'use_cream'):
109
self.__view = self.create_view('Vim')
110
if self.opts.vim_command__use_cream:
71
self.single_view.run(command)
114
self.show_view(view=self.__view)
115
def _r(command=command):
116
self.__view.run(command)
73
119
def vim_new_serverlist(self, serverlist):
74
if (self.single_view is not None and
75
self.single_view.servername in serverlist and
120
if (self.__view is not None and
121
self.__view.servername in serverlist and
76
122
not self.started):
77
self.__srv = self.single_view.servername
78
self.vim_window.init_server(self.server)
123
self.__srv = self.__view.servername
124
self.vim_init_server()
81
self.get_service('editormanager').events.emit('started')
127
self.stop_fetching_serverlist()
129
self.get_service('editormanager').events.emit('started')
130
gobject.idle_add(emit_start)
83
132
def after_shutdown(self, server):
84
if self.opt('vim_events', 'shutdown_with_vim'):
135
gobject.idle_add(stop)
89
137
def restart(self):
91
self.single_view.close()
92
140
self.call('start')
94
142
def has_started(self):
95
143
return self.server is not None
96
144
started = property(has_started)
98
def confirm_single_view_controlbar_clicked_close(self, view):
99
self.call('close', filename=self.current_file)
146
def view_confirm_close(self, view):
147
doc=self.current_document
149
self.call('close', filename=self.current_document.filename)
153
def get_single_view(self):
155
single_view = property(get_single_view)
103
158
Service = vim_embedded_editor