mirror of
https://github.com/davatorium/rofi.git
synced 2025-07-31 21:59:25 -04:00
Fix issue #482: Set work directory
This commit is contained in:
parent
e95b2047bd
commit
cdb1b96414
5 changed files with 34 additions and 36 deletions
|
@ -49,11 +49,14 @@
|
||||||
#define DRUN_CACHE_FILE "rofi2.druncache"
|
#define DRUN_CACHE_FILE "rofi2.druncache"
|
||||||
#define LOG_DOMAIN "Dialogs.DRun"
|
#define LOG_DOMAIN "Dialogs.DRun"
|
||||||
|
|
||||||
static inline int execsh ( const char *cmd, int run_in_term )
|
static inline int execsh ( const char *wd, const char *cmd, int run_in_term )
|
||||||
{
|
{
|
||||||
int retv = TRUE;
|
int retv = TRUE;
|
||||||
char **args = NULL;
|
char **args = NULL;
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
|
if ( !cmd || !cmd[0] ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( run_in_term ) {
|
if ( run_in_term ) {
|
||||||
helper_parse_setup ( config.run_shell_command, &args, &argc, "{cmd}", cmd, NULL );
|
helper_parse_setup ( config.run_shell_command, &args, &argc, "{cmd}", cmd, NULL );
|
||||||
}
|
}
|
||||||
|
@ -61,7 +64,7 @@ static inline int execsh ( const char *cmd, int run_in_term )
|
||||||
helper_parse_setup ( config.run_command, &args, &argc, "{cmd}", cmd, NULL );
|
helper_parse_setup ( config.run_command, &args, &argc, "{cmd}", cmd, NULL );
|
||||||
}
|
}
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
g_spawn_async ( NULL, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error );
|
g_spawn_async ( wd, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error );
|
||||||
if ( error != NULL ) {
|
if ( error != NULL ) {
|
||||||
char *msg = g_strdup_printf ( "Failed to execute: '%s'\nError: '%s'", cmd, error->message );
|
char *msg = g_strdup_printf ( "Failed to execute: '%s'\nError: '%s'", cmd, error->message );
|
||||||
rofi_view_error_dialog ( msg, FALSE );
|
rofi_view_error_dialog ( msg, FALSE );
|
||||||
|
@ -76,16 +79,6 @@ static inline int execsh ( const char *cmd, int run_in_term )
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
|
|
||||||
// execute sub-process
|
|
||||||
static void exec_cmd ( const char *cmd, int run_in_term )
|
|
||||||
{
|
|
||||||
if ( !cmd || !cmd[0] ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
execsh ( cmd, run_in_term );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store extra information about the entry.
|
* Store extra information about the entry.
|
||||||
* Currently the executable and if it should run in terminal.
|
* Currently the executable and if it should run in terminal.
|
||||||
|
@ -100,6 +93,8 @@ typedef struct
|
||||||
char *path;
|
char *path;
|
||||||
/* Executable */
|
/* Executable */
|
||||||
char *exec;
|
char *exec;
|
||||||
|
/* Path */
|
||||||
|
char *exec_path;
|
||||||
/* Name of the Entry */
|
/* Name of the Entry */
|
||||||
char *name;
|
char *name;
|
||||||
/* Generic Name */
|
/* Generic Name */
|
||||||
|
@ -199,7 +194,7 @@ static void exec_cmd_entry ( DRunModeEntry *e )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gchar *fp = rofi_expand_path ( g_strstrip ( str ) );
|
gchar *fp = rofi_expand_path ( g_strstrip ( str ) );
|
||||||
if ( execsh ( fp, e->terminal ) ) {
|
if ( execsh ( e->exec_path, fp, e->terminal ) ) {
|
||||||
char *path = g_build_filename ( cache_dir, DRUN_CACHE_FILE, NULL );
|
char *path = g_build_filename ( cache_dir, DRUN_CACHE_FILE, NULL );
|
||||||
char *key = g_strdup_printf ( "%s:::%s", e->root, e->path );
|
char *key = g_strdup_printf ( "%s:::%s", e->root, e->path );
|
||||||
history_set ( path, key );
|
history_set ( path, key );
|
||||||
|
@ -313,6 +308,11 @@ static void read_desktop_file ( DRunModePrivateData *pd, const char *root, const
|
||||||
if ( g_key_file_has_key ( kf, "Desktop Entry", "Terminal", NULL ) ) {
|
if ( g_key_file_has_key ( kf, "Desktop Entry", "Terminal", NULL ) ) {
|
||||||
pd->entry_list[pd->cmd_list_length].terminal = g_key_file_get_boolean ( kf, "Desktop Entry", "Terminal", NULL );
|
pd->entry_list[pd->cmd_list_length].terminal = g_key_file_get_boolean ( kf, "Desktop Entry", "Terminal", NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pd->entry_list[pd->cmd_list_length].exec_path = NULL;
|
||||||
|
if ( g_key_file_has_key ( kf, "Desktop Entry", "Path", NULL ) ) {
|
||||||
|
pd->entry_list[pd->cmd_list_length].exec_path = g_key_file_get_string ( kf, "Desktop Entry", "Path", NULL );
|
||||||
|
}
|
||||||
( pd->cmd_list_length )++;
|
( pd->cmd_list_length )++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,6 +447,7 @@ static void drun_entry_clear ( DRunModeEntry *e )
|
||||||
g_free ( e->root );
|
g_free ( e->root );
|
||||||
g_free ( e->path );
|
g_free ( e->path );
|
||||||
g_free ( e->exec );
|
g_free ( e->exec );
|
||||||
|
g_free ( e->exec_path );
|
||||||
g_free ( e->name );
|
g_free ( e->name );
|
||||||
g_free ( e->generic_name );
|
g_free ( e->generic_name );
|
||||||
}
|
}
|
||||||
|
@ -471,7 +472,7 @@ static ModeMode drun_mode_result ( Mode *sw, int mretv, char **input, unsigned i
|
||||||
exec_cmd_entry ( &( rmpd->entry_list[selected_line] ) );
|
exec_cmd_entry ( &( rmpd->entry_list[selected_line] ) );
|
||||||
}
|
}
|
||||||
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input != NULL && *input[0] != '\0' ) {
|
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input != NULL && *input[0] != '\0' ) {
|
||||||
exec_cmd ( *input, run_in_term );
|
execsh ( NULL, *input, run_in_term );
|
||||||
}
|
}
|
||||||
else if ( ( mretv & MENU_ENTRY_DELETE ) && selected_line < rmpd->cmd_list_length ) {
|
else if ( ( mretv & MENU_ENTRY_DELETE ) && selected_line < rmpd->cmd_list_length ) {
|
||||||
if ( selected_line < rmpd->history_length ) {
|
if ( selected_line < rmpd->history_length ) {
|
||||||
|
|
|
@ -209,4 +209,3 @@ Mode *script_switcher_parse_setup ( const char *str )
|
||||||
script_switcher_free ( sw );
|
script_switcher_free ( sw );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -734,4 +734,3 @@ Mode window_mode_cd =
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // WINDOW_MODE
|
#endif // WINDOW_MODE
|
||||||
|
|
||||||
|
|
|
@ -102,4 +102,3 @@ static void separator_draw ( widget *wid, cairo_t *draw )
|
||||||
cairo_stroke ( draw );
|
cairo_stroke ( draw );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue