Ncurses выдают вокруг функций, которые печатают в окно - PullRequest
0 голосов
/ 29 января 2019

В настоящее время я делаю простое меню ncurses для более быстрого выполнения команд терминала при работе над проектами.Я новичок в библиотеке и продолжаю иметь ту же проблему.Я прочитал документацию для соответствующих функций, но, кажется, ничего не показывает.Я надеялся, что кто-то более опытный узнает, почему существует проблема.

Функция, которая выполняет «make main», была основной, вызывающей проблемы

void makeMain( WINDOW *window ) {

    wrefresh(window);
    mvwprintw( window, 1, 1, "test" ); 
    wrefresh(window);

    std::system("make main");
    wrefresh(window);
    refresh();

    wmove( window, 1, 1 ); 
    refresh();
    wrefresh( window ); 

}

функция запускается из другогоfunction

void coordinateUserInput( int max, std::vector<command> commandslist, WINDOW *output ) {

    cbreak();
    noecho();

    wrefresh(stdscr);

    //prep work

    char key_pressed;

    bool can_go_up;
    bool can_go_down;

    int y;
    int x;

    const int &start_line = 3;
    const int &finish_line = commandslist.size() + 2;

    bool keep_going{1};
    //

    wmove( stdscr, 3, 2 );
    refresh();

    while(keep_going) {

        getyx( stdscr, y, x );

        can_go_up = (!(y == start_line));
        can_go_down = (!(y == finish_line));

        key_pressed = getch();

        switch(key_pressed) {

            case 'j':
                if(can_go_down) {
                    wmove( stdscr, y + 1, 2 );
                    refresh();
                }
                break;

            case 'k':
                if(can_go_up) {
                    wmove( stdscr, y - 1, 2 );
                    refresh();
                }
                break;

            case '\n':
                ((commandslist[y - 3]).fcnpointer)(output);
                wmove( stdscr, 3, 2 );
                refresh();
                break;

            case 'q':
                keep_going = 0;
                break;

            default:
                break;

        }

    }

    return;

}

Я вполне уверен, что это будут проблемные функции.Работа с -Wall и -Wextra не приводит к ошибкам.

int main() {

    bool *is_set_up = new bool;

    initscr();
    refresh();

    //set up command ouput window pointer
    int maxx;
    int *maxy = new int;

    getmaxyx(stdscr, *maxy, maxx);

    delete maxy;

    static WINDOW *command_output = newwin( 3, maxx, 0, 0 ); 
    box(command_output, 0, 0);
    wrefresh(command_output);

    // 


    std::vector<command> commands = {defineCommands()};

    writeMenu(commands, commands.size(), is_set_up);
    refresh();

    coordinateUserInput(commands.size()-1, commands, command_output);

    std::cout << "worked" << std::endl;

    endwin();

    delete is_set_up;


    return 0; 

}

enter image description here

...