From 82b2ce943588c68d3301968e647fa3c460ea83ea Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Wed, 11 Jan 2023 00:20:57 +0100 Subject: [PATCH] [FileBrowser] Allow command to be overwritten --- doc/rofi.1 | 4 +++- doc/rofi.1.markdown | 2 ++ source/modes/filebrowser.c | 14 +++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/rofi.1 b/doc/rofi.1 index bf050441..115dd38b 100644 --- a/doc/rofi.1 +++ b/doc/rofi.1 @@ -38,7 +38,7 @@ To show the \fB\fCdrun\fR dialog: .RE .PP -A very useful setup in minimalistic window managers is to combine \fB\fCdrun\fR, \fB\fCrun\fR +A useful setup in minimalistic window managers is to combine \fB\fCdrun\fR, \fB\fCrun\fR with \fB\fCwindow\fR mode: .PP @@ -1157,6 +1157,8 @@ configuration { show-hidden: false; /** return 1 on cancel. */ cancel-returns-1: true; + /** command */ + command: "xdg-open"; } } diff --git a/doc/rofi.1.markdown b/doc/rofi.1.markdown index b80fa584..b709dd94 100644 --- a/doc/rofi.1.markdown +++ b/doc/rofi.1.markdown @@ -712,6 +712,8 @@ configuration { show-hidden: false; /** return 1 on cancel. */ cancel-returns-1: true; + /** command */ + command: "xdg-open"; } } ``` diff --git a/source/modes/filebrowser.c b/source/modes/filebrowser.c index 9095fc71..b8ee2161 100644 --- a/source/modes/filebrowser.c +++ b/source/modes/filebrowser.c @@ -50,6 +50,7 @@ #include "rofi-icon-fetcher.h" #define FILEBROWSER_CACHE_FILE "rofi3.filebrowsercache" +#define DEFAULT_OPEN "xdg-open" #if defined(__APPLE__) #define st_atim st_atimespec @@ -97,6 +98,7 @@ typedef struct { } FBFile; typedef struct { + char *command; GFile *current_dir; FBFile *array; unsigned int array_length; @@ -344,6 +346,7 @@ static void get_file_browser(Mode *sw) { } static void file_browser_mode_init_config(Mode *sw) { + FileBrowserModePrivateData * pd = (FileBrowserModePrivateData*)mode_get_private_data(sw); char *msg = NULL; gboolean found_error = FALSE; @@ -380,6 +383,14 @@ static void file_browser_mode_init_config(Mode *sw) { file_browser_config.show_hidden = p->value.b; } + p = rofi_theme_find_property(wid, P_STRING, "command", TRUE); + if ( p != NULL && p->type == P_STRING ) { + pd->command = g_strdup(p->value.s); + } else { + pd->command = g_strdup(DEFAULT_OPEN); + } + + if (found_error) { rofi_view_error_dialog(msg, FALSE); @@ -484,7 +495,7 @@ static ModeMode file_browser_mode_result(Mode *sw, int mretv, char **input, (pd->array[selected_line].type == DIRECTORY && special_command)) { char *d_esc = g_shell_quote(pd->array[selected_line].path); - char *cmd = g_strdup_printf("xdg-open %s", d_esc); + char *cmd = g_strdup_printf("%s %s",pd->command, d_esc); g_free(d_esc); char *cdir = g_file_get_path(pd->current_dir); helper_execute_command(cdir, cmd, FALSE, NULL); @@ -546,6 +557,7 @@ static void file_browser_mode_destroy(Mode *sw) { (FileBrowserModePrivateData *)mode_get_private_data(sw); if (pd != NULL) { g_object_unref(pd->current_dir); + g_free(pd->command); free_list(pd); g_free(pd); mode_set_private_data(sw, NULL);