从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):

我想在python curses程序中使用外部终端文本编辑器和寻呼机。我使用子流程库来实现它。在大多数情况下,它工作正常,除非我退出文本编辑器(与
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会让你失去信心