2017-02-22 7 views
0

Я хочу использовать внешний текстовый редактор и пейджер в моей программе python curses. Я использую для него библиотеку подпроцессов. По большей части он отлично работает, только когда я выхожу из текстового редактора (то же самое с nemo и vi), я не могу сделать курсор невидимым снова. Кроме того, после вызова подпроцесса библиотека не очищает экран при выходе. Что мне не хватает?запустить текстовый редактор терминала из программы python curses

P.S. Я знаю 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) 

ответ

1

Вы не сказали библиотеки проклятия, что вы уезжали (когда вы оставили для запуска нано, например), и проклятий вспомнил, в каком состоянии ты сказал это использовать для видимости курсора. Поэтому он игнорирует ваши изменения, потому что он не изменяется, насколько проклинает.

Если вы идете в , оставьте, используйте функцию endwin. Когда вы вернетесь, refresh отменяет это.

Смежные вопросы