48
52
self.__old_shortcuts = {'n':{}, 'v':{}}
49
self.__currentfile = None
53
self.__currentdocument = None
54
self._create_initscript()
50
55
self.__cw = vimcom.communication_window(self)
58
def _create_initscript(self):
59
script_path = os.path.join(self.boss.get_pida_home(), 'pida_vim_init.vim')
60
if not os.path.exists(script_path):
61
f = open(script_path, 'w')
62
f.write(vimcom.VIMSCRIPT)
65
def vim_init_server(self):
66
self.__cw.load_script(self.server,
67
os.path.join(self.boss.get_pida_home(), 'pida_vim_init.vim'))
69
def stop_fetching_serverlist(self):
70
self.__cw.keep_fetching_serverlist = False
52
72
def get_server(self):
53
73
raise NotImplementedError
56
76
raise NotImplementedError
58
78
def vim_new_serverlist(self, serverlist):
59
79
raise NotImplementedError
61
81
def cmd_start(self):
64
84
def cmd_revert(self):
65
85
self.__cw.revert(self.server)
67
def cmd_close(self, filename):
68
self.__cw.close_buffer(self.server, filename)
87
def cmd_close(self, document):
88
if document.unique_id in self.__newdocs:
89
fn = self.__newdocs[document.unique_id]
91
fn = document.filename
92
self.__cw.close_buffer(self.server, fn)
70
def cmd_edit(self, filename):
94
def cmd_edit(self, document):
71
95
"""Open and edit."""
72
self.boss.call_command('documenttypes',
73
'disable_document_accelerators')
74
if filename != self.__currentfile:
75
if filename in self.__files.setdefault(self.server, []):
76
self.__cw.change_buffer(self.server, filename)
96
if document is not self.__currentdocument:
97
if (document.unique_id in
98
self.__servers.setdefault(self.server, [])):
99
if document.unique_id in self.__newdocs:
100
fn = self.__newdocs[document.unique_id]
102
fn = document.filename
103
self.__cw.change_buffer(self.server, fn)
77
104
self.__cw.foreground(self.server)
80
for server in self.__files:
81
serverfiles = self.__files[server]
82
if filename in serverfiles:
83
self.__cw.change_buffer(server, filename)
107
for server in self.__servers:
108
serverdocs = self.__servers[server]
109
if document.unique_id in serverdocs:
110
self.__cw.change_buffer(server, document.filename)
84
111
self.__cw.foreground(server)
88
self.__cw.open_file(self.server, filename)
89
self.__files[self.server].append(filename)
90
self.__currentfile = filename
115
if document.filename is None:
116
newname = self.__cw.new_file(self.server)
117
self.__newdocs[document.unique_id] = newname
119
self.__cw.open_file(self.server, document.filename)
120
self.__servers[self.server].append(document.unique_id)
121
self.__documents[document.unique_id] = document
122
self.__currentdocument = document
91
123
if self.single_view is not None:
92
124
self.single_view.raise_page()
93
self.single_view.long_title = filename
125
if document.filename is None:
128
title = document.filename
129
self.single_view.long_title = title
95
131
def cmd_undo(self):
96
132
self.__cw.undo(self.server)
110
146
def cmd_save(self):
111
147
self.__cw.save(self.server)
149
def cmd_save_as(self, filename):
150
del self.__newdocs[self.__currentdocument.unique_id]
151
self.__cw.save_as(self.server, filename)
113
153
def cmd_goto_line(self, linenumber):
114
self.__cw.goto_line(self.server, linenumber)
154
self.__cw.goto_line(self.server, linenumber + 1)
116
def __load_shortcuts(self):
118
if self.__old_shortcuts[mapc].setdefault(self.server, []):
119
for sc in self.__old_shortcuts[mapc][self.server]:
120
self.__cw.send_ex(self.server, UNMAP_COM % (mapc, sc))
121
self.__old_shortcuts[mapc][self.server] = []
122
#l = self.options.get('shortcut-leader').value
123
globalkpsopts = self.boss.option_group('keyboardshortcuts')
125
for opt in globalkpsopts:
126
vals = opt.value().split()
129
v = '<lt>%s-%s>' % (mod, k)
130
globalkps.append((v, '''Async_event("globalkp,%s")''' %
131
opt.value().replace('\\', '\\\\')))
133
for c, command in globalkps:
135
#c = self.options.get(name).value()
137
self.__old_shortcuts[mapc][self.server].append(sc)
138
self.__cw.send_ex(self.server, NMAP_COM % (mapc, c, command))
139
except errors.BadRegistryKeyError:
141
gobject.timeout_add(200, load)
156
def cmd_show_mark(self, index, filename, line):
157
self.__cw.show_sign(self.server, index, filename, line)
159
def cmd_hide_mark(self, index):
144
colorscheme = self.opt('display', 'colour_scheme')
163
colorscheme = self.opts.display__colour_scheme
146
165
self.__cw.set_colorscheme(self.server, colorscheme)
147
if self.opt('display', 'hide_vim_menu'):
166
if self.opts.display__hide_vim_menu:
148
167
self.__cw.set_menu_visible(self.server, False)
149
168
#self.__load_shortcuts()
158
177
def goto_line(self, linenumber):
159
178
self.__cw.change_cursor(self.server, 1, linenumber)
161
def vim_bufferchange(self, server, cwd, filename):
180
def vim_bufferchange(self, server, cwd, filename, bufnr):
181
self.log.debug('vim buffer change "%s"', filename)
182
if not filename or filename in '-MiniBufExplorer-':
164
184
if os.path.abspath(filename) != filename:
165
185
filename = os.path.join(cwd, filename)
166
self.log.debug('vim buffer change "%s"', filename)
167
if filename != self.__currentfile:
168
self.__currentfile = filename
169
if filename not in self.__files.setdefault(server, []):
170
self.__files[server].append(filename)
186
if os.path.isdir(filename):
187
if self.opts.behaviour__open_directories_in_pida:
188
self.boss.call_command('filemanager', 'browse',
190
self.__cw.close_buffer(self.server, filename)
192
if self.__currentdocument is None or filename != self.__currentdocument.filename:
193
for uid, fn in self.__newdocs.iteritems():
195
doc = self.__documents[uid]
196
self.__current_doc_set(doc)
198
for doc in self.__documents.values():
199
if doc.filename == filename:
200
self.__current_doc_set(doc)
171
202
self.boss.call_command('buffermanager', 'open_file',
172
203
filename=filename)
205
def __current_doc_set(self, doc):
206
self.__currentdocument = doc
207
self.boss.call_command('buffermanager', 'open_document',
174
210
def vim_bufferunload(self, server, filename, *args):
175
211
self.log.debug('vim unloaded "%s"', filename)
176
212
if filename != '':
177
# unloaded an empty new file
178
if filename in self.__files.setdefault(server, []):
179
self.__files[server].remove(filename)
180
self.boss.call_command('buffermanager', 'file_closed',
182
self.__currentfile = None
184
self.log.info('vim unloaded an unknown file %s', filename)
214
for uid, fn in self.__newdocs.iteritems():
216
doc = self.__documents[uid]
219
for uid, document in self.__documents.iteritems():
220
if document.filename == filename:
224
self.__servers[server].remove(doc.unique_id)
225
del self.__documents[uid]
226
self.__currentdocument = None
227
self.boss.call_command('buffermanager', 'document_closed',
228
document=doc, dorefresh=True)
230
def vim_started(self, server):
186
233
def vim_filesave(self, server, *args):
187
234
self.boss.call_command('buffermanager', 'reset_current_document')
193
240
def vim_shutdown(self, server, *args):
194
self.clean_after_shutdown(server)
241
#self.clean_after_shutdown(server)
195
242
self.after_shutdown(server)
244
def vim_set_breakpoint(self, server, line):
245
self.boss.call_command('pythondebugger', 'set_breakpoint',
246
filename=self.__currentdocument.filename, line=int(line))
197
248
def clean_after_shutdown(self, server):
198
for filename in self.__files.setdefault(server, []):
199
self.boss.call_command('buffermanager', 'file_closed',
202
self.__currentfile = None
249
for docid in self.__servers.setdefault(server, []):
250
doc = self.__documents[docid]
251
del self.__documents[docid]
252
self.boss.call_command('buffermanager', 'document_closed',
254
self.__servers[server] = []
255
self.__currentdocument = None
204
257
def after_shutdown(self, server):