hex mode rules!

--HG--
branch : pmacs2
This commit is contained in:
moculus 2007-10-13 02:58:17 +00:00
parent 0646f6c9da
commit 9f22f9dbc1
5 changed files with 40 additions and 2 deletions

View File

@ -177,6 +177,8 @@ class Application(object):
for c in string.letters + string.digits + string.punctuation:
obj = method.InsertString(c)
self.methods[obj.name] = obj
obj = method.OverwriteChar(c)
self.methods[obj.name] = obj
# window/slot height/width
height = self.y - 2

View File

@ -285,7 +285,10 @@ class Buffer(object):
p2 = Point(0, p.y + 1)
else:
p2 = Point(p.x + 1, p.y)
self.delete(p, p2, act, force)
self.delete(p, p2, act=act, force=force)
def overwrite_char(self, p, c, act=ACT_NORM, force=False):
self.delete_char(p, act=act, force=force)
self.insert_string(p, c, act=act, force=force)
# random
def count_leading_whitespace(self, y):

View File

@ -352,12 +352,21 @@ class Exit(Method):
class InsertString(Method):
_is_method = False
def __init__(self, s):
self.name = "insert-string-%s" % (s)
self.name = "insert-string-%s" % s
self.args = []
self.help = "Insert %r into the current buffer." % s
self.string = s
def _execute(self, w, **vargs):
w.insert_string_at_cursor(self.string)
class OverwriteChar(Method):
_is_method = False
def __init__(self, c):
self.name = 'overwrite-char-%s' % c
self.args = []
self.help = "Overwrite %r into the current buffer." % c
self.char = c
def _execute(self, w, **vargs):
w.overwrite_char_at_cursor(self.char)
# killing/copying/etc.
class Kill(Method):

View File

@ -1,3 +1,4 @@
import string
import color, mode2
from lex3 import Grammar, PatternRule, RegionRule
@ -17,5 +18,13 @@ class Hex(mode2.Fundamental):
}
def __init__(self, w):
mode2.Fundamental.__init__(self, w)
# create all the insert actions for the basic text input
for c in string.letters + string.digits + string.punctuation:
if c in string.hexdigits:
self.add_binding('overwrite-char-%s' % c.lower(), c)
else:
self.del_binding(c)
def name(self):
return "Hex"

View File

@ -534,6 +534,21 @@ class Window(object):
self.application.push_kill(copied)
return copied
# overwriting
def overwrite_char_at_cursor(self, c):
self.overwrite_char(self.logical_cursor(), c)
def overwrite_char(self, p, c):
line = self.buffer.lines[p.y]
if p.x >= len(line):
self.insert_string(p, c)
elif p.x == len(line) - 1:
self.buffer.overwrite_char(p, c)
if p.y < len(self.buffer.lines):
self.cursor = Point(0, p.y + 1)
else:
self.buffer.overwrite_char(p, c)
self.cursor = Point(p.x + 1, p.y)
# insertion
def insert_string_at_cursor(self, s):
self.insert_string(self.logical_cursor(), s)