SF.net SVN: geany: [1570] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Fri May 25 12:03:35 UTC 2007


Revision: 1570
          http://svn.sourceforge.net/geany/?rev=1570&view=rev
Author:   ntrel
Date:     2007-05-25 05:03:35 -0700 (Fri, 25 May 2007)

Log Message:
-----------
Add support for %e, %f in project run command.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/doc/geany.docbook
    trunk/src/build.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-05-25 11:39:10 UTC (rev 1569)
+++ trunk/ChangeLog	2007-05-25 12:03:35 UTC (rev 1570)
@@ -1,3 +1,12 @@
+2007-05-25  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * doc/geany.docbook:
+   Comment out stopping make process.
+   Remove note about editing build commands manually.
+ * src/build.c, doc/geany.docbook:
+   Add support for %e, %f in project run command.
+
+
 2007-05-24  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * src/utils.h:

Modified: trunk/doc/geany.docbook
===================================================================
--- trunk/doc/geany.docbook	2007-05-25 11:39:10 UTC (rev 1569)
+++ trunk/doc/geany.docbook	2007-05-25 12:03:35 UTC (rev 1570)
@@ -1262,13 +1262,31 @@
 				</para>
 				<para>
 				The <emphasis>Base path</emphasis> field is used as the directory to run the
-				Make command in.
+				Make and Make custom commands in.
 				</para>
+				<section><title>Run command</title>
 				<para>
-				The <emphasis>Run</emphasis> command overrides the default run command. You can
-				set this to the executable or main script file for the project, and append any
-				command-line arguments.
+					The <emphasis>Run</emphasis> command overrides the default run command. You can
+					set this to the executable or main script file for the project, and append any
+					command-line arguments.
 				</para>
+				<para>
+					The following variables can be used:
+				</para>
+				<para>
+				   <itemizedlist>
+					<listitem><para>
+						%f - complete filename without path
+					</para></listitem>
+					<listitem><para>
+						%e - filename without path and without extension
+					</para></listitem>
+				   </itemizedlist>
+				</para>
+				<para>
+					See <xref linkend="filetypes_build_settings"/> for details.
+				</para>
+				</section>
 			</section>
 			<section>
 				<title>Close Project</title>
@@ -1417,19 +1435,35 @@
 					paths and compile flags for the compiler, any library names and paths for the
 					linker, and any arguments you want to use when running Execute.
 				</para>
-				<note><para>
-					If you are using the Build command to compile and link in one step, you will need
-					to set both the compiler arguments and the linker arguments in the linker
-					command setting.
-				</para></note>
 				<para>
 					These settings are saved automatically when <application>Geany</application>
 					is shut down.
 				</para>
 				<para>
+					The following variables can be used:
+				</para>
+				<para>
+				   <itemizedlist>
+					<listitem><para>
+						%f - complete filename without path
+					</para></listitem>
+					<listitem><para>
+						%e - filename without path and without extension
+					</para></listitem>
+				   </itemizedlist>
+				</para>
+				<para>
+					See <xref linkend="filetypes_build_settings"/> for details.
+				</para>
+				<para>
 					If you need complex settings for your build system, or several different
 					settings, then writing a Makefile and using the Make commands is recommended.
 				</para>
+				<note><title>One step compilation</title><para>
+					If you are using the Build command to compile and link in one step, you will need
+					to set both the compiler arguments and the linker arguments in the linker
+					command setting.
+				</para></note>
 			</section>
 			<section>
 				<title>Indicators</title>
@@ -2022,7 +2056,7 @@
 				<section>
 					<title>[build_settings] Section</title>
 					<para>
-						<table frame="all">
+						<table frame="all" id="filetypes_build_settings">
 							<title>Build settings</title>
 							<tgroup cols="3">
 								<?dbhtml cellpadding="4" ?>

Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c	2007-05-25 11:39:10 UTC (rev 1569)
+++ trunk/src/build.c	2007-05-25 12:03:35 UTC (rev 1570)
@@ -526,7 +526,8 @@
 /* Checks if the executable file corresponding to document idx exists.
  * Returns the name part of the filename, without extension.
  * Returns NULL if executable file doesn't exist. */
