Branch: refs/heads/master
Author: federeghe <federico.dev(a)reghe.net>
Committer: Federico Reghenzani <federico(a)reghe.net>
Date: Wed, 09 Apr 2014 21:23:21 UTC
Commit: 5be5475ffcd7c07a5e8eefd9f70a7e8d695be550
https://github.com/geany/geany-plugins/commit/5be5475ffcd7c07a5e8eefd9f70a7…
Log Message:
-----------
Implemented go_to_file feature
Modified Paths:
--------------
codenav/src/codenavigation.h
codenav/src/goto_file.c
codenav/src/utils.c
codenav/src/utils.h
Modified: codenav/src/codenavigation.h
44 lines changed, 24 insertions(+), 20 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * codenavigation.h - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * codenavigation.h - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#ifndef CODENAVIGATION_H
@@ -36,6 +37,7 @@
#include "keybindings.h"
#include "filetypes.h"
#include <gdk/gdkkeysyms.h>
+
#include <string.h>
#include "switch_head_impl.h"
@@ -45,13 +47,15 @@
#include "geanyfunctions.h" /* this wraps geany_functions function pointers */
/* Debug flag */
-/*#define CODE_NAVIGATION_DEBUG
-*/
+//#define CODE_NAVIGATION_DEBUG
-#define CODE_NAVIGATION_VERSION "0.1"
+#define CODE_NAVIGATION_VERSION "0.2"
/* Log utilities */
#ifdef CODE_NAVIGATION_DEBUG
+#include <glib/gprintf.h>
+
+
static void log_debug(const gchar* s, ...)
{
gchar* format = g_strconcat("[CODENAV DEBUG] : ", s, "\n", NULL);
@@ -64,8 +68,8 @@ static void log_debug(const gchar* s, ...)
#define log_func() g_print("[CODENAV FUNC] : %s", G_STRFUNC)
#else
-static void log_debug(const gchar* s, ...) {}
-#define log_func() {}
+#define log_debug(...)
+#define log_func()
#endif
/* IDs for keybindings */
Modified: codenav/src/goto_file.c
211 lines changed, 171 insertions(+), 40 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * goto_file.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * goto_file.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -26,19 +27,23 @@
#include <geanyplugin.h>
#include "goto_file.h"
+#include "utils.h"
+
+#define MAX_FILENAME_LENGTH 255
/******************* Global variables for the feature *****************/
static GtkWidget* menu_item = NULL;
-/********************** Functions for the feature *********************/
-
-/* ---------------------------------------------------------------------
- * Callback when the menu item is clicked.
- * ---------------------------------------------------------------------
- */
+/********************** Prototypes *********************/
static void
-menu_item_activate(guint key_id);
+menu_item_activate(guint);
+
+static GtkTreeModel*
+build_file_list(gchar*);
+
+
+/********************** Functions for the feature *********************/
/* ---------------------------------------------------------------------
* Initialization
@@ -54,7 +59,7 @@ goto_file_init(void)
edit_menu = ui_lookup_widget(geany->main_widgets->window, "edit1_menu");
/* Add the menu item, sensitive only when a document is opened */
- menu_item = gtk_menu_item_new_with_mnemonic(_("Goto file"));
+ menu_item = gtk_menu_item_new_with_mnemonic(_("Go to File..."));
gtk_widget_show(menu_item);
gtk_container_add(GTK_CONTAINER(edit_menu), menu_item);
ui_add_document_sensitive(menu_item);
@@ -68,7 +73,7 @@ goto_file_init(void)
(GeanyKeyCallback)(&menu_item_activate),
GDK_g, GDK_MOD1_MASK | GDK_SHIFT_MASK,
"goto_file",
- _("Goto file"), /* used in the Preferences dialog */
+ _("Go to File"), /* used in the Preferences dialog */
menu_item);
}
@@ -85,29 +90,155 @@ goto_file_cleanup(void)
}
/* ---------------------------------------------------------------------
+ * Populate the file list
+ * ---------------------------------------------------------------------
+ */
+
+static GtkTreeModel*
+build_file_list(gchar* dirname)
+{
+ GtkListStore *ret_list;
+ GtkTreeIter iter;
+ ret_list = gtk_list_store_new (1, G_TYPE_STRING);
+
+ GSList* file_iterator;
+ GSList* files_list;
+ gchar *file;
+ gchar *pathfile;
+ guint files_n;
+
+ files_list = file_iterator = utils_get_file_list(dirname, &files_n, NULL);
+
+ for( ; file_iterator; file_iterator = file_iterator->next)
+ {
+ file = file_iterator->data;
+
+ pathfile = g_build_filename(dirname,file,NULL);
+
+ if ( ! g_file_test(pathfile, G_FILE_TEST_IS_DIR) )
+ { /* File */
+ gtk_list_store_append (ret_list, &iter);
+ gtk_list_store_set (ret_list, &iter, 0, file, -1);
+
+ }
+ /* TODO: sub-directory support */
+ g_free(pathfile);
+ }
+
+ g_slist_foreach(files_list, (GFunc) g_free, NULL);
+ g_slist_free(files_list);
+
+ return GTK_TREE_MODEL(ret_list);
+
+}
+
+/* ---------------------------------------------------------------------
+ * Create the dialog, return the entry
+ * ---------------------------------------------------------------------
+ */
+static GtkWidget*
+create_dialog(GtkWidget **dialog, GtkTreeModel *completion_model)
+{
+ GtkWidget *entry;
+ GtkWidget *label;
+ GtkWidget *vbox;
+ GtkEntryCompletion *completion;
+
+ *dialog = gtk_dialog_new_with_buttons("Go to File...", GTK_WINDOW(geany->main_widgets->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+
+ gtk_dialog_set_default_response(GTK_DIALOG(*dialog), GTK_RESPONSE_ACCEPT);
+
+ gtk_widget_set_name(*dialog, "GotoFile");
+ vbox = ui_dialog_vbox_new(GTK_DIALOG(*dialog));
+
+ label = gtk_label_new(_("Enter the file you want to open:"));
+ gtk_container_add(GTK_CONTAINER(vbox), label);
+
+ /* Entry definition */
+ entry = gtk_entry_new();
+ gtk_container_add(GTK_CONTAINER(vbox), entry);
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ gtk_entry_set_max_length(GTK_ENTRY(entry), MAX_FILENAME_LENGTH);
+ gtk_entry_set_width_chars(GTK_ENTRY(entry), 30);
+ gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); /* 'enter' key */
+
+ /* Completion definition */
+ completion = gtk_entry_completion_new();
+ gtk_entry_set_completion(GTK_ENTRY(entry), completion);
+ gtk_entry_completion_set_model (completion, completion_model);
+
+ /* Completion options */
+ gtk_entry_completion_set_inline_completion(completion, 1);
+ gtk_entry_completion_set_text_column (completion, 0);
+
+
+ gtk_widget_show_all(*dialog);
+
+ return entry;
+}
+
+/* ---------------------------------------------------------------------
* Callback when the menu item is clicked.
* ---------------------------------------------------------------------
*/
static void
menu_item_activate(guint key_id)
{
- GtkWidget *dialog;
+ GtkWidget* dialog;
+ GtkWidget* dialog_new = NULL;
+ GtkWidget* dialog_entry;
+ GtkTreeModel* completion_list;
+ GeanyDocument* current_doc = document_get_current();
+ gchar *dirname, *chosen_path;
+ const gchar *chosen_file;
+ gint response;
log_func();
- /* TODO */
- dialog = gtk_message_dialog_new(
- GTK_WINDOW(geany->main_widgets->window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_OK,
- "Open by name : TODO");
-
- gtk_window_set_title(GTK_WINDOW(dialog), "Goto file...");
-
- gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
- _("(From the %s plugin)"), geany_plugin->info->name);
-
- gtk_dialog_run(GTK_DIALOG(dialog));
+ if(current_doc == NULL || current_doc->file_name == NULL || current_doc->file_name[0] == '\0')
+ return;
+
+ /* Build current directory listing */
+ dirname = g_path_get_dirname(current_doc->file_name);
+ completion_list = build_file_list(dirname);
+
+ /* Create the user dialog and get response */
+ dialog_entry = create_dialog(&dialog, completion_list);
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+
+ /* Filename */
+ chosen_file = gtk_entry_get_text(GTK_ENTRY(dialog_entry));
+ /* Path + Filename */
+ chosen_path = g_build_filename(dirname, chosen_file, NULL);
+
+ if ( response == GTK_RESPONSE_ACCEPT )
+ {
+ log_debug("Trying to open: %s", chosen_path);
+ if ( ! g_file_test(chosen_path, G_FILE_TEST_EXISTS) )
+ {
+ log_debug("File not found.");
+
+ dialog_new = gtk_message_dialog_new(GTK_WINDOW(geany_data->main_widgets->window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_OK_CANCEL,
+ _("%s not found, create it?"), chosen_file);
+ gtk_window_set_title(GTK_WINDOW(dialog_new), "Geany");
+ if(gtk_dialog_run(GTK_DIALOG(dialog_new)) == GTK_RESPONSE_OK)
+ {
+ document_new_file(chosen_path, current_doc->file_type, NULL);
+ document_set_text_changed(document_get_current(), TRUE);
+ }
+ gtk_widget_destroy(dialog_new);
+ }
+ else
+ document_open_file(chosen_path, FALSE, NULL, NULL);
+ }
+
+ /* Freeing memory */
gtk_widget_destroy(dialog);
+ g_free(dirname);
+ g_object_unref (completion_list);
}
Modified: codenav/src/utils.c
42 lines changed, 27 insertions(+), 15 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * utils.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * utils.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#include "utils.h"
@@ -79,3 +80,14 @@ compare_strings(const gchar* a, const gchar* b)
{
return (gint)(!utils_str_equal(a, b));
}
+
+/* A PHP-like strpos implementation */
+gint
+strpos(const gchar *haystack, const gchar *needle)
+{
+ char *p = g_strstr_len(haystack, -1, needle);
+ if (p)
+ return p - haystack;
+ return -1; // not found
+}
+
Modified: codenav/src/utils.h
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -3,6 +3,7 @@
* part of the "geany-plugins" project.
*
* Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,4 +41,7 @@ copy_and_remove_extension(gchar* path);
gint
compare_strings(const gchar* a, const gchar* b);
+gint
+strpos(const gchar *haystack, const gchar *needle);
+
#endif /* UTILS_H */
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: federeghe <federico.dev(a)reghe.net>
Committer: Federico Reghenzani <federico(a)reghe.net>
Date: Wed, 09 Apr 2014 21:23:21 UTC
Commit: 93208391812ec17a071f8087fff8bd025f1c6c34
https://github.com/geany/geany-plugins/commit/93208391812ec17a071f8087fff8b…
Log Message:
-----------
Reduced spacing and add changelog
Modified Paths:
--------------
codenav/AUTHORS
codenav/ChangeLog
codenav/src/codenavigation.h
codenav/src/goto_file.c
codenav/src/utils.c
Modified: codenav/AUTHORS
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -1 +1,2 @@
Lionel Fuentes <funto66(a)gmail.com>
+Federico Reghenzani <federico(a)reghe.net>
Modified: codenav/ChangeLog
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -1,3 +1,11 @@
+2014-03-23 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * src/codenavigation.h:
+ Resolve some compiler warnings.
+ * src/goto_file.c:
+ Implementation foto_file.
+ * src/utils.c, src/utils.h:
+ Added strpos().
+
2011-04-23 Frank Lanitz <frlan(a)frank.uvena.de>
* src/switch_head_impl.c:
Modified: codenav/src/codenavigation.h
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * codenavigation.h - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * codenavigation.h - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CODENAVIGATION_H
Modified: codenav/src/goto_file.c
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * goto_file.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * goto_file.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
Modified: codenav/src/utils.c
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * utils.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * utils.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#include "utils.h"
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: federeghe <federico.dev(a)reghe.net>
Committer: federeghe <federico.dev(a)reghe.net>
Date: Sun, 23 Mar 2014 21:28:41 UTC
Commit: 738b3eba7b4393ee25a36e1cfe87530a014a6ffd
https://github.com/geany/geany-plugins/commit/738b3eba7b4393ee25a36e1cfe875…
Log Message:
-----------
Implemented go_to_file feature
Modified Paths:
--------------
codenav/src/codenavigation.h
codenav/src/goto_file.c
codenav/src/utils.c
codenav/src/utils.h
Modified: codenav/src/codenavigation.h
44 lines changed, 24 insertions(+), 20 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * codenavigation.h - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * codenavigation.h - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#ifndef CODENAVIGATION_H
@@ -36,6 +37,7 @@
#include "keybindings.h"
#include "filetypes.h"
#include <gdk/gdkkeysyms.h>
+
#include <string.h>
#include "switch_head_impl.h"
@@ -45,13 +47,15 @@
#include "geanyfunctions.h" /* this wraps geany_functions function pointers */
/* Debug flag */
-/*#define CODE_NAVIGATION_DEBUG
-*/
+//#define CODE_NAVIGATION_DEBUG
-#define CODE_NAVIGATION_VERSION "0.1"
+#define CODE_NAVIGATION_VERSION "0.2"
/* Log utilities */
#ifdef CODE_NAVIGATION_DEBUG
+#include <glib/gprintf.h>
+
+
static void log_debug(const gchar* s, ...)
{
gchar* format = g_strconcat("[CODENAV DEBUG] : ", s, "\n", NULL);
@@ -64,8 +68,8 @@ static void log_debug(const gchar* s, ...)
#define log_func() g_print("[CODENAV FUNC] : %s", G_STRFUNC)
#else
-static void log_debug(const gchar* s, ...) {}
-#define log_func() {}
+#define log_debug(...)
+#define log_func()
#endif
/* IDs for keybindings */
Modified: codenav/src/goto_file.c
211 lines changed, 171 insertions(+), 40 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * goto_file.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * goto_file.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -26,19 +27,23 @@
#include <geanyplugin.h>
#include "goto_file.h"
+#include "utils.h"
+
+#define MAX_FILENAME_LENGTH 255
/******************* Global variables for the feature *****************/
static GtkWidget* menu_item = NULL;
-/********************** Functions for the feature *********************/
-
-/* ---------------------------------------------------------------------
- * Callback when the menu item is clicked.
- * ---------------------------------------------------------------------
- */
+/********************** Prototypes *********************/
static void
-menu_item_activate(guint key_id);
+menu_item_activate(guint);
+
+static GtkTreeModel*
+build_file_list(gchar*);
+
+
+/********************** Functions for the feature *********************/
/* ---------------------------------------------------------------------
* Initialization
@@ -54,7 +59,7 @@ goto_file_init(void)
edit_menu = ui_lookup_widget(geany->main_widgets->window, "edit1_menu");
/* Add the menu item, sensitive only when a document is opened */
- menu_item = gtk_menu_item_new_with_mnemonic(_("Goto file"));
+ menu_item = gtk_menu_item_new_with_mnemonic(_("Go to File..."));
gtk_widget_show(menu_item);
gtk_container_add(GTK_CONTAINER(edit_menu), menu_item);
ui_add_document_sensitive(menu_item);
@@ -68,7 +73,7 @@ goto_file_init(void)
(GeanyKeyCallback)(&menu_item_activate),
GDK_g, GDK_MOD1_MASK | GDK_SHIFT_MASK,
"goto_file",
- _("Goto file"), /* used in the Preferences dialog */
+ _("Go to File"), /* used in the Preferences dialog */
menu_item);
}
@@ -85,29 +90,155 @@ goto_file_cleanup(void)
}
/* ---------------------------------------------------------------------
+ * Populate the file list
+ * ---------------------------------------------------------------------
+ */
+
+static GtkTreeModel*
+build_file_list(gchar* dirname)
+{
+ GtkListStore *ret_list;
+ GtkTreeIter iter;
+ ret_list = gtk_list_store_new (1, G_TYPE_STRING);
+
+ GSList* file_iterator;
+ GSList* files_list;
+ gchar *file;
+ gchar *pathfile;
+ guint files_n;
+
+ files_list = file_iterator = utils_get_file_list(dirname, &files_n, NULL);
+
+ for( ; file_iterator; file_iterator = file_iterator->next)
+ {
+ file = file_iterator->data;
+
+ pathfile = g_build_filename(dirname,file,NULL);
+
+ if ( ! g_file_test(pathfile, G_FILE_TEST_IS_DIR) )
+ { /* File */
+ gtk_list_store_append (ret_list, &iter);
+ gtk_list_store_set (ret_list, &iter, 0, file, -1);
+
+ }
+ /* TODO: sub-directory support */
+ g_free(pathfile);
+ }
+
+ g_slist_foreach(files_list, (GFunc) g_free, NULL);
+ g_slist_free(files_list);
+
+ return GTK_TREE_MODEL(ret_list);
+
+}
+
+/* ---------------------------------------------------------------------
+ * Create the dialog, return the entry
+ * ---------------------------------------------------------------------
+ */
+static GtkWidget*
+create_dialog(GtkWidget **dialog, GtkTreeModel *completion_model)
+{
+ GtkWidget *entry;
+ GtkWidget *label;
+ GtkWidget *vbox;
+ GtkEntryCompletion *completion;
+
+ *dialog = gtk_dialog_new_with_buttons("Go to File...", GTK_WINDOW(geany->main_widgets->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+
+ gtk_dialog_set_default_response(GTK_DIALOG(*dialog), GTK_RESPONSE_ACCEPT);
+
+ gtk_widget_set_name(*dialog, "GotoFile");
+ vbox = ui_dialog_vbox_new(GTK_DIALOG(*dialog));
+
+ label = gtk_label_new(_("Enter the file you want to open:"));
+ gtk_container_add(GTK_CONTAINER(vbox), label);
+
+ /* Entry definition */
+ entry = gtk_entry_new();
+ gtk_container_add(GTK_CONTAINER(vbox), entry);
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ gtk_entry_set_max_length(GTK_ENTRY(entry), MAX_FILENAME_LENGTH);
+ gtk_entry_set_width_chars(GTK_ENTRY(entry), 30);
+ gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); /* 'enter' key */
+
+ /* Completion definition */
+ completion = gtk_entry_completion_new();
+ gtk_entry_set_completion(GTK_ENTRY(entry), completion);
+ gtk_entry_completion_set_model (completion, completion_model);
+
+ /* Completion options */
+ gtk_entry_completion_set_inline_completion(completion, 1);
+ gtk_entry_completion_set_text_column (completion, 0);
+
+
+ gtk_widget_show_all(*dialog);
+
+ return entry;
+}
+
+/* ---------------------------------------------------------------------
* Callback when the menu item is clicked.
* ---------------------------------------------------------------------
*/
static void
menu_item_activate(guint key_id)
{
- GtkWidget *dialog;
+ GtkWidget* dialog;
+ GtkWidget* dialog_new = NULL;
+ GtkWidget* dialog_entry;
+ GtkTreeModel* completion_list;
+ GeanyDocument* current_doc = document_get_current();
+ gchar *dirname, *chosen_path;
+ const gchar *chosen_file;
+ gint response;
log_func();
- /* TODO */
- dialog = gtk_message_dialog_new(
- GTK_WINDOW(geany->main_widgets->window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_OK,
- "Open by name : TODO");
-
- gtk_window_set_title(GTK_WINDOW(dialog), "Goto file...");
-
- gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
- _("(From the %s plugin)"), geany_plugin->info->name);
-
- gtk_dialog_run(GTK_DIALOG(dialog));
+ if(current_doc == NULL || current_doc->file_name == NULL || current_doc->file_name[0] == '\0')
+ return;
+
+ /* Build current directory listing */
+ dirname = g_path_get_dirname(current_doc->file_name);
+ completion_list = build_file_list(dirname);
+
+ /* Create the user dialog and get response */
+ dialog_entry = create_dialog(&dialog, completion_list);
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+
+ /* Filename */
+ chosen_file = gtk_entry_get_text(GTK_ENTRY(dialog_entry));
+ /* Path + Filename */
+ chosen_path = g_build_filename(dirname, chosen_file, NULL);
+
+ if ( response == GTK_RESPONSE_ACCEPT )
+ {
+ log_debug("Trying to open: %s", chosen_path);
+ if ( ! g_file_test(chosen_path, G_FILE_TEST_EXISTS) )
+ {
+ log_debug("File not found.");
+
+ dialog_new = gtk_message_dialog_new(GTK_WINDOW(geany_data->main_widgets->window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_OK_CANCEL,
+ _("%s not found, create it?"), chosen_file);
+ gtk_window_set_title(GTK_WINDOW(dialog_new), "Geany");
+ if(gtk_dialog_run(GTK_DIALOG(dialog_new)) == GTK_RESPONSE_OK)
+ {
+ document_new_file(chosen_path, current_doc->file_type, NULL);
+ document_set_text_changed(document_get_current(), TRUE);
+ }
+ gtk_widget_destroy(dialog_new);
+ }
+ else
+ document_open_file(chosen_path, FALSE, NULL, NULL);
+ }
+
+ /* Freeing memory */
gtk_widget_destroy(dialog);
+ g_free(dirname);
+ g_object_unref (completion_list);
}
Modified: codenav/src/utils.c
42 lines changed, 27 insertions(+), 15 deletions(-)
===================================================================
@@ -1,23 +1,24 @@
/*
- * utils.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * utils.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#include "utils.h"
@@ -79,3 +80,14 @@ compare_strings(const gchar* a, const gchar* b)
{
return (gint)(!utils_str_equal(a, b));
}
+
+/* A PHP-like strpos implementation */
+gint
+strpos(const gchar *haystack, const gchar *needle)
+{
+ char *p = g_strstr_len(haystack, -1, needle);
+ if (p)
+ return p - haystack;
+ return -1; // not found
+}
+
Modified: codenav/src/utils.h
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -3,6 +3,7 @@
* part of the "geany-plugins" project.
*
* Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,4 +41,7 @@ copy_and_remove_extension(gchar* path);
gint
compare_strings(const gchar* a, const gchar* b);
+gint
+strpos(const gchar *haystack, const gchar *needle);
+
#endif /* UTILS_H */
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: federeghe <federico.dev(a)reghe.net>
Committer: federeghe <federico.dev(a)reghe.net>
Date: Sun, 23 Mar 2014 22:02:22 UTC
Commit: 0a0fc2ac7ea0974f81724432868cc87f244c7f93
https://github.com/geany/geany-plugins/commit/0a0fc2ac7ea0974f81724432868cc…
Log Message:
-----------
Reduced spacing and add changelog
Modified Paths:
--------------
codenav/AUTHORS
codenav/ChangeLog
codenav/src/codenavigation.h
codenav/src/goto_file.c
codenav/src/utils.c
Modified: codenav/AUTHORS
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -1 +1,2 @@
Lionel Fuentes <funto66(a)gmail.com>
+Federico Reghenzani <federico(a)reghe.net>
Modified: codenav/ChangeLog
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -1,3 +1,11 @@
+2014-03-23 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * src/codenavigation.h:
+ Resolve some compiler warnings.
+ * src/goto_file.c:
+ Implementation foto_file.
+ * src/utils.c, src/utils.h:
+ Added strpos().
+
2011-04-23 Frank Lanitz <frlan(a)frank.uvena.de>
* src/switch_head_impl.c:
Modified: codenav/src/codenavigation.h
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * codenavigation.h - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * codenavigation.h - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CODENAVIGATION_H
Modified: codenav/src/goto_file.c
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * goto_file.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * goto_file.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
Modified: codenav/src/utils.c
30 lines changed, 14 insertions(+), 16 deletions(-)
===================================================================
@@ -1,24 +1,22 @@
/*
- * utils.c - this file is part of "codenavigation", which is
- * part of the "geany-plugins" project.
+ * utils.c - this file is part of "codenavigation", which is
+ * part of the "geany-plugins" project.
*
- * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
- * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
+ * Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#include "utils.h"
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).