实现自动完成GktSourceCompletion

时间:2015-01-15 11:48:58

标签: c user-interface gtk editor completion

抱歉我的英文。我正在用C语言编写简单的编辑器。 我无法理解如何使用GtkSourceCompletion实现自动完成单词。

static void set_completion(Page *page)
{
    GtkSourceCompletionWords *words = gtk_source_completion_words_new("words_current_page", NULL);
    gtk_source_completion_words_register(words, GTK_TEXT_BUFFER(page->buffer));
    GtkSourceCompletion *comp = gtk_source_view_get_completion(GTK_SOURCE_VIEW(page->text_edit));
    GtkSourceCompletionContext *context = gtk_source_completion_create_context(comp, NULL);
    GtkSourceCompletionProvider *provider;
    gtk_source_completion_add_provider(comp, provider, NULL);
}

我试试,但都很困惑。 请告诉我怎么做。

2 个答案:

答案 0 :(得分:1)

一些解释:

你需要将GtkSourceCompletionWords视为GtkSourceCompletionProvider,使用宏GTK_SOURCE_COMPLETION_PROVIDER(单词)并将其添加为完成提供者:

GtkSourceCompletion *comp = gtk_source_view_get_completion(GTK_SOURCE_VIEW(page->text_edit));
gtk_source_completion_add_provider(comp,GTK_SOURCE_COMPLETION_PROVIDER(words),NULL);

在将其添加为提供者之前,需要在GtkSourceView的缓冲区中注册GtkSourceCompletionWords:

GtkSourceCompletionWords *words = gtk_source_completion_words_new("wds_current_page", NULL);
gtk_source_completion_words_register(words, GTK_TEXT_BUFFER(page->buffer));

您可以通过以下方式获取缓冲区:

GtkTextBuffer * buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(page->text_edit));

您也可以单独创建缓冲区并将其作为创建GtkSourceView的参数传递:

GtkSourceBuffer * sBuf = gtk_source_buffer_new(NULL);
GtkWidget * sview = gtk_source_view_new_with_buffer(sBuf);

答案 1 :(得分:0)

试试这段代码:

static void set_completion(Page *page)
{
    GtkSourceCompletionWords *words = gtk_source_completion_words_new("words_current_page", NULL);
    gtk_source_completion_words_register(words, GTK_TEXT_BUFFER(page->buffer));
    GtkSourceCompletion *comp = gtk_source_view_get_completion(GTK_SOURCE_VIEW(page->text_edit));

    gtk_source_completion_add_provider(comp, GTK_SOURCE_COMPLETION_PROVIDER(words), NULL);
}