2010-07-15 30 views
5

ncurses'da bazı bilgileri görüntüleyen bir program yapıyorum ve kullanıcının bir dosyayı düzenlemesine izin vermek için vim'i (system kullanarak) açar. Vim çıktıktan sonra, ncurses ekranı yeniden çizilmeyecek. refresh ve wrefresh hiçbir şeyi yapmaz, bu da benim güzel menümün tamamen çöpe atılmasıyla sonuçlanır.C - ncurses uygulamasından harici programa geri dönme ve geri dön

Böylece, komut satırına geri gönderiliyorum. Menü öğeleri, onlara taşıdığımda yeniden çizilir. şey biraz sonuçlarına etrafında Hareketli şöyle görünür: Gördüğünüz gibi

Tragedy

, artık benim güzel ncurses'in ortamda duyuyorum ,.

ncurses'ı tamamen yırtıp yeniden ayarlayabilirim, ancak bazı şeyler (menü konumu gibi) korunmuyor.

Bunu nasıl doğru yaparım? Bazı harici programları aramanın ve burada zarafetle geri dönmenin daha iyi bir yolu var mı?

cevap

1

Tamamen küfürleri yeniden başlatmak zorunda kalmamıştım. Sonra

def_prog_mode() gibi bir şey yaparsanız endwin()

sistem çağrısını yürütmek ve yenilemek neyi

() o

+0

Teşekkür geri olmalı! Bu işe yarıyor gibi görünüyor, ama her şimdi ve sonra lanetlerimin UI'sine geri dönüyorum ve tuş vuruşlarımın hiçbiri kayıtsız. Bu yüzden programı öldürmek zorundayım. Herhangi bir fikir? –

+0

ncurses'i nasıl başlatıyorsunuz? initscr();/* curses kitaplığını başlatır */ tuş takımı (stdscr, TRUE);/* klavye eşlemesini etkinleştir */ nonl();/* küfürlerin çıkışta NL-> CR/NL yapmamalarını söyleyin */ cbreak();/* giriş karakterlerini birer birer alır, \ n */ noecho() için beklemeyin;/* yankılanma yok */ Giriş yöntemini değiştiren bir şey var mı? Eğer – Tree77

+0

döndüğünüzde cbreak() çağırabiliriz, yukarıdakilerin tümünü yapıyorum, maalesef hala şanssız. –

0

Program durumunuzu curses durumundan ayırın.

Bildiğim tek temiz yol, küfürleri tamamen durdurmak ve yeniden başlatmaktır. Eğer programınız kendi iç durumunu (olması gerektiği gibi) temiz bir kavrama sahipse, o zaman aynı pozisyona geri dönmek kolay olmalıdır.

İyi şanslar!