Revision: 1751
http://geeqie.svn.sourceforge.net/geeqie/?rev=1751&view=rev
Author: nadvornik
Date: 2009-06-19 22:34:52 +0000 (Fri, 19 Jun 2009)
Log Message:
-----------
run external commands from current directory even with no files
Modified Paths:
--------------
trunk/src/collect-table.c
trunk/src/dupe.c
trunk/src/editors.c
trunk/src/editors.h
trunk/src/layout_util.c
trunk/src/search.c
trunk/src/utilops.c
trunk/src/utilops.h
trunk/src/view_file.c
Modified: trunk/src/collect-table.c
===================================================================
--- trunk/src/collect-table.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/collect-table.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -666,7 +666,7 @@
list = collection_table_popup_file_list(ct);
if (list)
{
- file_util_start_editor_from_filelist(key, list, ct->listview);
+ file_util_start_editor_from_filelist(key, list, NULL,
ct->listview);
filelist_free(list);
}
}
Modified: trunk/src/dupe.c
===================================================================
--- trunk/src/dupe.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/dupe.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -2046,7 +2046,7 @@
list = dupe_listview_get_selection(dw, dw->listview);
- file_util_start_editor_from_filelist(key, list, dw->window);
+ file_util_start_editor_from_filelist(key, list, NULL, dw->window);
filelist_free(list);
}
Modified: trunk/src/editors.c
===================================================================
--- trunk/src/editors.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/editors.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -52,6 +52,7 @@
EditorCallback callback;
gpointer data;
const EditorDescription *editor;
+ gchar *working_directory; /* fallback if no files are given
(editor_no_param) */
};
@@ -464,6 +465,7 @@
static void editor_data_free(EditorData *ed)
{
editor_verbose_data_free(ed);
+ g_free(ed->working_directory);
g_free(ed);
}
@@ -963,7 +965,7 @@
gchar *args[4];
guint n = 0;
- working_directory = fd ? remove_level_from_path(fd->path) :
NULL;
+ working_directory = fd ? remove_level_from_path(fd->path) :
g_strdup(ed->working_directory);
args[n++] = options->shell.path;
if (options->shell.options && *options->shell.options)
args[n++] = options->shell.options;
@@ -1165,7 +1167,7 @@
editor_command_done(ed);
}
-static EditorFlags editor_command_start(const EditorDescription *editor, const
gchar *text, GList *list, EditorCallback cb, gpointer data)
+static EditorFlags editor_command_start(const EditorDescription *editor, const
gchar *text, GList *list, const gchar *working_directory, EditorCallback cb,
gpointer data)
{
EditorData *ed;
EditorFlags flags = editor->flags;
@@ -1178,7 +1180,8 @@
ed->editor = editor;
ed->total = (flags & (EDITOR_SINGLE_COMMAND | EDITOR_NO_PARAM)) ? 1 :
g_list_length(list);
ed->callback = cb;
- ed->data = data;
+ ed->data = data;
+ ed->working_directory = g_strdup(working_directory);
if ((flags & EDITOR_VERBOSE_MULTI) && list && list->next)
flags |= EDITOR_VERBOSE;
@@ -1197,7 +1200,7 @@
return g_hash_table_lookup(editors, key) != NULL;
}
-EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list,
EditorCallback cb, gpointer data)
+EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list,
const gchar *working_directory, EditorCallback cb, gpointer data)
{
EditorFlags error;
EditorDescription *editor;
@@ -1208,7 +1211,7 @@
if (!editor) return FALSE;
if (!list && !(editor->flags & EDITOR_NO_PARAM)) return FALSE;
- error = editor_command_start(editor, editor->name, list, cb, data);
+ error = editor_command_start(editor, editor->name, list,
working_directory, cb, data);
if (EDITOR_ERRORS(error))
{
@@ -1223,7 +1226,7 @@
EditorFlags start_editor_from_filelist(const gchar *key, GList *list)
{
- return start_editor_from_filelist_full(key, list, NULL, NULL);
+ return start_editor_from_filelist_full(key, list, NULL, NULL, NULL);
}
EditorFlags start_editor_from_file_full(const gchar *key, FileData *fd,
EditorCallback cb, gpointer data)
@@ -1234,7 +1237,7 @@
if (!fd) return FALSE;
list = g_list_append(NULL, fd);
- error = start_editor_from_filelist_full(key, list, cb, data);
+ error = start_editor_from_filelist_full(key, list, NULL, cb, data);
g_list_free(list);
return error;
}
@@ -1244,9 +1247,9 @@
return start_editor_from_file_full(key, fd, NULL, NULL);
}
-EditorFlags start_editor(const gchar *key)
+EditorFlags start_editor(const gchar *key, const gchar *working_directory)
{
- return start_editor_from_filelist_full(key, NULL, NULL, NULL);
+ return start_editor_from_filelist_full(key, NULL, working_directory,
NULL, NULL);
}
gboolean editor_window_flag_set(const gchar *key)
Modified: trunk/src/editors.h
===================================================================
--- trunk/src/editors.h 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/editors.h 2009-06-19 22:34:52 UTC (rev 1751)
@@ -99,11 +99,11 @@
-EditorFlags start_editor(const gchar *key);
+EditorFlags start_editor(const gchar *key, const gchar *working_directory);
EditorFlags start_editor_from_file(const gchar *key, FileData *fd);
EditorFlags start_editor_from_filelist(const gchar *key, GList *list);
EditorFlags start_editor_from_file_full(const gchar *key, FileData *fd,
EditorCallback cb, gpointer data);
-EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list,
EditorCallback cb, gpointer data);
+EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list,
const gchar *working_directory, EditorCallback cb, gpointer data);
gboolean editor_window_flag_set(const gchar *key);
gboolean editor_is_filter(const gchar *key);
gboolean editor_no_param(const gchar *key);
Modified: trunk/src/layout_util.c
===================================================================
--- trunk/src/layout_util.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/layout_util.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -998,7 +998,7 @@
layout_exit_fullscreen(lw);
list = layout_selection_list(lw);
- file_util_start_editor_from_filelist(key, list, lw->window);
+ file_util_start_editor_from_filelist(key, list, layout_get_path(lw),
lw->window);
filelist_free(list);
}
Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/search.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -665,7 +665,7 @@
GList *list;
list = search_result_selection_list(sd);
- file_util_start_editor_from_filelist(key, list, sd->window);
+ file_util_start_editor_from_filelist(key, list, NULL, sd->window);
filelist_free(list);
}
Modified: trunk/src/utilops.c
===================================================================
--- trunk/src/utilops.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/utilops.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -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)
Modified: trunk/src/utilops.h
===================================================================
--- trunk/src/utilops.h 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/utilops.h 2009-06-19 22:34:52 UTC (rev 1751)
@@ -51,7 +51,9 @@
void file_util_rename_simple(FileData *fd, const gchar *dest_path, GtkWidget
*parent);
void file_util_start_editor_from_file(const gchar *key, FileData *fd,
GtkWidget *parent);
-void file_util_start_editor_from_filelist(const gchar *key, GList *list,
GtkWidget *parent);
+
+/* working directory is used only as a fallback when the filelist is empty */
+void file_util_start_editor_from_filelist(const gchar *key, GList *list, const
gchar *working_directory, GtkWidget *parent);
void file_util_start_filter_from_file(const gchar *key, FileData *fd, const
gchar *dest_path, GtkWidget *parent);
void file_util_start_filter_from_filelist(const gchar *key, GList *list, const
gchar *dest_path, GtkWidget *parent);
Modified: trunk/src/view_file.c
===================================================================
--- trunk/src/view_file.c 2009-06-18 20:46:33 UTC (rev 1750)
+++ trunk/src/view_file.c 2009-06-19 22:34:52 UTC (rev 1751)
@@ -321,7 +321,7 @@
if (!vf) return;
list = vf_pop_menu_file_list(vf);
- file_util_start_editor_from_filelist(key, list, vf->listview);
+ file_util_start_editor_from_filelist(key, list, vf->dir_fd->path,
vf->listview);
filelist_free(list);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Are you an open source citizen? Join us for the Open Source Bridge conference!
Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250.
Need another reason to go? 24-hour hacker lounge. Register today!
http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn