mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-25 13:55:34 -05:00
[DMenu] Add option to read from file instead of stdin.
This commit is contained in:
parent
2195efd3bf
commit
697abdfdfc
3 changed files with 25 additions and 4 deletions
|
@ -7,6 +7,7 @@
|
||||||
- Autodetect number of HW-threads.
|
- Autodetect number of HW-threads.
|
||||||
- Disabled by default.
|
- Disabled by default.
|
||||||
- Highlight multiple selected rows (#287)
|
- Highlight multiple selected rows (#287)
|
||||||
|
- Dmenu can read from file instead of stdin.
|
||||||
Improvements:
|
Improvements:
|
||||||
- Improve speed of reading stdin in dmenu mode.
|
- Improve speed of reading stdin in dmenu mode.
|
||||||
- Correctly handle modifier keys now. Should now support most weird keyboard layouts and switching between them.
|
- Correctly handle modifier keys now. Should now support most weird keyboard layouts and switching between them.
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
[ -display *display* ]
|
[ -display *display* ]
|
||||||
[ -bc *color* ]
|
[ -bc *color* ]
|
||||||
[ -bw *width* ]
|
[ -bw *width* ]
|
||||||
[ -dmenu [ -p *prompt* ] [ -sep *separator* ] [ -l *selected line* ] [ -mesg ] [ -select ] ]
|
[ -dmenu [ -p *prompt* ] [ -sep *separator* ] [ -l *selected line* ] [ -mesg ] [ -select ] [ -input *input* ] ]
|
||||||
[ -filter *filter* ]
|
[ -filter *filter* ]
|
||||||
[ -ssh-client *client* ]
|
[ -ssh-client *client* ]
|
||||||
[ -ssh-command *command* ]
|
[ -ssh-command *command* ]
|
||||||
|
@ -632,6 +632,10 @@ Dump the filtered list to stdout and quit.
|
||||||
This can be used to get the list as **rofi** would filter it.
|
This can be used to get the list as **rofi** would filter it.
|
||||||
Use together with `-filter` command.
|
Use together with `-filter` command.
|
||||||
|
|
||||||
|
`-input` *file*
|
||||||
|
|
||||||
|
Reads from *file* instead of stdin.
|
||||||
|
|
||||||
### Message dialog
|
### Message dialog
|
||||||
|
|
||||||
`-e` *message*
|
`-e` *message*
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <errno.h>
|
||||||
#include "rofi.h"
|
#include "rofi.h"
|
||||||
#include "dialogs/dmenu.h"
|
#include "dialogs/dmenu.h"
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
|
@ -63,7 +64,7 @@ typedef struct _DmenuModePrivateData
|
||||||
unsigned int cmd_list_length;
|
unsigned int cmd_list_length;
|
||||||
} DmenuModePrivateData;
|
} DmenuModePrivateData;
|
||||||
|
|
||||||
static char **get_dmenu ( unsigned int *length )
|
static char **get_dmenu ( FILE *fd, unsigned int *length )
|
||||||
{
|
{
|
||||||
TICK_N ( "Read stdin START" );
|
TICK_N ( "Read stdin START" );
|
||||||
char **retv = NULL;
|
char **retv = NULL;
|
||||||
|
@ -73,7 +74,7 @@ static char **get_dmenu ( unsigned int *length )
|
||||||
gchar *data = NULL;
|
gchar *data = NULL;
|
||||||
size_t data_l = 0;
|
size_t data_l = 0;
|
||||||
ssize_t l = 0;
|
ssize_t l = 0;
|
||||||
while ( ( l = getdelim ( &data, &data_l, config.separator, stdin ) ) > 0 ) {
|
while ( ( l = getdelim ( &data, &data_l, config.separator, fd ) ) > 0 ) {
|
||||||
if ( rvlength < ( *length + 2 ) ) {
|
if ( rvlength < ( *length + 2 ) ) {
|
||||||
rvlength *= 2;
|
rvlength *= 2;
|
||||||
retv = g_realloc ( retv, ( rvlength ) * sizeof ( char* ) );
|
retv = g_realloc ( retv, ( rvlength ) * sizeof ( char* ) );
|
||||||
|
@ -286,7 +287,22 @@ static void dmenu_mode_init ( Mode *sw )
|
||||||
if ( find_arg ( "-i" ) >= 0 ) {
|
if ( find_arg ( "-i" ) >= 0 ) {
|
||||||
config.case_sensitive = FALSE;
|
config.case_sensitive = FALSE;
|
||||||
}
|
}
|
||||||
pd->cmd_list = get_dmenu ( &( pd->cmd_list_length ) );
|
FILE *fd = NULL;
|
||||||
|
str = NULL;
|
||||||
|
if ( find_arg_str ("-input", &str)) {
|
||||||
|
char *estr = rofi_expand_path(str);
|
||||||
|
fd = fopen(str, "r");
|
||||||
|
if(fd == NULL ){
|
||||||
|
char *msg = g_markup_printf_escaped("Failed to open file: <b>%s</b>:\n\t<i>%s</i>", estr, strerror(errno));
|
||||||
|
error_dialog (msg,TRUE);
|
||||||
|
g_free(msg);
|
||||||
|
g_free(estr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_free(estr);
|
||||||
|
}
|
||||||
|
pd->cmd_list = get_dmenu ( fd == NULL?stdin:fd , &( pd->cmd_list_length ) );
|
||||||
|
if(fd != NULL ) fclose(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dmenu_token_match ( const Mode *sw, char **tokens, int not_ascii, int case_sensitive, unsigned int index )
|
static int dmenu_token_match ( const Mode *sw, char **tokens, int not_ascii, int case_sensitive, unsigned int index )
|
||||||
|
|
Loading…
Reference in a new issue