branch : pmacs2
This commit is contained in:
moculus 2008-10-29 14:58:06 +00:00
parent 93ca1881bf
commit 2953f52068
8 changed files with 137 additions and 130 deletions

View File

@ -3,7 +3,7 @@ import curses, curses.ascii, getpass, os, re, string, sys, termios, time
import traceback
from subprocess import Popen, PIPE, STDOUT
import buffer, buffer.about, buffer.color
import buffer, buffer.about, buffer.color, buffer.console, buffer.data, buffer.fs
import bufferlist, color, completer, keyinput, method, minibuffer, mode
import util, window
from point import Point
@ -163,10 +163,10 @@ class Application(object):
# initialize our buffers
# note that the first buffer in buffers will be initially visible
buffers.append(buffer.about.AboutBuffer())
buffers.append(buffer.ConsoleBuffer())
buffers.append(buffer.console.ConsoleBuffer())
if self.rcerror:
buffers.insert(0, buffer.DataBuffer('*RcError*', self.rcerror))
buffers.insert(0, buffer.data.DataBuffer('*RcError*', self.rcerror))
# build windows for our buffers
for b in buffers:
@ -368,7 +368,7 @@ class Application(object):
else:
b = buffer.FileBuffer(path, name=name)
elif os.path.isdir(path):
b = buffer.DirBuffer(path, name=name)
b = buffer.fs.DirBuffer(path, name=name)
mode_name = 'dir'
else:
raise Exception, "not a file or dir: %r" % path
@ -466,7 +466,7 @@ class Application(object):
if self.has_buffer_name(name):
b = self.bufferlist.buffer_names[name]
self.remove_buffer(b)
b = buffer.DataBuffer(name, data)
b = buffer.data.DataBuffer(name, data)
if modename is not None:
b.modename = modename
window.Window(b, self, height=0, width=0)
@ -892,7 +892,7 @@ def open_plain_file(path, name=None, binary=False):
else:
return buffer.FileBuffer(path, name)
elif os.path.isdir(path):
return buffer.DirBuffer(path, name)
return buffer.fs.DirBuffer(path, name)
else:
raise Exception, "can't open %r; unsupported file type" % path

View File

@ -354,48 +354,6 @@ class Buffer(object):
# should not happen
raise Exception, "iiiijjjj"
class DataBuffer(Buffer):
btype = 'data'
def __init__(self, name, data):
Buffer.__init__(self)
self._name = name
self.lines = data.split("\n")
def name(self):
return self._name
def close(self):
pass
def readonly(self):
return True
# console is another singleton
console = None
class ConsoleBuffer(Buffer):
btype = 'console'
modename = 'console'
def __new__(cls, *args, **kwargs):
global console
if console is None:
b = object.__new__(ConsoleBuffer, *args, **kwargs)
console = b
return console
def __init__(self):
Buffer.__init__(self)
self.clear()
def clear(self):
lines = ['Python Console\n',
"Evaluate python expressions in the editor's context (self)\n",
'Press Control-] to exit\n']
console.set_data(''.join(lines), force=True)
def name(self):
return '*Console*'
def changed(self):
return False
def close(self):
global console
console = None
def readonly(self):
return True
class InterpreterPipeError(Exception):
pass
@ -738,80 +696,3 @@ class Binary32Buffer(FileBuffer):
return '\n'.join(lines)
def write_filter(self, data):
return ''.join(self.rawdata)
class DirBuffer(Buffer):
btype = 'dir'
def __init__(self, path, name=None):
Buffer.__init__(self)
self.path = os.path.realpath(path)
def changed(self):
return False
def readonly(self):
return True
def name(self):
return self.path
def path_exists(self):
return os.path.exists(self.path)
def _get_names(self):
if not self.path_exists():
raise Exception, "directory %r does not exists" % self.path
names = os.listdir(self.path)
if self.path != '/':
names.insert(0, '..')
names.insert(0, '.')
return names
def _make_path(self, name):
return os.path.join(self.path, name)
def _get_lines(self):
names = self._get_names()
fieldlines = []
maxlens = [0] * 5
for name in names:
path = self._make_path(name)
fields = dirutil.path_fields(path, name)
for i in range(0, 5):
try:
maxlens[i] = max(maxlens[i], len(fields[i]))
except:
raise Exception, '%d %r' % (i, fields[i])
fieldlines.append(fields)
fieldlines.sort(cmp=dirutil.path_sort)
fmt = '%%%ds %%-%ds %%-%ds %%%ds %%%ds %%s' % tuple(maxlens)
lines = []
for fields in fieldlines:
s = fmt % fields
lines.append(s)
return lines
def open(self):
self.lines = self._get_lines()
def reload(self):
lines = self._get_lines()
self.set_lines(lines, force=True)
def save(self, force=False):
raise Exception, "can't save a directory buffer"
def save_as(self, path):
raise Exception, "can't save a directory buffer"
class PathListBuffer(DirBuffer):
btype = 'pathlist'
def __init__(self, name, paths):
Buffer.__init__(self)
self.paths = list(paths)
self.path = os.getcwd()
self._name = name
def path_exists(self):
raise Exception
def _get_names(self):
cwd = os.getcwd()
return [x.replace(cwd, '.', 1) for x in self.paths]
def _make_path(self, name):
if name.startswith('.'):
return name.replace('.', os.getcwd(), 1)
else:
return name
def name(self):
return self._name

