|
#include <stdio.h> |
|
#include <gtk/gtk.h> |
|
#include <glib/gi18n.h> |
|
#include <gtksourceview/gtksource.h> |
|
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS |
|
|
|
static void |
|
activate (GtkApplication* app, gpointer user_data) { |
|
GtkWidget *window, *scrolled_win, *textview; |
|
GtkWidget *vbox, *label; |
|
GtkSourceLanguageManager* lm = gtk_source_language_manager_get_default(); |
|
GtkSourceSnippetManager* sm = gtk_source_snippet_manager_get_default(); |
|
const gchar* cwd = "."; |
|
const gchar* const* dirs[] = {gtk_source_snippet_manager_get_search_path(sm), &cwd, NULL}; |
|
printf("snippet manager search path "); |
|
for (size_t i = 0; dirs[i]; i++) |
|
printf("%s\n", *dirs[i]); |
|
gtk_source_snippet_manager_set_search_path(sm, *dirs); |
|
// const gchar* dirs[1] = {"."}; |
|
// gtk_source_snippet_manager_set_search_path(sm, dirs); |
|
GtkSourceLanguage* lang = gtk_source_language_manager_guess_language(lm, "file.tex", NULL); |
|
const gchar* langId = gtk_source_language_get_id(lang); |
|
// printf("langId = %s\n", langId ); |
|
// GtkSourceSnippet* snippets = gtk_source_snippet_new("foo", langId); |
|
|
|
// GtkSourceSnippet* snippets = gtk_source_snippet_manager_get_snippet(sm, NULL, langId, " "); |
|
GtkSourceBuffer* sBuf = GTK_SOURCE_BUFFER(gtk_source_buffer_new_with_language(lang)); |
|
|
|
|
|
window = gtk_application_window_new (app); |
|
gtk_window_set_title (GTK_WINDOW (window), "Completion and Snippets"); |
|
gtk_window_set_default_size (GTK_WINDOW (window), 900, 600); |
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE); |
|
|
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); |
|
|
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); |
|
gtk_widget_set_margin_start (vbox, 18); |
|
gtk_widget_set_margin_end (vbox, 18); |
|
gtk_widget_set_margin_top (vbox, 18); |
|
gtk_widget_set_margin_bottom (vbox, 18); |
|
gtk_window_set_child (GTK_WINDOW (window), vbox); |
|
|
|
label = gtk_label_new (NULL); |
|
gtk_label_set_markup (GTK_LABEL (label), "Try typing <b>beg<Tab></b> or <b>frac<Tab></b> for example."); |
|
gtk_box_append (GTK_BOX (vbox), label); |
|
|
|
scrolled_win = gtk_scrolled_window_new(); |
|
textview = gtk_source_view_new_with_buffer(sBuf); |
|
gtk_widget_set_hexpand(textview, TRUE); |
|
gtk_widget_set_vexpand(textview, TRUE); |
|
gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(textview), FALSE); |
|
gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW(textview), TRUE); |
|
gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW(textview), TRUE); |
|
gtk_source_view_set_indent_on_tab (GTK_SOURCE_VIEW(textview), FALSE); |
|
gtk_source_view_set_enable_snippets (GTK_SOURCE_VIEW(textview), TRUE); |
|
printf("snippets are enabled? %i",gtk_source_view_get_enable_snippets(GTK_SOURCE_VIEW(textview))); |
|
|
|
GtkSourceCompletion* cmp = gtk_source_view_get_completion (GTK_SOURCE_VIEW(textview)); |
|
GtkSourceCompletionSnippets* cmpSnips = gtk_source_completion_snippets_new(); |
|
gtk_source_completion_add_provider(cmp, GTK_SOURCE_COMPLETION_PROVIDER(cmpSnips)); |
|
|
|
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_win),textview); |
|
gtk_box_append (GTK_BOX (vbox), scrolled_win); |
|
|
|
gtk_widget_show (window); |
|
} |
|
|
|
int |
|
main (int argc, char **argv) { |
|
GtkApplication *app; |
|
int status; |
|
|
|
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); |
|
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); |
|
status = g_application_run (G_APPLICATION (app), argc, argv); |
|
g_object_unref (app); |
|
|
|
return status; |
|
} |