parent
0b9640b05f
commit
36d363c7bd
|
@ -58,6 +58,7 @@ class Buffer(object):
|
|||
self.nl = nl
|
||||
self.modified = False
|
||||
self.highlights = {}
|
||||
self.indentlvl = 4
|
||||
|
||||
# basic file operation stuff
|
||||
def _open_file_r(self, path):
|
||||
|
|
|
@ -262,9 +262,9 @@ class DeleteRight(Method):
|
|||
def _execute(self, w, **vargs):
|
||||
cursor = w.logical_cursor()
|
||||
line = w.buffer.lines[cursor.y]
|
||||
if len(line[cursor.x:]) >= 4 and line[:cursor.x + 4].isspace():
|
||||
w.kill(Point(cursor.x, cursor.y),
|
||||
Point(cursor.x + 4, cursor.y))
|
||||
lvl = w.mode.tabwidth
|
||||
if len(line[cursor.x:]) >= lvl and line[:cursor.x + lvl].isspace():
|
||||
w.kill(Point(cursor.x, cursor.y), Point(cursor.x + lvl, cursor.y))
|
||||
else:
|
||||
w.right_delete()
|
||||
class DeleteLeftWord(Method):
|
||||
|
@ -723,8 +723,9 @@ class Redo(Method):
|
|||
w.set_error("%s" % (e))
|
||||
|
||||
class UnindentBlock(Method):
|
||||
'''Prepend 4 spaces to each line in region'''
|
||||
'''Prepend a tab of space to each line in region'''
|
||||
def _execute(self, w, **vargs):
|
||||
lvl = w.mode.tabwidth
|
||||
cursor = w.logical_cursor()
|
||||
if cursor < w.mark:
|
||||
p1 = cursor
|
||||
|
@ -738,11 +739,11 @@ class UnindentBlock(Method):
|
|||
lines = w.buffer.lines[p1.y:p2.y]
|
||||
for i in range(0, len(lines)):
|
||||
if lines[i].startswith(' '):
|
||||
lines[i] = lines[i][4:]
|
||||
lines[i] = lines[i][lvl:]
|
||||
w.buffer.delete(Point(0, p1.y), Point(0, p2.y))
|
||||
w.buffer.insert_string(Point(0, p1.y), '\n'.join(lines) + '\n')
|
||||
class IndentBlock(Method):
|
||||
'''Add 4 spaces to each line in region'''
|
||||
'''Prepend a tab of space to each line in region'''
|
||||
def _execute(self, w, **vargs):
|
||||
cursor = w.logical_cursor()
|
||||
if cursor < w.mark:
|
||||
|
@ -954,3 +955,9 @@ class SetConfigVariable(Method):
|
|||
w.set_error("param %r set to %r" % (name, value))
|
||||
else:
|
||||
w.set_error("previously unset param %r set to %r" % (name, value))
|
||||
|
||||
class SetTabWidth(Method):
|
||||
args = [arg('width', t=type(0), p="Tab Width: ", h='New tab width for buffer')]
|
||||
def _execute(self, w, **vargs):
|
||||
w.mode.tabwidth = vargs['width']
|
||||
w.set_error('Tab width set to %d' % w.mode.tabwidth)
|
||||
|
|
12
mode/c.py
12
mode/c.py
|
@ -104,6 +104,7 @@ class CTabber(tab.StackTabber):
|
|||
tab.StackTabber._handle_open_token(self, currlvl, y, i)
|
||||
return currlvl
|
||||
def _handle_close_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
self._opt_pop('cont')
|
||||
currlvl = tab.StackTabber._handle_close_token(self, currlvl, y, i)
|
||||
token = self.get_token(y, i)
|
||||
|
@ -115,9 +116,10 @@ class CTabber(tab.StackTabber):
|
|||
pass
|
||||
else:
|
||||
if token.fqname() != 'macro.delimiter':
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if fqname == 'delimiter' and token.string == ';':
|
||||
|
@ -128,7 +130,7 @@ class CTabber(tab.StackTabber):
|
|||
|
||||
elif fqname == 'keyword':
|
||||
if token.string in ('do', 'else', 'for', 'if', 'while'):
|
||||
self._append('cond', currlvl + 4)
|
||||
self._append('cond', currlvl + w)
|
||||
elif token.string == 'break':
|
||||
self._opt_pop('case', 'while', 'for')
|
||||
elif token.string == 'continue':
|
||||
|
@ -136,14 +138,14 @@ class CTabber(tab.StackTabber):
|
|||
elif token.string == 'case':
|
||||
self._opt_pop('case')
|
||||
currlvl = self.get_curr_level()
|
||||
self._opt_append('case', currlvl + 4)
|
||||
self._opt_append('case', currlvl + w)
|
||||
|
||||
elif fqname == 'string.start':
|
||||
self._opt_append('string', None)
|
||||
elif fqname == 'string.end':
|
||||
self._opt_pop('string')
|
||||
if self.is_rightmost_token(y, i):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
|
||||
# TODO: this could be a lot better
|
||||
elif fqname == 'macro':
|
||||
|
@ -172,7 +174,7 @@ class CTabber(tab.StackTabber):
|
|||
not fqname == 'spaces' and
|
||||
not fqname == 'eol' and
|
||||
token.string not in ('}', ';', '(', '{', '[', ',')):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
|
||||
class C(mode.Fundamental):
|
||||
|
|
12
mode/java.py
12
mode/java.py
|
@ -85,6 +85,7 @@ class JavaTabber(CTabber):
|
|||
currlvl = tab.StackTabber._handle_open_token(self, currlvl, y, i)
|
||||
return currlvl
|
||||
def _handle_close_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
self._opt_pop('cont')
|
||||
currlvl = tab.StackTabber._handle_close_token(self, currlvl, y, i)
|
||||
token = self.get_token(y, i)
|
||||
|
@ -95,9 +96,10 @@ class JavaTabber(CTabber):
|
|||
elif self._peek_name() == 'cond':
|
||||
pass
|
||||
else:
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if fqname == 'delimiter' and token.string == ';':
|
||||
|
@ -107,7 +109,7 @@ class JavaTabber(CTabber):
|
|||
|
||||
elif fqname == 'keyword':
|
||||
if token.string in ('do', 'else', 'for', 'if', 'while'):
|
||||
self._append('cond', currlvl + 4)
|
||||
self._append('cond', currlvl + w)
|
||||
elif token.string == 'break':
|
||||
self._opt_pop('case', 'while', 'for')
|
||||
elif token.string == 'continue':
|
||||
|
@ -115,14 +117,14 @@ class JavaTabber(CTabber):
|
|||
elif token.string == 'case':
|
||||
self._opt_pop('case')
|
||||
currlvl = self.get_curr_level()
|
||||
self._opt_append('case', currlvl + 4)
|
||||
self._opt_append('case', currlvl + w)
|
||||
|
||||
elif fqname == 'string.start':
|
||||
self._opt_append('string', None)
|
||||
elif fqname == 'string.end':
|
||||
self._opt_pop('string')
|
||||
if self.is_rightmost_token(y, i):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
|
||||
# TODO: this could be a lot better
|
||||
elif fqname == 'macro':
|
||||
|
@ -150,7 +152,7 @@ class JavaTabber(CTabber):
|
|||
not fqname == 'null' and
|
||||
not fqname == 'eol' and
|
||||
token.string not in ('}', ';', '(', '{', '[', ',')):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
|
||||
class Java(mode.Fundamental):
|
||||
|
|
|
@ -44,10 +44,11 @@ class JavascriptTabber(tab.StackTabber):
|
|||
t = highlighter.tokens[y][0]
|
||||
return t.name == 'reserved' and t.string == 'function'
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if token.name == 'operator' and token.string == '=':
|
||||
self._opt_append("cont", currlvl + 4)
|
||||
self._opt_append("cont", currlvl + w)
|
||||
elif token.name == 'delimiter' and token.string == ";":
|
||||
self._opt_pop("cont")
|
||||
return currlvl
|
||||
|
|
10
mode/perl.py
10
mode/perl.py
|
@ -142,6 +142,7 @@ class PerlTabber(tab.StackTabber):
|
|||
currlvl = tab.StackTabber._handle_open_token(self, currlvl, y, i)
|
||||
return currlvl
|
||||
def _handle_close_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
self._opt_pop('cont')
|
||||
currlvl = tab.StackTabber._handle_close_token(self, currlvl, y, i)
|
||||
token = self.get_token(y, i)
|
||||
|
@ -149,9 +150,10 @@ class PerlTabber(tab.StackTabber):
|
|||
if token.string == '}':
|
||||
self._opt_pop('cont')
|
||||
else:
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if fqname == 'delimiter' and token.string == ';':
|
||||
|
@ -162,7 +164,7 @@ class PerlTabber(tab.StackTabber):
|
|||
self._opt_pop('heredoc')
|
||||
self._opt_pop('cont')
|
||||
elif fqname == 'quoted.start':
|
||||
self._opt_append('quoted', currlvl + 4)
|
||||
self._opt_append('quoted', currlvl + w)
|
||||
elif fqname == 'quoted.end':
|
||||
self._opt_pop('cont')
|
||||
self._opt_pop('quoted')
|
||||
|
@ -181,7 +183,7 @@ class PerlTabber(tab.StackTabber):
|
|||
elif fqname == 'perl_string.end':
|
||||
self._opt_pop('string')
|
||||
if self.is_rightmost_token(y, i):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
if self.is_rightmost_token(y, i):
|
||||
if(not fqname.startswith('pod') and
|
||||
not fqname.startswith('heredoc') and
|
||||
|
@ -191,7 +193,7 @@ class PerlTabber(tab.StackTabber):
|
|||
not fqname == 'comment' and
|
||||
not fqname == 'null' and
|
||||
token.string not in ('}', ';', '(', '{', '[', ',')):
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
return currlvl
|
||||
|
||||
class Perl(mode.Fundamental):
|
||||
|
|
|
@ -124,6 +124,7 @@ class PythonTabber(tab.StackTabber):
|
|||
return currlvl
|
||||
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if fqname == 'continuation':
|
||||
|
@ -132,7 +133,7 @@ class PythonTabber(tab.StackTabber):
|
|||
if self.continued:
|
||||
self._opt_append('cont', currlvl)
|
||||
else:
|
||||
self._opt_append('cont', currlvl + 4)
|
||||
self._opt_append('cont', currlvl + w)
|
||||
elif fqname == 'string.start':
|
||||
# while inside of a string, there is no indention leve
|
||||
self._opt_append('string', None)
|
||||
|
@ -157,25 +158,25 @@ class PythonTabber(tab.StackTabber):
|
|||
self.popped = True
|
||||
elif token.string in self.startlevel_names and self.is_leftmost_token(y, i):
|
||||
# we know we will indent exactly once
|
||||
self._append(token.string, currlvl + 4)
|
||||
self._append(token.string, currlvl + w)
|
||||
elif token.string in ('elif', 'else') and self.is_leftmost_token(y, i):
|
||||
# we know we'll unindent at least to the first if/elif
|
||||
if not self.popped and not self.last_popped:
|
||||
self._pop_until('if', 'elif')
|
||||
currlvl = self.get_curr_level()
|
||||
self._append(token.string, currlvl + 4)
|
||||
self._append(token.string, currlvl + w)
|
||||
elif token.string == 'except' and self.is_leftmost_token(y, i):
|
||||
# we know we'll unindent at least to the first try
|
||||
if not self.popped and not self.last_popped:
|
||||
self._pop_until('try')
|
||||
currlvl = self.get_curr_level()
|
||||
self._append(token.string, currlvl + 4)
|
||||
self._append(token.string, currlvl + w)
|
||||
elif token.string == 'finally' and self.is_leftmost_token(y, i):
|
||||
# we know we'll unindent at least to the first try/except
|
||||
if not self.popped and not self.last_popped:
|
||||
self._pop_until('try', 'except')
|
||||
currlvl = self.get_curr_level()
|
||||
self._append(token.string, currlvl + 4)
|
||||
self._append(token.string, currlvl + w)
|
||||
return currlvl
|
||||
|
||||
class Python(mode.Fundamental):
|
||||
|
|
|
@ -93,12 +93,13 @@ class ShTabber(tab.StackTabber):
|
|||
else:
|
||||
return tab.StackTabber._handle_close_token(self, currlvl, y, i)
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
fqname = token.fqname()
|
||||
if token.name == 'continuation':
|
||||
self._opt_append("cont", currlvl + 4)
|
||||
self._opt_append("cont", currlvl + w)
|
||||
elif token.name == 'sh_reserved' and token.string == 'else':
|
||||
currlvl -= 4
|
||||
currlvl -= w
|
||||
elif token.name == 'eol':
|
||||
self._opt_pop("cont")
|
||||
return currlvl
|
||||
|
|
13
mode/sql.py
13
mode/sql.py
|
@ -74,15 +74,16 @@ class SqlTabber(tab.StackTabber):
|
|||
t = highlighter.tokens[y][0]
|
||||
return t.name == 'function'
|
||||
def _handle_other_token(self, currlvl, y, i):
|
||||
w = self.mode.tabwidth
|
||||
token = self.get_token(y, i)
|
||||
s = token.string.lower()
|
||||
if token.name == 'delimiter' and s == ';':
|
||||
self._opt_pop('cont')
|
||||
elif token.name == 'sql_keyword':
|
||||
if s == 'declare':
|
||||
self._append('declare', currlvl + 4)
|
||||
self._append('declare', currlvl + w)
|
||||
elif s == 'begin':
|
||||
currlvl -= 4
|
||||
currlvl -= w
|
||||
elif s == 'end':
|
||||
self._opt_pop('declare')
|
||||
currlvl = self.get_curr_level()
|
||||
|
@ -93,15 +94,15 @@ class SqlTabber(tab.StackTabber):
|
|||
self._opt_pop('loop')
|
||||
currlvl = self.get_curr_level()
|
||||
elif s == 'else':
|
||||
currlvl -= 4
|
||||
currlvl -= w
|
||||
elif s == 'if':
|
||||
self._append('if', currlvl + 4)
|
||||
self._append('if', currlvl + w)
|
||||
elif s in ('while', 'for'):
|
||||
self._append('loop', currlvl + 4)
|
||||
self._append('loop', currlvl + w)
|
||||
|
||||
if self.is_rightmost_token(y, i):
|
||||
if not self._empty() and token.name == 'continuation':
|
||||
self._append('cont', currlvl + 4)
|
||||
self._append('cont', currlvl + w)
|
||||
elif token.name == 'eol' and not self.markers:
|
||||
self._opt_pop("cont")
|
||||
return currlvl
|
||||
|
|
Loading…
Reference in New Issue