Implemented Run command (from the build menu) under Windows, the other commands will follow somewhen.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@811 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
parent
8dede470b1
commit
9d2893c495
73
src/build.c
73
src/build.c
@ -104,6 +104,12 @@ GPid build_view_tex_file(gint idx, gint mode)
|
||||
// try convert in locale
|
||||
locale_cmd_string = utils_get_locale_from_utf8(cmd_string);
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
argv = NULL;
|
||||
child_pid = (GPid) 0;
|
||||
|
||||
if (! g_spawn_command_line_async(locale_cmd_string, &error))
|
||||
#else
|
||||
argv = g_new0(gchar *, 4);
|
||||
argv[0] = g_strdup("/bin/sh");
|
||||
argv[1] = g_strdup("-c");
|
||||
@ -112,6 +118,7 @@ GPid build_view_tex_file(gint idx, gint mode)
|
||||
|
||||
if (! g_spawn_async_with_pipes(NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
|
||||
NULL, NULL, &child_pid, NULL, NULL, NULL, &error))
|
||||
#endif
|
||||
{
|
||||
geany_debug("g_spawn_async_with_pipes() failed: %s", error->message);
|
||||
msgwin_status_add(_("Process failed (%s)"), error->message);
|
||||
@ -120,6 +127,9 @@ GPid build_view_tex_file(gint idx, gint mode)
|
||||
g_free(executable);
|
||||
g_free(locale_filename);
|
||||
g_free(cmd_string);
|
||||
#ifdef G_OS_WIN32
|
||||
g_free(locale_cmd_string);
|
||||
#endif
|
||||
g_strfreev(argv);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
@ -345,7 +355,11 @@ GPid build_run_cmd(gint idx)
|
||||
|
||||
if (idx < 0 || doc_list[idx].file_name == NULL) return (GPid) 1;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
script_name = g_strdup("./geany_run_script.bat");
|
||||
#else
|
||||
script_name = g_strdup("./geany_run_script.sh");
|
||||
#endif
|
||||
|
||||
locale_filename = utils_get_locale_from_utf8(doc_list[idx].file_name);
|
||||
|
||||
@ -355,22 +369,37 @@ GPid build_run_cmd(gint idx)
|
||||
term_argv_len = g_strv_length(term_argv);
|
||||
|
||||
long_executable = utils_remove_ext_from_filename(locale_filename);
|
||||
#ifdef G_OS_WIN32
|
||||
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)
|
||||
{
|
||||
// add .class extension for JAVA source files (only for stat)
|
||||
if (doc_list[idx].file_type->id == GEANY_FILETYPES_JAVA)
|
||||
{
|
||||
#ifdef G_OS_WIN32
|
||||
// there is already the extension .exe, so first remove it and then add .class
|
||||
check_executable = utils_remove_ext_from_filename(long_executable);
|
||||
check_executable = g_strconcat(check_executable, ".class", NULL);
|
||||
#else
|
||||
check_executable = g_strconcat(long_executable, ".class", NULL);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
check_executable = g_strdup(long_executable);
|
||||
|
||||
// check whether executable exists
|
||||
if (stat(check_executable, &st) != 0)
|
||||
{
|
||||
#ifndef G_OS_WIN32
|
||||
utf8_check_executable = g_strdup(check_executable);
|
||||
#else
|
||||
utf8_check_executable = utils_remove_ext_from_filename(doc_list[idx].file_name);
|
||||
msgwin_status_add(_("Failed to execute %s (make sure it is already built)"),
|
||||
utf8_check_executable);
|
||||
#endif
|
||||
result_id = (GPid) 1;
|
||||
goto free_strings;
|
||||
}
|
||||
@ -427,10 +456,21 @@ GPid build_run_cmd(gint idx)
|
||||
{
|
||||
argv[i] = g_strdup(term_argv[i]);
|
||||
}
|
||||
argv[term_argv_len ] = g_strdup("-e");
|
||||
#ifdef G_OS_WIN32
|
||||
// command line arguments for cmd.exe
|
||||
argv[term_argv_len ] = g_strdup("/Q /C");
|
||||
argv[term_argv_len + 1] = g_path_get_basename(script_name);
|
||||
#else
|
||||
argv[term_argv_len ] = g_strdup("-e");
|
||||
argv[term_argv_len + 1] = g_strdup(script_name);
|
||||
#endif
|
||||
argv[term_argv_len + 2] = NULL;
|
||||
|
||||
for (i = 0; argv[i] != NULL; i++)
|
||||
{
|
||||
msgwin_status_add("%s", argv[i]);
|
||||
}
|
||||
|
||||
if (! g_spawn_async_with_pipes(working_dir, argv, NULL, 0,
|
||||
NULL, NULL, &child_pid, NULL, NULL, NULL, &error))
|
||||
{
|
||||
@ -545,37 +585,34 @@ void build_exit_cb(GPid child_pid, gint status, gpointer user_data)
|
||||
static gboolean build_create_shellscript(const gint idx, const gchar *fname, const gchar *cmd)
|
||||
{
|
||||
FILE *fp;
|
||||
gint i;
|
||||
gchar *str, *exec, **tmp_args = NULL, *tmp;
|
||||
gchar *str;
|
||||
#ifdef G_OS_WIN32
|
||||
gchar *tmp;
|
||||
#endif
|
||||
|
||||
fp = fopen(fname, "w");
|
||||
if (! fp) return FALSE;
|
||||
|
||||
// enclose all args in ""
|
||||
tmp_args = g_strsplit(cmd, " ", -1);
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (tmp_args[i] == NULL) break;
|
||||
tmp = g_strdup(tmp_args[i]);
|
||||
g_free(tmp_args[i]);
|
||||
tmp_args[i] = g_strconcat("\"", tmp, "\"", NULL);
|
||||
g_free(tmp);
|
||||
}
|
||||
exec = g_strjoinv(" ", tmp_args);
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
tmp = g_path_get_basename(fname);
|
||||
str = g_strdup_printf("%s\n\npause\ndel %s\n", cmd, tmp);
|
||||
g_free(tmp);
|
||||
#else
|
||||
str = g_strdup_printf(
|
||||
"#!/bin/sh\n\n%s\n\necho \"\n\n------------------\n(program exited with code: $?)\" \
|
||||
\n\necho \"Press return to continue\"\nread\nunlink $0\n", exec);
|
||||
\n\necho \"Press return to continue\"\nread\nunlink $0\n", cmd);
|
||||
#endif
|
||||
|
||||
fputs(str, fp);
|
||||
g_free(str);
|
||||
g_free(exec);
|
||||
g_strfreev(tmp_args);
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
if (chmod(fname, 0700) != 0)
|
||||
{
|
||||
unlink(fname);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
fclose(fp);
|
||||
|
||||
return TRUE;
|
||||
|
@ -1697,7 +1697,9 @@ on_build_execute_activate (GtkMenuItem *menuitem,
|
||||
document_save_file(idx, FALSE);
|
||||
if (build_run_cmd(idx) == (GPid) 0)
|
||||
{
|
||||
#ifndef G_OS_WIN32 // on Windows there is no PID returned
|
||||
msgwin_status_add(_("Failed to execute the terminal program"));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
//gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci));
|
||||
|
@ -610,10 +610,7 @@ gint main(gint argc, gchar **argv)
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
// hide "Build" menu item, at least until it is available for Windows
|
||||
gtk_widget_hide(lookup_widget(app->window, "menu_build1"));
|
||||
gtk_widget_hide(app->compile_button);
|
||||
gtk_widget_hide(app->run_button);
|
||||
gtk_widget_hide(lookup_widget(app->window, "separatortoolitem6"));
|
||||
{
|
||||
GtkWidget *compiler_tab;
|
||||
compiler_tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(msgwindow.notebook),
|
||||
|
19
src/prefs.c
19
src/prefs.c
@ -237,18 +237,13 @@ void prefs_init_dialog(void)
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "label11"), FALSE);
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "entry_com_make"), FALSE);
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "button_make"), FALSE);
|
||||
|
||||
// hide related Terminal path setting
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "label97"), FALSE);
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "entry_com_term"), FALSE);
|
||||
gtk_widget_set_sensitive(lookup_widget(app->prefs_dialog, "button_term"), FALSE);
|
||||
#else
|
||||
if (app->tools_make_cmd)
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_make")), app->tools_make_cmd);
|
||||
|
||||
if (app->tools_term_cmd)
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_term")), app->tools_term_cmd);
|
||||
#endif
|
||||
if (app->tools_term_cmd)
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_term")), app->tools_term_cmd);
|
||||
|
||||
if (app->tools_browser_cmd)
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_browser")), app->tools_browser_cmd);
|
||||
|
||||
@ -443,11 +438,7 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat
|
||||
app->pref_toolbar_show_undo = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
||||
|
||||
widget = lookup_widget(app->prefs_dialog, "check_toolbar_compile");
|
||||
#ifdef G_OS_WIN32
|
||||
app->pref_toolbar_show_compile = FALSE;
|
||||
#else
|
||||
app->pref_toolbar_show_compile = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
||||
#endif
|
||||
|
||||
widget = lookup_widget(app->prefs_dialog, "check_toolbar_colour");
|
||||
app->pref_toolbar_show_colour = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
||||
@ -912,10 +903,6 @@ void dialogs_show_prefs_dialog(void)
|
||||
app->prefs_dialog = create_prefs_dialog();
|
||||
gtk_window_set_transient_for(GTK_WINDOW(app->prefs_dialog), GTK_WINDOW(app->window));
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
gtk_widget_hide(lookup_widget(app->prefs_dialog, "check_toolbar_compile"));
|
||||
#endif
|
||||
|
||||
// init the default file encoding combo box
|
||||
combo = lookup_widget(app->prefs_dialog, "combo_encoding");
|
||||
gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo), 3);
|
||||
|
@ -46,10 +46,9 @@ static void
|
||||
recent_file_activate_cb (GtkMenuItem *menuitem,
|
||||
gpointer user_data);
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
static GtkWidget *create_build_menu_tex(gint idx);
|
||||
static GtkWidget *create_build_menu_gen(gint idx);
|
||||
#endif
|
||||
|
||||
|
||||
/* allow_override is TRUE if text can be ignored when another message has been set
|
||||
* that didn't use allow_override and has not timed out. */
|
||||
@ -619,7 +618,6 @@ void ui_widget_show_hide(GtkWidget *widget, gboolean show)
|
||||
|
||||
void ui_build_show_hide(gint idx)
|
||||
{
|
||||
#ifndef G_OS_WIN32
|
||||
gboolean is_header = FALSE;
|
||||
gchar *ext = NULL;
|
||||
filetype *ft;
|
||||
@ -637,12 +635,18 @@ void ui_build_show_hide(gint idx)
|
||||
|
||||
ft = doc_list[idx].file_type;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
// disable compile and link under Windows until it is implemented
|
||||
ft->menu_items->can_compile = FALSE;
|
||||
ft->menu_items->can_link = FALSE;
|
||||
#endif
|
||||
|
||||
if (doc_list[idx].file_name)
|
||||
{
|
||||
ext = strrchr(doc_list[idx].file_name, '.');
|
||||
}
|
||||
|
||||
// TODO: separate function for matching headers, perhaps based on file extensions
|
||||
/// TODO: separate function for matching headers, perhaps based on file extensions
|
||||
if (! ext || utils_strcmp(ext + 1, "h") || utils_strcmp(ext + 1, "hpp") ||
|
||||
utils_strcmp(ext + 1, "hxx"))
|
||||
{
|
||||
@ -748,12 +752,9 @@ void ui_build_show_hide(gint idx)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
|
||||
#define GEANY_ADD_WIDGET_ACCEL(gkey, menuitem) \
|
||||
if (keys[(gkey)]->key != 0) \
|
||||
gtk_widget_add_accelerator(menuitem, "activate", accel_group, \
|
||||
@ -768,6 +769,7 @@ static GtkWidget *create_build_menu_gen(gint idx)
|
||||
|
||||
menu = gtk_menu_new();
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
if (ft->menu_items->can_compile)
|
||||
{
|
||||
// compile the code
|
||||
@ -828,13 +830,17 @@ static GtkWidget *create_build_menu_gen(gint idx)
|
||||
gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file using the "
|
||||
"make tool"), NULL);
|
||||
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(2));
|
||||
#endif
|
||||
|
||||
if (ft->menu_items->can_exec)
|
||||
{ // execute the code
|
||||
if (item != NULL)
|
||||
{
|
||||
item = gtk_separator_menu_item_new();
|
||||
gtk_widget_show(item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
}
|
||||
|
||||
if (ft->menu_items->can_exec)
|
||||
{ // execute the code
|
||||
item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group);
|
||||
gtk_widget_show(item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
@ -878,6 +884,7 @@ static GtkWidget *create_build_menu_tex(gint idx)
|
||||
|
||||
menu = gtk_menu_new();
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
// DVI
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> DVI"));
|
||||
gtk_widget_show(item);
|
||||
@ -904,28 +911,39 @@ static GtkWidget *create_build_menu_tex(gint idx)
|
||||
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
|
||||
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(1));
|
||||
|
||||
if (item != NULL)
|
||||
{
|
||||
item = gtk_separator_menu_item_new();
|
||||
gtk_widget_show(item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
}
|
||||
|
||||
// build the code with make all
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("Build with \"make\""));
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("_Make all"));
|
||||
gtk_widget_show(item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
|
||||
"make tool and the default target"), NULL);
|
||||
if (keys[GEANY_KEYS_BUILD_MAKE]->key)
|
||||
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKE]->key,
|
||||
keys[GEANY_KEYS_BUILD_MAKE]->mods, GTK_ACCEL_VISIBLE);
|
||||
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
|
||||
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
|
||||
|
||||
// build the code with make
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("Build with make (custom target)"));
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target"));
|
||||
gtk_widget_show(item);
|
||||
if (keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key)
|
||||
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key,
|
||||
keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->mods, GTK_ACCEL_VISIBLE);
|
||||
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
|
||||
"make tool and the specified target"), NULL);
|
||||
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(1));
|
||||
|
||||
if (item != NULL)
|
||||
{
|
||||
item = gtk_separator_menu_item_new();
|
||||
gtk_widget_show(item);
|
||||
gtk_container_add(GTK_CONTAINER(menu), item);
|
||||
}
|
||||
#endif
|
||||
|
||||
// DVI view
|
||||
item = gtk_image_menu_item_new_with_mnemonic(_("View DVI file"));
|
||||
gtk_widget_show(item);
|
||||
@ -976,7 +994,6 @@ static GtkWidget *create_build_menu_tex(gint idx)
|
||||
|
||||
return menu;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void ui_treeviews_show_hide(gboolean force)
|
||||
|
Loading…
x
Reference in New Issue
Block a user