2017-02-22 33 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

あなたはあなたがそれを伝えていたものを状態(あなたは、ナノを実行するために去ったとき、たとえば、)あなたが残していたcursesライブラリを伝え、そして呪いは覚えてませんでしたカーソルの可視性のために使用する。なぜなら、cursesが知っている限り変更されていないからです。

の場合はのままにしてください。endwin機能を使用してください。あなたが戻ってくると、refreshは元に戻す。

関連する問題