Mercurial > geeqie
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)
