我想更新这个问题,以防其他人在网上搜索这个问题并偶然发现这个问题。
好的,所以答案实际上非常简单,需要阅读 python curses 文档中列出的所有函数。
我所做的是制作了一个 3 状态机:状态 1:正常模式(仅显示文本),状态 2:高亮模式,允许光标在窗口周围移动,状态 3:高亮模式,它只能从左侧有限移动右移文本并在移动时突出显示文本。
为了完成这个任务,它只需要一些基本的curses 函数调用。
我制作了单独的窗口,但我只假设一个窗口进行解释。
在窗口中显示文本,坚持:
window.addstr()
window.refresh()
用于移动光标:
#get current cursor position
curr_y, curr_x = window.getyx()
# depending on direction, update the cursor with
next_y, next_x = get_next_direction()
# place cursor in new position
window.move(next_y, next_x)
window.refresh()
一旦光标在高亮的起点上,按'v'进入高亮状态,并限制光标的移动,更改所选文本的属性:
# get current cursor position
curr_y, curr_x = window.getyx()
# save position for later use
start_y = curr_y; start_x = curr_x
# loop until 'v' is pressed again
while highlight_state:
# change the attribute of the current character, for 1 character only, to reverse
window.chgat(curr_y,curr_x, 1, curses.A_REVERSE)
curr_y, curr_x = get_next_direction()
# save end state, this is buggy obviously, but you get the point
end_y = curr_y; end_x = curr_X
现在从头到尾提取该信息
# get integer representation of char at positiong
outstr = ''
#from start to end
char_as_int = windows.inch(y,x)
char = char_as_int & 0000FF
attr = char_as_int & FFFF00 #not useful here, but maybe later
outstr += char
就是这样!我还尝试了另一种方法来保存突出显示的材料,该材料基本上是将 x,y 坐标转换为正在显示的字符串的索引,但是让以字符串表示形式(换行符、制表符等)发出,另外是只是更难做到。
如果有人对更有效/更清洁的方法有意见,请回复!