-static gchar *get_build_executable(gint idx, const gchar *locale_filename)
+static gchar *get_build_executable(const gchar *locale_filename, gboolean check_exists,
+		filetype_id ft_id)
 {
 	gchar *long_executable = NULL;
 	struct stat st;
@@ -536,13 +537,12 @@
 	setptr(long_executable, g_strconcat(long_executable, ".exe", NULL));
 #endif
 
-	// only check for existing executable, if executable is required by %e
-	if (strstr(doc_list[idx].file_type->programs->run_cmd, "%e") != NULL)
+	if (check_exists)
 	{
 		gchar *check_executable = NULL;
 
 		// add .class extension for JAVA source files (only for stat)
-		if (doc_list[idx].file_type->id == GEANY_FILETYPES_JAVA)
+		if (ft_id == GEANY_FILETYPES_JAVA)
 		{
 #ifdef G_OS_WIN32
 			gchar *tmp;
@@ -589,6 +589,10 @@
 static gchar *prepare_run_script(gint idx)
 {
 	gchar	*locale_filename = NULL;
+	gboolean have_project;
+	GeanyProject *project = app->project;
+	filetype *ft = doc_list[idx].file_type;
+	gboolean check_exists;
 	gchar	*cmd = NULL;
 	gchar	*executable = NULL;
 	gchar	*working_dir = NULL;
@@ -598,14 +602,24 @@
 
 	locale_filename = utils_get_locale_from_utf8(doc_list[idx].file_name);
 
-	executable = get_build_executable(idx, locale_filename);
+	have_project = (project != NULL && NZV(project->run_cmd));
+	cmd = (have_project) ?
+		project->run_cmd :
+		ft->programs->run_cmd;
+
+	// only check for existing executable, if executable is required by %e
+	check_exists = (strstr(cmd, "%e") != NULL);
+	executable = get_build_executable(locale_filename, check_exists, FILETYPE_ID(ft));
 	if (executable == NULL)
 	{
 		g_free(locale_filename);
 		return NULL;
 	}
 
-	working_dir = g_path_get_dirname(locale_filename);
+	working_dir = (have_project) ?
+		utils_get_locale_from_utf8(project->base_path) :
+		g_path_get_dirname(locale_filename);
+
 	if (chdir(working_dir) != 0)
 	{
 		gchar *utf8_working_dir =
@@ -620,7 +634,7 @@
 	}
 
 	// replace %f and %e in the run_cmd string
-	cmd = g_strdup(doc_list[idx].file_type->programs->run_cmd);
+	cmd = g_strdup(cmd);
 	tmp = g_path_get_basename(locale_filename);
 	cmd = utils_str_replace(cmd, "%f", tmp);
 	g_free(tmp);
@@ -642,8 +656,8 @@
 		g_free(utf8_cmd);
 	}
 
-	g_free(executable);
 	g_free(cmd);
+	g_free(executable);
 	g_free(locale_filename);
 
 	if (result)
@@ -654,57 +668,15 @@
 }
 
 
-static gchar *prepare_project_run_script()
-{
-	GeanyProject *project = app->project;
-	gboolean autoclose = FALSE;
-	gchar *working_dir;
-	gchar *cmd;
-
-	if (project == NULL || project->run_cmd == NULL) return NULL;
-	g_return_val_if_fail(project->base_path != NULL, NULL);
-
-	working_dir = utils_get_locale_from_utf8(project->base_path);
-	if (chdir(working_dir) != 0)
-	{
-		msgwin_status_add(_("Failed to change the working directory to %s"), project->base_path);
-		g_free(working_dir);
-		return NULL;
-	}
-
-#ifdef HAVE_VTE
-	if (vte_info.load_vte && vc != NULL && vc->run_in_vte)
-		autoclose = TRUE; // don't wait for user input at the end of script when we are running in VTE
-#endif
-	cmd = utils_get_locale_from_utf8(project->run_cmd);
-
-	// (RUN_SCRIPT_CMD should be ok in UTF8 without converting in locale because it contains no umlauts)
-	if (! build_create_shellscript(RUN_SCRIPT_CMD, cmd, autoclose))
-	{
-		msgwin_status_add(_("Failed to execute \"%s\" (start-script could not be created)"),
-													project->run_cmd);
-		g_free(working_dir);
-		g_free(cmd);
-		return NULL;
-	}
-	g_free(cmd);
-	return working_dir;
-}
-
-
 static GPid build_run_cmd(gint idx)
 {
-	GeanyProject *project = app->project;
 	gchar	*working_dir;
 	GError	*error = NULL;
 
-	if (! DOC_IDX_VALID(idx) || doc_list[idx].file_name == NULL) return (GPid) 1;
+	if (! DOC_IDX_VALID(idx) || doc_list[idx].file_name == NULL)
+		return (GPid) 1;
 
-	if (project != NULL && project->run_cmd != NULL && *project->run_cmd != 0)
-		working_dir = prepare_project_run_script();
-	else
-		working_dir = prepare_run_script(idx);
-
+	working_dir = prepare_run_script(idx);
 	if (working_dir == NULL)
 	{
 		return (GPid) 1;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list