ncurses field_buffer返回未更改的初始字符串

时间:2016-11-19 19:49:42

标签: c++ g++ ncurses

在字段中编辑文本后我按Enter键,我希望得到编辑的值,但收到的字符串不变。 我尝试通过非c_string缓冲区初始化字段,空格为空闲字符,结果相同。我不知道为什么会这样。没有找到类似的问题。

Latest Cygwin,Debian,结果相同。

#include <unistd.h>
#include <cstring>

#include <curses.h>
#include <form.h>

#include <iostream>
using namespace std;

int main()
{
    string str = "hello";


    initscr();
    noecho();
    keypad(stdscr, TRUE);
    cbreak();

    int field_width = 30;

    FIELD* fields[] =
    {
        new_field( /*H*/1, /*W*/field_width, /*Y*/0,/*X*/0,  0, 0),
        NULL
    };

    set_field_back(fields[0], A_UNDERLINE);
    field_opts_off(fields[0], O_AUTOSKIP);

    FORM* form = new_form( fields );
    post_form( form );

    refresh();

    set_field_buffer( fields[0], 0, str.c_str() );

    form_driver(form,REQ_END_LINE);

    // Loop through to get user requests
    int ch;
    while((ch = getch()) != KEY_F(1))
    {
        switch(ch)
        {
             default:  // paste char
                form_driver(form, ch);
                break;

             case '\n':
             case KEY_ENTER:
             {
                 char * field_buff = field_buffer( fields[0], 0 );
//               Iknow about spaces at the end of line
                 str = field_buff;

                  unpost_form(form);
                  free_form(form);
                  free_field(fields[0]);
                  endwin();
                  //
                  cout << "edited string: " << str << endl;
                  sleep(2);
                  //
                  return 0;
             }
             // end  case Enter
        }
        // end  switch
    }
    // end while
}
// end main

1 个答案:

答案 0 :(得分:-1)

field_buffer手册页说

  

缓冲区内容使用 @Override public void resize(int width, int height) { m_viewport.update(width, height, true); } 设置,   或作为任何编辑操作的副作用   相应的字段。

编辑操作form_driver的请求,如该手册页中所列。