diff options
author | Dave Davenport <qball@gmpclient.org> | 2020-04-01 13:58:01 +0200 |
---|---|---|
committer | Dave Davenport <qball@gmpclient.org> | 2020-04-01 13:58:01 +0200 |
commit | aa07b8ef9475032634492f42a4f568c01fc47763 (patch) | |
tree | e5cdbab79a8c9db1b1f855f3e08520216bf0eef9 | |
parent | 5b8aebad3e9be5cf22f2c313e58dec1b56ef7d9a (diff) |
[Script] Add option to set deliminter and example script.
Issue: #1041
-rwxr-xr-x | Examples/test_script_mode_delim.sh | 16 | ||||
-rw-r--r-- | doc/rofi.1 | 7 | ||||
-rw-r--r-- | source/dialogs/script.c | 10 |
3 files changed, 31 insertions, 2 deletions
diff --git a/Examples/test_script_mode_delim.sh b/Examples/test_script_mode_delim.sh new file mode 100755 index 00000000..1fc15871 --- /dev/null +++ b/Examples/test_script_mode_delim.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +if [ x"$@" = x"quit" ] +then + exit 0 +fi + +# Override the previously set prompt. +echo -en "\x00delim\x1f\\x1\n" +echo -en "\x00prompt\x1fChange prompt\x1" +for a in {1..10} +do + echo -en "$a\x1" +done +echo -en "newline\ntest\x1" +echo -en "quit" @@ -658,6 +658,13 @@ rofi \-show run \-sidebar\-mode \-lines 0 .RE .PP +\fB\fC\-eh\fR \fInumber\fP + +.PP +Set row height (in chars) +Default: \fI1\fP + +.PP \fB\fC\-auto\-select\fR .PP diff --git a/source/dialogs/script.c b/source/dialogs/script.c index 959f3c34..a1aa5647 100644 --- a/source/dialogs/script.c +++ b/source/dialogs/script.c @@ -68,6 +68,7 @@ typedef struct char *message; char *prompt; gboolean do_markup; + char delim; } ScriptModePrivateData; /** @@ -127,11 +128,15 @@ static void parse_header_entry ( Mode *sw, char *line, ssize_t length ) else if ( strcasecmp ( line, "active" ) == 0 ) { parse_ranges ( value, &( pd->active_list ), &( pd->num_active_list ) ); } + else if ( strcasecmp ( line, "delim" ) == 0 ) { + pd->delim = helper_parse_char ( value ); + } } } static DmenuScriptEntry *get_script_output ( Mode *sw, char *command, char *arg, unsigned int *length ) { + ScriptModePrivateData *pd = (ScriptModePrivateData *) sw->private_data; int fd = -1; GError *error = NULL; DmenuScriptEntry *retv = NULL; @@ -159,9 +164,9 @@ static DmenuScriptEntry *get_script_output ( Mode *sw, char *command, char *arg, size_t buffer_length = 0; ssize_t read_length = 0; size_t actual_size = 0; - while ( ( read_length = getline ( &buffer, &buffer_length, inp ) ) > 0 ) { + while ( ( read_length = getdelim ( &buffer, &buffer_length, pd->delim, inp ) ) > 0 ) { // Filter out line-end. - if ( buffer[read_length - 1] == '\n' ) { + if ( buffer[read_length - 1] == pd->delim ) { buffer[read_length - 1] = '\0'; } if ( buffer[0] == '\0' ) { @@ -217,6 +222,7 @@ static int script_mode_init ( Mode *sw ) { if ( sw->private_data == NULL ) { ScriptModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); + pd->delim = '\n'; sw->private_data = (void *) pd; pd->cmd_list = get_script_output ( sw, (char *) sw->ed, NULL, &( pd->cmd_list_length ) ); } |