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