В настоящее время я делаю простое меню 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;
}