diff src/utilops.c @ 1652:58a5d1e01e33

run external commands from current directory even with no files
author nadvornik
date Fri, 19 Jun 2009 22:34:52 +0000
parents c16f499ea1ce
children 349ebc02b8e2
line wrap: on
line diff
--- a/src/utilops.c	Thu Jun 18 20:46:33 2009 +0000
+++ b/src/utilops.c	Fri Jun 19 22:34:52 2009 +0000
@@ -848,7 +848,7 @@
 			if (editor_blocks_file(ud->external_command))
 				{
 				DEBUG_1("Starting %s and waiting for results", ud->external_command);
-				flags = start_editor_from_filelist_full(ud->external_command, ud->flist, file_util_perform_ci_cb, ud);
+				flags = start_editor_from_filelist_full(ud->external_command, ud->flist, NULL, file_util_perform_ci_cb, ud);
 				}
 			else
 				{
@@ -2164,7 +2164,7 @@
 	file_util_dialog_run(ud);
 }
 
-static void file_util_start_editor_full(const gchar *key, FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
+static void file_util_start_editor_full(const gchar *key, FileData *source_fd, GList *source_list, const gchar *dest_path, const gchar *working_directory, GtkWidget *parent, UtilityPhase phase)
 {
 	UtilityData *ud;
 	GList *flist;
@@ -2172,8 +2172,21 @@
 	
 	if (editor_no_param(key))
 		{
+		gchar *file_directory = NULL;
+		if (!working_directory)
+			{
+			/* working directory was not specified, try to extract it from the files */
+			if (source_fd)
+				file_directory = remove_level_from_path(source_fd->path);
+
+			if (!file_directory && source_list)
+				file_directory = remove_level_from_path(((FileData *)source_list->data)->path);
+			working_directory = file_directory;
+			}
+		
 		/* just start the editor, don't care about files */
-		start_editor(key);
+		start_editor(key, working_directory);
+		g_free(file_directory);
 		return;
 		}
 	
@@ -2715,22 +2728,22 @@
 
 void file_util_start_editor_from_file(const gchar *key, FileData *fd, GtkWidget *parent)
 {
-	file_util_start_editor_full(key, fd, NULL, NULL, parent, UTILITY_PHASE_ENTERING);
+	file_util_start_editor_full(key, fd, NULL, NULL, NULL, parent, UTILITY_PHASE_ENTERING);
 }
 
-void file_util_start_editor_from_filelist(const gchar *key, GList *list, GtkWidget *parent)
+void file_util_start_editor_from_filelist(const gchar *key, GList *list, const gchar *working_directory, GtkWidget *parent)
 {
-	file_util_start_editor_full(key, NULL, list, NULL, parent, UTILITY_PHASE_ENTERING);
+	file_util_start_editor_full(key, NULL, list, NULL, working_directory, parent, UTILITY_PHASE_ENTERING);
 }
 
 void file_util_start_filter_from_file(const gchar *key, FileData *fd, const gchar *dest_path, GtkWidget *parent)
 {
-	file_util_start_editor_full(key, fd, NULL, dest_path, parent, UTILITY_PHASE_ENTERING);
+	file_util_start_editor_full(key, fd, NULL, dest_path, NULL, parent, UTILITY_PHASE_ENTERING);
 }
 
 void file_util_start_filter_from_filelist(const gchar *key, GList *list, const gchar *dest_path, GtkWidget *parent)
 {
-	file_util_start_editor_full(key, NULL, list, dest_path, parent, UTILITY_PHASE_ENTERING);
+	file_util_start_editor_full(key, NULL, list, dest_path, NULL, parent, UTILITY_PHASE_ENTERING);
 }
 
 void file_util_delete_dir(FileData *fd, GtkWidget *parent)