【问题标题】:Implementation autocompletion GktSourceCompletion实现自动补全 GktSourceCompletion
【发布时间】:2015-01-15 11:48:57
【问题描述】:

对不起我的英语。我正在用 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);
}

我尝试过,但都非常混乱。 请告诉我该怎么做。

【问题讨论】:

    标签: c user-interface gtk editor completion


    【解决方案1】:

    一些解释:

    您需要将 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);
    

    【讨论】:

      【解决方案2】:

      试试这个代码:

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

      【讨论】:

      • 能否为您的代码提供一些解释。
      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多