return !!(editor->flags & EDITOR_NO_PARAM);
}
+gboolean editor_blocks_file(const gchar *key)
+{
+ EditorDescription *editor;
+ if (!key) return FALSE;
+
+ editor = g_hash_table_lookup(editors, key);
+ if (!editor) return FALSE;
+
+ /* Decide if the image file should be blocked during editor execution
+ Editors like gimp can be used long time after the original file was
+ saved, for editing unrelated files.
+ %f vs. %F seems to be a good heuristic to detect this kind of editors.
+ */
+
+ return !(editor->flags & EDITOR_SINGLE_COMMAND);
+}
+
const gchar *editor_get_error_str(EditorFlags flags)
{
if (flags & EDITOR_ERROR_EMPTY) return _("Editor template is empty.");
const gchar *editor_get_name(const gchar *key);
gboolean is_valid_editor_command(const gchar *key);
+gboolean editor_blocks_file(const gchar *key);
+
EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, gchar **output);
#endif
}
else
{
- flags = start_editor_from_filelist_full(ud->external_command, ud->flist, file_util_perform_ci_cb, ud);
+ 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);
+ }
+ else
+ {
+ /* start the editor without callback and finish the operation internally */
+ DEBUG_1("Starting %s and finishing the operation", ud->external_command);
+ flags = start_editor_from_filelist(ud->external_command, ud->flist);
+ file_util_perform_ci_internal(ud);
+ }
}
if (flags)