improve handling of indenting/whitespace in tab-using buffers
--HG-- branch : pmacs2
This commit is contained in:
parent
3bcf14bbb0
commit
6fd32c02df
|
@ -950,7 +950,8 @@ class Application(object):
|
||||||
for j in xrange(0, w.mode.header):
|
for j in xrange(0, w.mode.header):
|
||||||
k = 0
|
k = 0
|
||||||
for rstr in rstrs[j]:
|
for rstr in rstrs[j]:
|
||||||
rstr.draw(self.win, slot.y_offset + j, slot.x_offset + k, slot.width)
|
#rstr.draw(self.win, slot.y_offset + j, slot.x_offset + k, slot.width)
|
||||||
|
rstr.draw(self.win, slot.y_offset + j, slot.x_offset + k)
|
||||||
#k += len(rstr.string)
|
#k += len(rstr.string)
|
||||||
k += rstr.width(w)
|
k += rstr.width(w)
|
||||||
|
|
||||||
|
|
|
@ -282,7 +282,7 @@ class DeleteLeftWhitespace(Method):
|
||||||
l = w.point_left(p)
|
l = w.point_left(p)
|
||||||
if l is None:
|
if l is None:
|
||||||
return
|
return
|
||||||
while l is not None and w.point_char(l) in (' ', '\n'):
|
while l is not None and w.point_char(l) in (' ', '\t', '\n'):
|
||||||
p = l
|
p = l
|
||||||
l = w.point_left(p)
|
l = w.point_left(p)
|
||||||
if p < c:
|
if p < c:
|
||||||
|
@ -292,7 +292,7 @@ class DeleteRightWhitespace(Method):
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
c = w.logical_cursor()
|
c = w.logical_cursor()
|
||||||
p = c
|
p = c
|
||||||
while w.point_char(p) in (' ', '\n'):
|
while w.point_char(p) in (' ', '\t', '\n'):
|
||||||
r = w.point_right(p)
|
r = w.point_right(p)
|
||||||
if r is None:
|
if r is None:
|
||||||
break
|
break
|
||||||
|
@ -307,7 +307,7 @@ class DeleteLeftSpace(Method):
|
||||||
l = w.point_left(p)
|
l = w.point_left(p)
|
||||||
if l is None:
|
if l is None:
|
||||||
return
|
return
|
||||||
while l is not None and w.point_char(l) == ' ':
|
while l is not None and w.point_char(l) in (' ', '\t'):
|
||||||
p = l
|
p = l
|
||||||
l = w.point_left(p)
|
l = w.point_left(p)
|
||||||
if p < c:
|
if p < c:
|
||||||
|
@ -317,7 +317,7 @@ class DeleteRightSpace(Method):
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
c = w.logical_cursor()
|
c = w.logical_cursor()
|
||||||
p = c
|
p = c
|
||||||
while w.point_char(p) == ' ':
|
while w.point_char(p) in (' ', '\t'):
|
||||||
r = w.point_right(p)
|
r = w.point_right(p)
|
||||||
if r is None:
|
if r is None:
|
||||||
break
|
break
|
||||||
|
@ -490,7 +490,6 @@ class InsertTab(Method):
|
||||||
|
|
||||||
# if no lvl, insert a literal tab
|
# if no lvl, insert a literal tab
|
||||||
if lvl is None:
|
if lvl is None:
|
||||||
#w.insert_string_at_cursor(' ' * w.mode.tabwidth)
|
|
||||||
if w.buffer.usetabs:
|
if w.buffer.usetabs:
|
||||||
# see HACK in buffer
|
# see HACK in buffer
|
||||||
w.insert_string_at_cursor('\t \t')
|
w.insert_string_at_cursor('\t \t')
|
||||||
|
@ -839,7 +838,14 @@ class Redo(Method):
|
||||||
class UnindentBlock(Method):
|
class UnindentBlock(Method):
|
||||||
'''Prepend a tab of space to each line in region'''
|
'''Prepend a tab of space to each line in region'''
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
lvl = w.mode.tabwidth
|
if w.buffer.usetabs:
|
||||||
|
# see HACK in buffer
|
||||||
|
lvl = 4
|
||||||
|
tstr = '\t \t'
|
||||||
|
else:
|
||||||
|
lvl = w.mode.tabwidth
|
||||||
|
tstr = ' ' * lvl
|
||||||
|
|
||||||
cursor = w.logical_cursor()
|
cursor = w.logical_cursor()
|
||||||
if cursor < w.mark:
|
if cursor < w.mark:
|
||||||
p1 = cursor
|
p1 = cursor
|
||||||
|
@ -850,9 +856,11 @@ class UnindentBlock(Method):
|
||||||
else:
|
else:
|
||||||
w.input_line = "Empty kill region"
|
w.input_line = "Empty kill region"
|
||||||
return
|
return
|
||||||
|
|
||||||
lines = w.buffer.lines[p1.y:p2.y]
|
lines = w.buffer.lines[p1.y:p2.y]
|
||||||
|
|
||||||
for i in xrange(0, len(lines)):
|
for i in xrange(0, len(lines)):
|
||||||
if lines[i].startswith(' '):
|
if lines[i].startswith(tstr):
|
||||||
lines[i] = lines[i][lvl:]
|
lines[i] = lines[i][lvl:]
|
||||||
w.buffer.delete(Point(0, p1.y), Point(0, p2.y))
|
w.buffer.delete(Point(0, p1.y), Point(0, p2.y))
|
||||||
w.buffer.insert_string(Point(0, p1.y), '\n'.join(lines) + '\n')
|
w.buffer.insert_string(Point(0, p1.y), '\n'.join(lines) + '\n')
|
||||||
|
@ -870,7 +878,13 @@ class IndentBlock(Method):
|
||||||
w.input_line = "Empty kill region"
|
w.input_line = "Empty kill region"
|
||||||
return
|
return
|
||||||
lines = w.buffer.lines[p1.y:p2.y]
|
lines = w.buffer.lines[p1.y:p2.y]
|
||||||
tstr = ' ' * w.mode.tabwidth
|
|
||||||
|
if w.buffer.usetabs:
|
||||||
|
# see HACK in buffer
|
||||||
|
tstr = '\t \t'
|
||||||
|
else:
|
||||||
|
tstr = ' ' * w.mode.tabwidth
|
||||||
|
|
||||||
for i in xrange(0, len(lines)):
|
for i in xrange(0, len(lines)):
|
||||||
lines[i] = tstr + lines[i]
|
lines[i] = tstr + lines[i]
|
||||||
w.buffer.delete(Point(0, p1.y), Point(0, p2.y))
|
w.buffer.delete(Point(0, p1.y), Point(0, p2.y))
|
||||||
|
|
Loading…
Reference in New Issue