c - 实现自动补全 GktSourceCompletion

标签 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);
}

我尝试过,但一切都很困惑。 请告诉我该怎么做。

最佳答案

一些解释:

您需要将 GtkSourceCompletionWords 视为 GtkSourceCompletionProvider,使用宏 GTK_SOURCE_COMPLETION_PROVIDER(words) 并将其添加为完成的提供程序:

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);

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

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);

关于c - 实现自动补全 GktSourceCompletion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962768/

相关文章:

编译的枚举常量

在C程序中调用可执行文件

c - inotify_rm_watch 总是返回 EINVAL

java - 每个类默认都有自己的Thread吗?

java - 在程序启动时清除java swing表单的所有文本字段

c - GtkColorChooser 与 GtkColorSelection

php - PHP 解释器源代码中的 main() 方法在哪里?

css - TornadoFX addClass 不添加CSS

c - GTK修改GtkButton的背景色

c - GTK treeview 添加 'key-press-event' 信号