parent
810bbce37c
commit
5694f12910
|
@ -13,7 +13,7 @@ import mode.console, mode.consolemini
|
||||||
import mode.c, mode.python, mode.perl, mode.nasm, mode.sh, mode.sql, mode.java
|
import mode.c, mode.python, mode.perl, mode.nasm, mode.sh, mode.sql, mode.java
|
||||||
import mode.lisp, mode.elisp, mode.scheme, mode.ocaml
|
import mode.lisp, mode.elisp, mode.scheme, mode.ocaml
|
||||||
import mode.blame, mode.diff, mode.dir
|
import mode.blame, mode.diff, mode.dir
|
||||||
import mode.xml, mode.tt, mode.css, mode.javascript, mode.html
|
import mode.xml, mode.tt, mode.css, mode.javascript, mode.html, mode.hex
|
||||||
import mode.text, mode.text2, mode.mutt
|
import mode.text, mode.text2, mode.mutt
|
||||||
import mode.bds
|
import mode.bds
|
||||||
import mode.rst
|
import mode.rst
|
||||||
|
@ -111,6 +111,7 @@ class Application(object):
|
||||||
'bds': mode.bds.BDS,
|
'bds': mode.bds.BDS,
|
||||||
'rst': mode.rst.RST,
|
'rst': mode.rst.RST,
|
||||||
'java': mode.java.Java,
|
'java': mode.java.Java,
|
||||||
|
'hex': mode.hex.Hex,
|
||||||
|
|
||||||
'ocaml': mode.ocaml.Ocaml,
|
'ocaml': mode.ocaml.Ocaml,
|
||||||
|
|
||||||
|
@ -260,7 +261,7 @@ class Application(object):
|
||||||
return (slot.height, slot.width)
|
return (slot.height, slot.width)
|
||||||
|
|
||||||
# files and stuff
|
# files and stuff
|
||||||
def open_path(self, path, cipher=None, password=None):
|
def open_path(self, path, binary=False, cipher=None, password=None):
|
||||||
path = os.path.abspath(os.path.realpath(util.expand_tilde(path)))
|
path = os.path.abspath(os.path.realpath(util.expand_tilde(path)))
|
||||||
b = self.get_buffer_by_path(path)
|
b = self.get_buffer_by_path(path)
|
||||||
if b is None:
|
if b is None:
|
||||||
|
@ -276,7 +277,10 @@ class Application(object):
|
||||||
mode_name = None
|
mode_name = None
|
||||||
if cipher is None:
|
if cipher is None:
|
||||||
if not os.path.exists(path) or os.path.isfile(path):
|
if not os.path.exists(path) or os.path.isfile(path):
|
||||||
b = buffer2.FileBuffer(path, name=name)
|
if binary:
|
||||||
|
b = buffer2.BinaryBuffer(path, name=name)
|
||||||
|
else:
|
||||||
|
b = buffer2.FileBuffer(path, name=name)
|
||||||
elif os.path.isdir(path):
|
elif os.path.isdir(path):
|
||||||
b = buffer2.DirBuffer(path, name=name)
|
b = buffer2.DirBuffer(path, name=name)
|
||||||
mode_name = 'dir'
|
mode_name = 'dir'
|
||||||
|
@ -786,9 +790,12 @@ def open_aes_file(path, nl, name=None):
|
||||||
return buffer2.AesBuffer(path, p, nl, name)
|
return buffer2.AesBuffer(path, p, nl, name)
|
||||||
else:
|
else:
|
||||||
raise Exception, "can't open %r; unsupported file type" % path
|
raise Exception, "can't open %r; unsupported file type" % path
|
||||||
def open_plain_file(path, nl, name=None):
|
def open_plain_file(path, nl, name=None, binary=False):
|
||||||
if os.path.isfile(path) or not os.path.exists(path):
|
if os.path.isfile(path) or not os.path.exists(path):
|
||||||
return buffer2.FileBuffer(path, nl, name)
|
if binary:
|
||||||
|
return buffer2.BinaryBuffer(path, nl, name)
|
||||||
|
else:
|
||||||
|
return buffer2.FileBuffer(path, nl, name)
|
||||||
elif os.path.isdir(path):
|
elif os.path.isdir(path):
|
||||||
return buffer2.DirBuffer(path, nl, name)
|
return buffer2.DirBuffer(path, nl, name)
|
||||||
else:
|
else:
|
||||||
|
@ -806,7 +813,10 @@ if __name__ == "__main__":
|
||||||
parser.set_defaults(mode=None)
|
parser.set_defaults(mode=None)
|
||||||
parser.set_defaults(cipher='none')
|
parser.set_defaults(cipher='none')
|
||||||
parser.set_defaults(linetype='unix')
|
parser.set_defaults(linetype='unix')
|
||||||
|
parser.set_defaults(binary=False)
|
||||||
|
|
||||||
|
parser.add_option('-b', '--binary', dest='binary', action='store_true',
|
||||||
|
help='open file(s) in hex binary mode')
|
||||||
parser.add_option('-d', '--debug', dest='debug', action='store_true',
|
parser.add_option('-d', '--debug', dest='debug', action='store_true',
|
||||||
help='run in debug mode')
|
help='run in debug mode')
|
||||||
parser.add_option('-e', '--encrypt', dest='cipher', metavar='CIPHER',
|
parser.add_option('-e', '--encrypt', dest='cipher', metavar='CIPHER',
|
||||||
|
@ -863,7 +873,7 @@ if __name__ == "__main__":
|
||||||
i += 1
|
i += 1
|
||||||
auxname = '%s/%d' % (name, i)
|
auxname = '%s/%d' % (name, i)
|
||||||
name = auxname
|
name = auxname
|
||||||
b = f(path, nl, name)
|
b = f(path, nl, name, opts.binary)
|
||||||
b.open()
|
b.open()
|
||||||
buffers.append(b)
|
buffers.append(b)
|
||||||
paths.add(path)
|
paths.add(path)
|
||||||
|
|
39
buffer2.py
39
buffer2.py
|
@ -1,4 +1,4 @@
|
||||||
import datetime, grp, md5, os, pwd, re, sets, shutil, stat
|
import datetime, grp, md5, os, pwd, re, sets, shutil, stat, string
|
||||||
import aes, dirutil, regex, highlight2
|
import aes, dirutil, regex, highlight2
|
||||||
from point2 import Point
|
from point2 import Point
|
||||||
|
|
||||||
|
@ -478,6 +478,43 @@ class AesBuffer(FileBuffer):
|
||||||
def write_filter(self, data):
|
def write_filter(self, data):
|
||||||
return aes.encrypt_data(data, self.password)
|
return aes.encrypt_data(data, self.password)
|
||||||
|
|
||||||
|
class BinaryBuffer(FileBuffer):
|
||||||
|
btype = 'binfile'
|
||||||
|
def __init__(self, path, nl='\n', name=None, numbytes=2):
|
||||||
|
'''fb = FileBuffer(path)'''
|
||||||
|
FileBuffer.__init__(self, path, nl, name)
|
||||||
|
self.numbytes = numbytes
|
||||||
|
def read_filter(self, data):
|
||||||
|
lines = []
|
||||||
|
i = 0
|
||||||
|
while i < len(data):
|
||||||
|
j = 0
|
||||||
|
words = []
|
||||||
|
while j < self.numbytes * 8 and i + j < len(data):
|
||||||
|
nibbles = []
|
||||||
|
for c in data[i + j:i + j + 8]:
|
||||||
|
nibbles.append(string.hexdigits[ord(c) / 16])
|
||||||
|
nibbles.append(string.hexdigits[ord(c) % 16])
|
||||||
|
words.append(''.join(nibbles))
|
||||||
|
j += 8
|
||||||
|
lines.append(' '.join(words))
|
||||||
|
i += self.numbytes * 8
|
||||||
|
return '\n'.join(lines)
|
||||||
|
def write_filter(self, data):
|
||||||
|
bytes = []
|
||||||
|
lastc = None
|
||||||
|
for c in data:
|
||||||
|
if c not in '0123456789abcdefABCDEF':
|
||||||
|
pass
|
||||||
|
elif lastc is None:
|
||||||
|
lastc = c
|
||||||
|
else:
|
||||||
|
bytes.append(chr(int(lastc + c, 16)))
|
||||||
|
lastc = None
|
||||||
|
if lastc is not None:
|
||||||
|
bytes.append(chr(int(lastc + '0', 16)))
|
||||||
|
return ''.join(bytes)
|
||||||
|
|
||||||
class DirBuffer(Buffer):
|
class DirBuffer(Buffer):
|
||||||
btype = 'dir'
|
btype = 'dir'
|
||||||
def __init__(self, path, nl='\n', name=None):
|
def __init__(self, path, nl='\n', name=None):
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
import color, mode2
|
||||||
|
from lex3 import Grammar, PatternRule, RegionRule
|
||||||
|
|
||||||
|
class HexGrammar(Grammar):
|
||||||
|
rules = [
|
||||||
|
PatternRule(r'zero', r"00"),
|
||||||
|
PatternRule(r'printable', r"[2-7][0-9a-f]"),
|
||||||
|
PatternRule(r'byte', r'[0-f][0-f]'),
|
||||||
|
]
|
||||||
|
|
||||||
|
class Hex(mode2.Fundamental):
|
||||||
|
grammar = HexGrammar
|
||||||
|
colors = {
|
||||||
|
'zero': ('magenta', 'default'),
|
||||||
|
'printable': ('green', 'default'),
|
||||||
|
'byte': ('white', 'default'),
|
||||||
|
}
|
||||||
|
def __init__(self, w):
|
||||||
|
mode2.Fundamental.__init__(self, w)
|
||||||
|
def name(self):
|
||||||
|
return "Hex"
|
Loading…
Reference in New Issue