Skip to content

Commit edb5b3b

Browse files
committed
Merge branch 'release/0.7.4b'
2 parents 6acddb2 + efe4bb3 commit edb5b3b

File tree

12 files changed

+410
-251
lines changed

12 files changed

+410
-251
lines changed

Changelog.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Changelog
22
=========
33

4-
## 2013-12-02 0.7.3b
4+
## 2013-12-02 0.7.4b
55
--------------------
66
* Update indentation support;
77
* Python3 support;

autoload/pymode/lint.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ fun! pymode#lint#auto() "{{{
1111
PymodePython from pymode import auto
1212
PymodePython auto()
1313
cclose
14+
call g:PymodeSigns.clear()
1415
edit
1516
call pymode#wide_message("AutoPep8 done.")
1617
endfunction "}}}

autoload/pymode/rope.vim

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,11 @@ endfunction
5353

5454

5555
fun! pymode#rope#find_it()
56-
let l:output = []
56+
let loclist = g:PymodeLocList.current()
57+
let loclist._title = "Occurrences"
5758
call pymode#wide_message('Finding Occurrences ...')
5859
PymodePython rope.find_it()
59-
call pymode#wide_message('')
60-
if !empty(l:output)
61-
let loclist = g:PymodeLocList.current()
62-
let loclist._loclist = l:output
63-
let loclist._title = "Occurrences"
64-
call loclist.show()
65-
end
60+
call loclist.show()
6661
endfunction
6762

6863

autoload/pymode/tools/loclist.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ fun! g:PymodeLocList.show() "{{{
7474
execute max([min([line("$"), g:pymode_quickfix_maxheight]), g:pymode_quickfix_minheight]) . "wincmd _"
7575
if num != winnr()
7676
call setwinvar(winnr(), 'quickfix_title', self._title . ' <' . self._name . '>')
77-
wincmd p
77+
exe num . "wincmd w"
7878
endif
7979
end
8080
endfunction "}}}

doc/pymode.txt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
(__) (__) (__) (_) (_)(_____)(_)\_) (_/\/\_)(_____)(____/(____) ~
77

88

9-
Version: 0.7.3b
9+
Version: 0.7.4b
1010

1111
==============================================================================
1212
CONTENTS *pymode-contents*
@@ -358,25 +358,25 @@ Turn on the rope script *'g:pymode_rope'*
358358
*:PymodeRopeRegenerate* -- Regenerate the project cache
359359

360360
Rope uses a folder inside projects for holding project configuration and data.
361-
Its default name is `.ropeproject` If the folder doesnt exists in current
362-
working directory, parent folders will be checked.
361+
Its default name is `.ropeproject`.
363362

364363
Currently it is used for things such as:
365364

366-
* There is a config.py file in this folder in which you can change project
367-
configurations. Have look at the default config.py file (s created when it
365+
* The config.py file in this folder contains project configuration. Have
366+
a look at the default config.py file (which is created when it
368367
does not exist) for more information.
369368
* It can be used for saving project history, so that the next time you open the
370369
project you can undo past changes.
371-
* It can be used for saving object information to help rope object inference.
372-
* It can be used for saving global names cache which is used in auto-import.
370+
* It can be used to save information about object inferences.
371+
* It can be used to save a global name cache, which is used for auto-import.
373372

374-
If ``.ropeproject`` is not found in the current directory, rope will walk
375-
upwards looking for a ``.ropeproject`` in every dir of the parent path. If
376-
rope finds ``.ropeproject`` in a parent dir, it sets the project for all child
377-
dirs and the scan may be slow for so many dirs and files.
373+
If `.ropeproject` is not found in the current directory, rope will look
374+
recursively for it in parent folders.
375+
Warning: If rope finds `.ropeproject` in a parent dir, it will use it with
376+
all its child directories, which may slow scanning down (because of many,
377+
possibly unrelated, files)
378378

379-
Enable search |.ropeproject| in parent's directories
379+
Enable searching for |.ropeproject| in parent directories
380380
*'g:pymode_rope_lookup_project'*
381381
>
382382
let g:pymode_rope_lookup_project = 1
@@ -385,7 +385,7 @@ Enable search |.ropeproject| in parent's directories
385385
Show documentation for element under cursor ~
386386

387387
Show documentation for object under cursor. *'g:pymode_rope_show_doc_bind'*
388-
Leave empty for disable key binding.
388+
Leave empty to disable the key binding.
389389
>
390390
let g:pymode_rope_show_doc_bind = '<C-c>d'
391391
@@ -397,18 +397,18 @@ Regenerate project cache on every save (if file has been modified)
397397
4.1 Completion ~
398398
*pymode-completion*
399399

400-
By default you could typing <Ctrl-Space> for autocompletion. Will be
400+
By default you can use <Ctrl-Space> for autocompletion. Will be
401401
automatically selected first entry and you can press <Return> to insert in
402402
your code. <C-X><C-O> and <C-P>/<C-N> works too.
403403

404-
Autocompletion is also called by typing a period in |Insert| mode.
404+
Autocompletion is also called by typing a period in |Insert| mode by default.
405405

406406

407407
Turn on code completion support in the plugin *'g:pymode_rope_completion'*
408408
>
409409
let g:pymode_rope_completion = 1
410410
411-
Turn on autocompletion when you typing a period
411+
Turn on autocompletion when typing a period
412412
*'g:pymode_rope_complete_on_dot'*
413413
>
414414
let g:pymode_rope_complete_on_dot = 1
@@ -417,8 +417,8 @@ Keymap for autocomplete *'g:pymode_rope_completion_bind'*
417417
>
418418
let g:pymode_rope_completion_bind = '<C-Space>'
419419
420-
Extended autocompletion (rope could complete objects wich hasnt be imported)
421-
from project *'g:pymode_rope_autoimport'*
420+
Extended autocompletion (rope could complete objects which have not been
421+
imported) from project *'g:pymode_rope_autoimport'*
422422
>
423423
let g:pymode_rope_autoimport = 1
424424

plugin/pymode.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
" vi: fdl=1
2-
let g:pymode_version = "0.7.3b"
2+
let g:pymode_version = "0.7.4b"
33

44
com! PymodeVersion echomsg "Current python-mode version: " . g:pymode_version
55
com! PymodeTroubleshooting call pymode#troubleshooting#test()

pymode/environment.py

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
""" Define interfaces. """
2+
3+
from __future__ import print_function
4+
5+
import vim
6+
import json
7+
import time
8+
import os.path
9+
10+
from .utils import PY2
11+
12+
13+
class VimPymodeEnviroment(object):
14+
15+
""" Vim User interface. """
16+
17+
prefix = '[Pymode]'
18+
19+
def __init__(self):
20+
self.current = vim.current
21+
self.options = dict(encoding=vim.eval('&enc'))
22+
self.options['debug'] = self.var('g:pymode_debug', True)
23+
24+
@property
25+
def curdir(self):
26+
""" Return current working directory. """
27+
28+
return self.var('getcwd()')
29+
30+
@property
31+
def curbuf(self):
32+
""" Return current buffer. """
33+
34+
return self.current.buffer
35+
36+
@property
37+
def cursor(self):
38+
""" Return current window position.
39+
40+
:return tuple: (row, col)
41+
42+
"""
43+
return self.current.window.cursor
44+
45+
@property
46+
def source(self):
47+
""" Return source of current buffer. """
48+
49+
return "\n".join(self.lines)
50+
51+
@property
52+
def lines(self):
53+
""" Iterate by lines in current file.
54+
55+
:return list:
56+
57+
"""
58+
if not PY2:
59+
return self.curbuf
60+
61+
return [l.decode(self.options.get('encoding')) for l in self.curbuf]
62+
63+
def var(self, name, to_bool=False):
64+
""" Get vim variable.
65+
66+
:return vimobj:
67+
68+
"""
69+
70+
value = vim.eval(name)
71+
72+
if to_bool:
73+
try:
74+
value = bool(int(value))
75+
except ValueError:
76+
value = value
77+
return value
78+
79+
def message(self, msg, history=False):
80+
""" Show message to user. """
81+
82+
if history:
83+
return vim.command('echom "%s"' % str(msg))
84+
85+
return vim.command('call pymode#wide_message("%s")' % str(msg))
86+
87+
def user_input(self, msg, default=''):
88+
""" Return user input or default.
89+
90+
:return str:
91+
92+
"""
93+
msg = '%s %s ' % (self.prefix, msg)
94+
95+
if default != '':
96+
msg += '[%s] ' % default
97+
98+
try:
99+
vim.command('echohl Debug')
100+
input_str = vim.eval('input("%s> ")' % msg)
101+
vim.command('echohl none')
102+
except KeyboardInterrupt:
103+
input_str = ''
104+
105+
return input_str or default
106+
107+
def user_confirm(self, msg, yes=False):
108+
""" Get user confirmation.
109+
110+
:return bool:
111+
112+
"""
113+
default = 'yes' if yes else 'no'
114+
action = self.user_input(msg, default)
115+
return action and 'yes'.startswith(action)
116+
117+
def user_input_choices(self, msg, *options):
118+
""" Get one of many options.
119+
120+
:return str: A choosen option
121+
122+
"""
123+
choices = ['%s %s' % (self.prefix, msg)]
124+
choices += [
125+
"%s. %s" % (num, opt) for num, opt in enumerate(options, 1)]
126+
try:
127+
input_str = int(
128+
vim.eval('inputlist(%s)' % self.prepare_value(choices)))
129+
except (KeyboardInterrupt, ValueError):
130+
input_str = 0
131+
132+
if not input_str:
133+
self.message('Cancelled!')
134+
return False
135+
136+
try:
137+
return options[input_str - 1]
138+
except (IndexError, ValueError):
139+
self.error('Invalid option: %s' % input_str)
140+
return self.user_input_choices(msg, *options)
141+
142+
def error(self, msg):
143+
""" Show error to user. """
144+
vim.command('call pymode#error("%s")' % str(msg))
145+
146+
def debug(self, msg, *args):
147+
""" Print debug information. """
148+
149+
if self.options.get('debug'):
150+
print("%s %s [%s]" % (
151+
int(time.time()), msg, ', '.join([str(a) for a in args])))
152+
153+
def stop(self, value=None):
154+
""" Break Vim function. """
155+
156+
cmd = 'return'
157+
if value:
158+
cmd += ' ' + self.prepare_value(value)
159+
vim.command(cmd)
160+
161+
def catch_exceptions(self, func):
162+
""" Decorator. Make execution more silence.
163+
164+
:return func:
165+
166+
"""
167+
168+
def _wrapper(*args, **kwargs):
169+
try:
170+
return func(*args, **kwargs)
171+
except (Exception, vim.error) as e: # noqa
172+
if self.options.get('debug'):
173+
raise
174+
self.error(e)
175+
return None
176+
return _wrapper
177+
178+
def run(self, name, *args):
179+
""" Run vim function. """
180+
181+
vim.command('call %s(%s)' % (name, ", ".join([
182+
self.prepare_value(a) for a in args
183+
])))
184+
185+
def let(self, name, value):
186+
""" Set variable. """
187+
cmd = 'let %s = %s' % (name, self.prepare_value(value))
188+
self.debug(cmd)
189+
vim.command(cmd)
190+
191+
def prepare_value(self, value):
192+
""" Decode bstr to vim encoding.
193+
194+
:return unicode string:
195+
196+
"""
197+
198+
value = json.dumps(value)
199+
if PY2:
200+
value = value.decode('utf-8').encode(self.options.get('encoding'))
201+
202+
return value
203+
204+
def get_offset_params(self, cursor=None, base=""):
205+
""" Calculate current offset.
206+
207+
:return tuple: (source, offset)
208+
209+
"""
210+
row, col = cursor or env.cursor
211+
source = ""
212+
offset = 0
213+
for i, line in enumerate(self.lines, 1):
214+
if i == row:
215+
source += line[:col] + base
216+
offset = len(source)
217+
source += line[col:]
218+
else:
219+
source += line
220+
source += '\n'
221+
env.debug('Get offset', base or None, row, col, offset)
222+
return source, offset
223+
224+
def goto_line(self, line):
225+
""" Go to line. """
226+
227+
vim.command('normal %sggzz' % line)
228+
229+
def goto_file(self, path, cmd='e', force=False):
230+
""" Function description. """
231+
232+
if force or os.path.abspath(path) != self.curbuf.name:
233+
self.debug('read', path)
234+
vim.command("%s %s" % (cmd, path))
235+
236+
def goto_buffer(self, bufnr):
237+
""" Open buffer. """
238+
if str(bufnr) != '-1':
239+
vim.command('buffer %s' % bufnr)
240+
241+
242+
env = VimPymodeEnviroment()

0 commit comments

Comments
 (0)