Further to my previous question (print number and index of selected lines in text editor), i'd like to know if it's possible to detect if characters are selected in text editor.
1 Answer
The selection spans from line current_line_index
beginning at current_character
to select_line
ending at select_end_character
.
If these coincide, there is no character selected.
So given you know the line and column of your character you can check yourself.
However current_character
and select_end_character
are byte offsets.
Python uses unicode points. So unless you are using pure ASCII you need to convert the char position to byte offset.
See https://en.wikipedia.org/wiki/UTF-8
The conversion is a bit cumbersome. Something like
from itertools import islice
txt_line = "\u03A0\u2764\u2600\u2602This is a Test"
col = 9
print(txt_line)
ubounds = [0x80, 0x800, 0x10000, 0x110000]
offset = 0
#char is actually an immutable newly created string...
for char in islice(txt_line, 0, col):
code_point = ord(char)
for size, ub in enumerate(ubounds):
if code_point < ub:
offset += size + 1
break
print(
"byte at %d: %d - char: %d" % (
offset,
bytes(txt_line, 'utf-8')[offset],
ord(txt_line[col])
)
)
-
$\begingroup$ Thank you for these explanations, thanks to you I managed to make what I wished. Thank you very much. $\endgroup$ Commented Jul 16, 2015 at 21:59