从python curses程序运行终端文本编辑器
我想在python curses程序中使用外部终端文本编辑器和寻呼机。我使用子流程库来实现它。在大多数情况下,它工作正常,除非我退出文本编辑器(与从python curses程序运行终端文本编辑器,python,text-editor,curses,Python,Text Editor,Curses,我想在python curses程序中使用外部终端文本编辑器和寻呼机。我使用子流程库来实现它。在大多数情况下,它工作正常,除非我退出文本编辑器(与nemo和vi相同),否则无法再次使光标不可见。此外,在调用子流程后,库在退出时不会清理屏幕。我错过了什么 另外,我知道curses.textpad,但我更喜欢使用外部编辑器和寻呼机 这里有一个程序: import curses import subprocess class tui(object): def __init__(self):
nemo
和vi
相同),否则无法再次使光标不可见。此外,在调用子流程后,库在退出时不会清理屏幕。我错过了什么
另外,我知道curses.textpad
,但我更喜欢使用外部编辑器和寻呼机
这里有一个程序:
import curses
import subprocess
class tui(object):
def __init__(self):
pass
def setup(self, stdscr):
self.stdscr = stdscr
curses.use_default_colors()
curses.init_pair(1, curses.COLOR_WHITE, -1)
self.maxY, self.maxX = self.stdscr.getmaxyx()
try:
curses.curs_set(0)
except:
pass
self.win = curses.newwin(self.maxY, self.maxX, 0, 0)
self.stdscr.nodelay(0)
self.draw()
while True:
try:
c = self.win.getch()
ret = self.keypress(c)
if (ret == -1):
return
except KeyboardInterrupt:
break
def draw(self):
self.win.erase()
self.win = curses.newwin(self.maxY, self.maxX, 0, 0)
self.win.box()
self.win.refresh()
def nano(self):
curses.savetty()
subprocess.run("nano")
curses.resetty()
curses.curs_set(0)
def less(self):
curses.savetty()
subprocess.run(["less", "/etc/fstab"])
curses.resetty()
curses.curs_set(0)
def keypress(self, char):
if char == curses.KEY_EXIT or char == ord('q'):
return -1
if char == ord('e'):
self.nano()
self.draw()
return
if char == ord('l'):
self.less()
self.draw()
return
if __name__ == '__main__':
mytui = tui()
curses.wrapper(mytui.setup)
您没有告诉curses库您要离开(例如,当您离开运行nano时),并且curses记得您告诉它使用什么状态来显示光标。所以它忽略了你的改变,因为就诅咒者所知,它并没有改变
如果要离开,请使用该功能。当您返回时,a将撤消该操作。您没有告诉curses库您要离开(例如,当您离开运行nano时),并且curses记住了您告诉它使用什么状态来显示光标。所以它忽略了你的改变,因为就诅咒者所知,它并没有改变 如果要离开,请使用该功能。当你回来的时候,a会让你失去信心