View File

@ -1,6 +1,7 @@
import re
import lex
from buffer import Buffer, DataBuffer
from buffer import Buffer
from buffer.data import DataBuffer
from highlight import Highlighter
# NOTE: this highlighter will not reprocess the data given. it is intended to

30
buffer/console.py Normal file
View File

@ -0,0 +1,30 @@
from buffer import Buffer
# console is another singleton
console = None
class ConsoleBuffer(Buffer):
btype = 'console'
modename = 'console'
def __new__(cls, *args, **kwargs):
global console
if console is None:
b = object.__new__(ConsoleBuffer, *args, **kwargs)
console = b
return console
def __init__(self):
Buffer.__init__(self)
self.clear()
def clear(self):
lines = ['Python Console\n',
"Evaluate python expressions in the editor's context (self)\n",
'Press Control-] to exit\n']
console.set_data(''.join(lines), force=True)
def name(self):
return '*Console*'
def changed(self):
return False
def close(self):
global console
console = None
def readonly(self):
return True

14
buffer/data.py Normal file
View File

@ -0,0 +1,14 @@
from buffer import Buffer
class DataBuffer(Buffer):
btype = 'data'
def __init__(self, name, data):
Buffer.__init__(self)
self._name = name
self.lines = data.split("\n")
def name(self):
return self._name
def close(self):
pass
def readonly(self):
return True

79
buffer/fs.py Normal file
View File

@ -0,0 +1,79 @@
import dirutil, os
from buffer import Buffer
class DirBuffer(Buffer):
btype = 'dir'
def __init__(self, path, name=None):
Buffer.__init__(self)
self.path = os.path.realpath(path)
def changed(self):
return False
def readonly(self):
return True
def name(self):
return self.path
def path_exists(self):
return os.path.exists(self.path)
def _get_names(self):
if not self.path_exists():
raise Exception, "directory %r does not exists" % self.path
names = os.listdir(self.path)
if self.path != '/':
names.insert(0, '..')
names.insert(0, '.')
return names
def _make_path(self, name):
return os.path.join(self.path, name)
def _get_lines(self):
names = self._get_names()
fieldlines = []
maxlens = [0] * 5
for name in names:
path = self._make_path(name)
fields = dirutil.path_fields(path, name)
for i in range(0, 5):
try:
maxlens[i] = max(maxlens[i], len(fields[i]))
except:
raise Exception, '%d %r' % (i, fields[i])
fieldlines.append(fields)
fieldlines.sort(cmp=dirutil.path_sort)
fmt = '%%%ds %%-%ds %%-%ds %%%ds %%%ds %%s' % tuple(maxlens)
lines = []
for fields in fieldlines:
s = fmt % fields
lines.append(s)
return lines
def open(self):
self.lines = self._get_lines()
def reload(self):
lines = self._get_lines()
self.set_lines(lines, force=True)
def save(self, force=False):
raise Exception, "can't save a directory buffer"
def save_as(self, path):
raise Exception, "can't save a directory buffer"
class PathListBuffer(DirBuffer):
btype = 'pathlist'
def __init__(self, name, paths):
Buffer.__init__(self)
self.paths = list(paths)
self.path = os.getcwd()
self._name = name
def path_exists(self):
raise Exception
def _get_names(self):
cwd = os.getcwd()
return [x.replace(cwd, '.', 1) for x in self.paths]
def _make_path(self, name):
if name.startswith('.'):
return name.replace('.', os.getcwd(), 1)
else:
return name
def name(self):
return self._name

View File

@ -1,7 +1,8 @@
import os, commands, re, sets, tempfile
from subprocess import Popen, PIPE, STDOUT
import buffer, completer, default, dirutil, regex, util, window
import buffer, buffer.console
import completer, default, dirutil, regex, util, window
import mode.mini
from point import Point
@ -144,7 +145,7 @@ class OpenConsole(Method):
def execute(self, w, **vargs):
a = w.application
if not a.has_buffer_name('*Console*'):
b = buffer.ConsoleBuffer()
b = buffer.console.ConsoleBuffer()
a.add_buffer(b)
window.Window(b, a)
b = a.bufferlist.get_buffer_by_name('*Console*')

View File

@ -1,5 +1,6 @@
import commands, dirutil, grp, method, mode, os.path, pwd, re
import buffer, window
import buffer, buffer.fs
import window
from lex import Grammar, PatternRule, RegionRule, PatternGroupRule
from point import Point
from method import Method, Argument
@ -56,7 +57,7 @@ class DirGrep(Method):
(status, output) = commands.getstatusoutput(cmd)
paths = [x for x in output.split('\n') if x]
bufname = '*%s*' % self.name.title()
b = buffer.PathListBuffer(bufname, paths)
b = buffer.fs.PathListBuffer(bufname, paths)
b.modename = 'dir'
b.open()
window.Window(b, w.application, height=0, width=0)