improved handling of encodings/utf-8/curses

--HG--
branch : pmacs2
This commit is contained in:
Erik Osheim 2010-06-04 00:10:27 -04:00
parent c7070c2d01
commit 9b57b04658
4 changed files with 47 additions and 5 deletions

View File

@ -858,7 +858,8 @@ class Application(object):
char = chr(junk & 255) char = chr(junk & 255)
attr = color.build(fg, bg) attr = color.build(fg, bg)
try: try:
self.addstr(sy, sx, char, attr) #self.addstr(sy, sx, char, attr)
self.win.addstr(sy, sx, char, attr)
except curses.error: except curses.error:
raise DrawError("(%d, %d, %r, %r) v. (%d, %d)" % raise DrawError("(%d, %d, %r, %r) v. (%d, %d)" %
(sy, sx, fg, bg, self.y, self.x)) (sy, sx, fg, bg, self.y, self.x))
@ -984,9 +985,12 @@ class Application(object):
limit = util.get_margin_limit(w, 80) limit = util.get_margin_limit(w, 80)
if limit < self.x: if limit < self.x:
for j in xrange(0, slot.height): for j in xrange(0, slot.height):
char = chr(self.win.inch(j + slot.y_offset, limit) & 255) #char = chr(self.win.inch(j + slot.y_offset, limit) & 255)
attr = color.build('default', shade, 'bold') #attr = color.build('default', shade, 'bold')
self.addstr(j + slot.y_offset, limit + w.mode.lmargin, char, attr) #self.addstr(j + slot.y_offset, limit + w.mode.lmargin, char, attr)
self.highlight_char(j + slot.y_offset,
limit + w.mode.lmargin,
fg='default', bg=shade)
def _draw_slot(self, i): def _draw_slot(self, i):
slot = self.bufferlist.slots[i] slot = self.bufferlist.slots[i]

View File

@ -632,7 +632,7 @@ class FileBuffer(Buffer):
f.close() f.close()
self.store_checksum(data) self.store_checksum(data)
data = self.read_filter(data) data = self.read_filter(data)
codec = chardet.detect(data)['encoding'] or 'utf-8' codec = chardet.detect(data).get('encoding') or 'utf-8'
self.codec = codec.lower() self.codec = codec.lower()
else: else:
data = '' data = ''

15
code_examples/quijote Normal file
View File

@ -0,0 +1,15 @@
En la literatura española, hay dos personajes de fama universal. Don Quijote es
el protagonista central de la primera novela moderna, "El ingenioso hidalgo don
Quijote de la Mancha". Esta novela es una sátira de los libros de caballerías,
pero representa también una visión total y compleja de la vida española. Don
Quijote y su compañero Sancho Panza son antitéticos; donde uno es valiente, el
otro es cobarde; donde uno es idealista, el otro es práctico. Los dos se
complementan para formar una imagen de España y del espanol del siglo XVII
tanto como del español de hoy.
En cambio don Juan Tenorio, personaje de ficción en dos dramas, uno del siglo
XVII y el otro del siglo XIX, es un hombre irrespetuoso, cínico, satirico,
irresponsable, egoísta, gran amante de las mujeres, héroe rebelde y finalmente
símbolo del machismo latino. Pero es una personalidad que, por su espíritu de
independencia, libertad y deseo de romper con los convencionalismos sociales
cautiva la imaginación de los españoles y de todo el mundo.

View File

@ -184,3 +184,26 @@ class Pwd(Method):
w.set_error("Directory %s" % cwd) w.set_error("Directory %s" % cwd)
else: else:
w.set_error("Directory %s/" % os.getcwd()) w.set_error("Directory %s/" % os.getcwd())
class GetBufferCodec(Method):
'''Print the buffer's current codec'''
def _execute(self, w, **vargs):
w.set_error('Codec is %r' % w.buffer.codec)
class SetBufferCodec(Method):
'''Print the buffer's current codec'''
args = [arg('codec', p="Codec Name: ",
dv=lambda w: w.buffer.codec, h="name of the codec to use")]
def _execute(self, w, **vargs):
codec = vargs['codec']
try:
u''.encode(codec)
except:
w.set_error('%r is not a valid codec' % codec)
return
w.set_error('Reassigning codec to %r' % codec)
u = w.buffer.make_string()
s = u.encode(w.buffer.codec)
w.buffer.codec = codec
u = s.decode(codec)
w.buffer.set_data(u, force=True)