@@ -29,28 +29,30 @@ def ask(self, prompt, default=None, starting=None):
29
29
30
30
def ask_values (self ,prompt ,values ,default = None ,
31
31
starting = None ,show_values = None ):
32
-
33
32
if show_values or (show_values is None and len (values )< 14 ):
34
33
self ._print_values (values )
35
-
36
34
if default is not None :
37
35
prompt = prompt + ('[%s] ' % default )
38
-
39
36
starting = starting or ''
40
37
_completer .values = values
41
38
answer = call ('input("%s", "%s", "customlist,RopeValueCompleter")' %
42
39
(prompt ,starting ))
43
40
if answer is None :
44
- return 'cancel' if 'cancel' in values else None
45
-
41
+ if 'cancel' in values :
42
+ return 'cancel'
43
+ return
46
44
if default is not None and not answer :
47
45
return default
48
-
49
46
if answer .isdigit ()and 0 <= int (answer )< len (values ):
50
47
return values [int (answer )]
51
-
52
48
return answer
53
49
50
+ def _print_values (self ,values ):
51
+ numbered = []
52
+ for index ,value in enumerate (values ):
53
+ numbered .append ('%s. %s' % (index ,str (value )))
54
+ echo ('\n ' .join (numbered )+ '\n ' )
55
+
54
56
def ask_directory (self ,prompt ,default = None ,starting = None ):
55
57
return call ('input("%s", ".", "dir")' % prompt )
56
58
@@ -86,21 +88,16 @@ def ask_completion(self, prompt, values, starting=None):
86
88
def message (self ,message ):
87
89
echo (message )
88
90
89
- @staticmethod
90
- def _print_values (values ):
91
- numbered = []
92
- for index ,value in enumerate (values ):
93
- numbered .append ('%s. %s' % (index ,str (value )))
94
- echo ('\n ' .join (numbered )+ '\n ' )
95
-
96
91
def yes_or_no (self ,prompt ):
97
92
return self .ask_values (prompt , ['yes' ,'no' ])== 'yes'
98
93
99
94
def y_or_n (self ,prompt ):
100
95
return self .yes_or_no (prompt )
101
96
102
- def get (self ,name ):
97
+ def get (self ,name , default = None ):
103
98
vimname = 'g:pymode_rope_%s' % name
99
+ if str (vim .eval ('exists("%s")' % vimname ))== '0' :
100
+ return default
104
101
result = vim .eval (vimname )
105
102
if isinstance (result ,str )and result .isdigit ():
106
103
return int (result )
@@ -121,20 +118,24 @@ def _decode_line(self, line):
121
118
return line .decode (self ._get_encoding ())
122
119
123
120
def _position_to_offset (self ,lineno ,colno ):
124
- result = min (colno ,len (vim . current . buffer [lineno - 1 ])+ 1 )
125
- for line in vim . current . buffer [:lineno - 1 ]:
121
+ result = min (colno ,len (self . buffer [lineno - 1 ])+ 1 )
122
+ for line in self . buffer [:lineno - 1 ]:
126
123
line = self ._decode_line (line )
127
124
result += len (line )+ 1
128
125
return result
129
126
130
127
def get_text (self ):
131
- return self ._decode_line ('\n ' .join (vim . current .buffer ))+ u'\n '
128
+ return self ._decode_line ('\n ' .join (self .buffer ))+ u'\n '
132
129
133
130
def get_region (self ):
134
- start = self ._position_to_offset (* vim . current .buffer .mark ('<' ))
135
- end = self ._position_to_offset (* vim . current .buffer .mark ('>' ))
131
+ start = self ._position_to_offset (* self .buffer .mark ('<' ))
132
+ end = self ._position_to_offset (* self .buffer .mark ('>' ))
136
133
return start ,end
137
134
135
+ @property
136
+ def buffer (self ):
137
+ return vim .current .buffer
138
+
138
139
def _get_cursor (self ):
139
140
lineno ,col = vim .current .window .cursor
140
141
line = self ._decode_line (vim .current .line [:col ])
@@ -155,7 +156,7 @@ def get_cur_dir():
155
156
return vim .eval ('getcwd()' )
156
157
157
158
def filename (self ):
158
- return vim . current .buffer .name
159
+ return self .buffer .name
159
160
160
161
def is_modified (self ):
161
162
return vim .eval ('&modified' )
@@ -164,21 +165,21 @@ def goto_line(self, lineno):
164
165
self .cursor = (lineno ,0 )
165
166
166
167
def insert_line (self ,line ,lineno ):
167
- vim . current .buffer [lineno - 1 :lineno - 1 ]= [line ]
168
+ self .buffer [lineno - 1 :lineno - 1 ]= [line ]
168
169
169
170
def insert (self ,text ):
170
171
lineno ,colno = self .cursor
171
- line = vim . current .buffer [lineno - 1 ]
172
- vim . current .buffer [lineno - 1 ]= line [:colno ]+ text + line [colno :]
172
+ line = self .buffer [lineno - 1 ]
173
+ self .buffer [lineno - 1 ]= line [:colno ]+ text + line [colno :]
173
174
self .cursor = (lineno ,colno + len (text ))
174
175
175
176
def delete (self ,start ,end ):
176
177
lineno1 ,colno1 = self ._offset_to_position (start - 1 )
177
178
lineno2 ,colno2 = self ._offset_to_position (end - 1 )
178
179
lineno ,colno = self .cursor
179
180
if lineno1 == lineno2 :
180
- line = vim . current .buffer [lineno1 - 1 ]
181
- vim . current .buffer [lineno1 - 1 ]= line [:colno1 ]+ line [colno2 :]
181
+ line = self .buffer [lineno1 - 1 ]
182
+ self .buffer [lineno1 - 1 ]= line [:colno1 ]+ line [colno2 :]
182
183
if lineno == lineno1 and colno >= colno1 :
183
184
diff = colno2 - colno1
184
185
self .cursor = (lineno ,max (0 ,colno - diff ))
@@ -194,17 +195,15 @@ def _offset_to_position(self, offset):
194
195
195
196
def filenames (self ):
196
197
result = []
197
- for b in vim .buffers :
198
- if b .name :
199
- result .append (b .name )
198
+ for buffer in vim .buffers :
199
+ if buffer .name :
200
+ result .append (buffer .name )
200
201
return result
201
202
202
203
def save_files (self ,filenames ):
203
204
vim .command ('wall' )
204
205
205
- def reload_files (self ,filenames ,moves = None ):
206
- if moves is None :
207
- moves = dict ()
206
+ def reload_files (self ,filenames ,moves = {}):
208
207
initial = self .filename ()
209
208
for filename in filenames :
210
209
self .find_file (moves .get (filename ,filename ),force = True )
@@ -249,21 +248,20 @@ def _quickfixdefs(self, locations):
249
248
finally :
250
249
os .remove (filename )
251
250
252
- @staticmethod
253
- def _writedefs (locations ,filename ):
251
+ def _writedefs (self ,locations ,filename ):
254
252
tofile = open (filename ,'w' )
255
253
try :
256
254
for location in locations :
257
255
err = '%s:%d: - %s\n ' % (location .filename ,
258
256
location .lineno ,location .note )
257
+ echo (err )
259
258
tofile .write (err )
260
259
finally :
261
260
tofile .close ()
262
261
263
262
def show_doc (self ,docs ,altview = False ):
264
263
if docs :
265
264
cmd = 'call pymode#ShowStr("%s")' % str (docs .replace ('"' ,'\\ "' ))
266
- print cmd
267
265
vim .command (cmd )
268
266
269
267
def preview_changes (self ,diffs ):
@@ -294,8 +292,7 @@ def _add_command(self, name, callback, key, prefix, prekey):
294
292
key = prekey + key .replace (' ' ,'' )
295
293
vim .command ('noremap %s :call %s()<cr>' % (key ,_vim_name (name )))
296
294
297
- @staticmethod
298
- def _add_function (name ,callback ,prefix = False ):
295
+ def _add_function (self ,name ,callback ,prefix = False ):
299
296
globals ()[name ]= callback
300
297
arg = 'None' if prefix else ''
301
298
vim .command ('function! %s()\n ' % _vim_name (name )+
@@ -306,7 +303,6 @@ def _completion_data(self, proposal):
306
303
return proposal
307
304
308
305
_docstring_re = re .compile ('^[\s\t \n ]*([^\n ]*)' )
309
-
310
306
def _extended_completion (self ,proposal ):
311
307
# we are using extended complete and return dicts instead of strings.
312
308
# `ci` means "completion item". see `:help complete-items`