diff options
author | hut <hut@lavabit.com> | 2010-05-06 12:29:28 +0200 |
---|---|---|
committer | hut <hut@lavabit.com> | 2010-05-10 21:04:47 +0200 |
commit | 30c8fb813f98268d93a091365f051413e4160155 (patch) | |
tree | 897662e7d218fc716b51647074773d02241b9a35 /ranger | |
parent | ccbe8b8d13ebdad09d282da51d118670a566cba5 (diff) | |
download | ranger-30c8fb813f98268d93a091365f051413e4160155.tar.gz |
utf stuff
Diffstat (limited to 'ranger')
-rw-r--r-- | ranger/ext/utfwidth.py | 18 | ||||
-rw-r--r-- | ranger/gui/widgets/console.py | 4 |
2 files changed, 16 insertions, 6 deletions
diff --git a/ranger/ext/utfwidth.py b/ranger/ext/utfwidth.py index bbc67deb..2881a2a0 100644 --- a/ranger/ext/utfwidth.py +++ b/ranger/ext/utfwidth.py @@ -27,14 +27,14 @@ def utf_byte_length(string): if firstord < 0x01111111: return 1 if firstord < 0x10111111: - return 0 # invalid + return 1 # invalid if firstord < 0x11011111: return min(2, len(string)) if firstord < 0x11101111: return min(3, len(string)) if firstord < 0x11110100: return min(4, len(string)) - return 0 # invalid + return 1 # invalid def utf_char_width(string): # XXX @@ -45,6 +45,7 @@ def utf_char_width(string): return WIDE def _utf_char_to_int(string): + # Squash the last 6 bits of each byte together to an integer u = 0 for c in string: u = (u << 6) | (ord(c) & 0b00111111) @@ -56,9 +57,16 @@ def uwid(string): width = 0 while i < end: bytelen = utf_byte_length(string[i:]) - if bytelen: - width += utf_char_width(string[i:i+bytelen]) - else: width += 1 i += bytelen return width + +def uchars(string): + end = len(string) + i = 0 + result = [] + while i < end: + bytelen = utf_byte_length(string[i:]) + result.append(string[i:i+bytelen]) + i += bytelen + return result diff --git a/ranger/gui/widgets/console.py b/ranger/gui/widgets/console.py index 30872639..5a538ce2 100644 --- a/ranger/gui/widgets/console.py +++ b/ranger/gui/widgets/console.py @@ -31,6 +31,7 @@ from ranger.ext.utfwidth import uwid from ranger.container.keymap import CommandArgs from ranger.ext.get_executables import get_executables from ranger.ext.direction import Direction +from ranger.ext.utfwidth import uwid, uchars from ranger.container import History from ranger.container.history import HistoryEmptyException import ranger @@ -264,7 +265,8 @@ class Console(Widget): self.close() pos = self.pos + mod - self.line = self.line[0:pos] + self.line[pos+1:] + chars = uchars(self.line) + self.line = ''.join(chars[0:pos] + chars[pos+1:]) self.move(right=mod) self.on_line_change() |