GNU Readline: how to clear the input line?

前端 未结 6 1375
你的背包
你的背包 2021-01-05 14:35

I use GNU Readline in the \"select\" fashion, by registering a callback function like so:

rl_callback_handler_install(\"\", on_readline_input);
6条回答
  •  天命终不由人
    2021-01-05 15:27

    I tried to separate server output and user input with ncurses windows. Server output is simulated with a thread. The program run until You enter a line beginning with 'q'.

    #include  
    #include  
    #include  
    
    WINDOW *top, *bottom;
    
    int win_update( WINDOW *win, void *data ){
      wprintw(win,"%s", (char*)data ); wrefresh(win);
      return 0;
    }
    
    void *top_thread( void *data ){
      char buff[1024];
      int i=0;
      while(1){
        snprintf(buff, 1024, "SERVER OUTPUT: %i\n", i++ );
        use_window( top, win_update, (void*)buff );
        sleep(1);
      }
      return NULL;
    }
    
    int main(){
      initscr();
      int maxy, maxx;
      getmaxyx( stdscr, maxy, maxx );
    
      top = newwin(maxy-1,maxx,0,0);
      wsetscrreg(top,0,maxy-1); idlok(top,1); scrollok(top,1);
      pthread_t top_tid;
      pthread_create(&top_tid, NULL, top_thread, NULL);
    
      bottom = newwin(1,maxx,maxy-1,0);
      char buff[1024], input[maxx];
      do{
        werase(bottom); wmove(bottom,0,0);
        wprintw(bottom,"input> " ); wrefresh(bottom);
        wgetnstr(bottom,input,sizeof(input));
        snprintf(buff, 1024, "user input: '%s'\n", input );
        use_window( top, win_update, (void*)buff );
      }while( input[0] != 'q' );
    
      endwin();
    }
    

提交回复
热议问题