Add separator option.

This commit is contained in:
QC 2014-10-19 19:42:02 +02:00
parent dd5d2576ea
commit f728e3f03e
9 changed files with 92 additions and 4 deletions

View File

@ -78,6 +78,7 @@ Settings config = {
.x_offset = 0,
.fixed_num_lines = FALSE,
.disable_history = FALSE,
.levenshtein_sort = FALSE
.levenshtein_sort = FALSE,
.separator = '\n'
};

View File

@ -12,7 +12,7 @@ rofi - A window switcher, run dialog and dmenu replacement
[ -opacity *opacity%* ] [ -display *display* ] [ -bc *color* ] [ -bw *width* ] [ -dmenu [ -p *prompt* ] ]
[ -ssh-client *client* ] [ -ssh-command *command* ] [ -now ] [ -rnow ] [ -snow ] [ -version ]
[ -help] [ -dump-xresources ] [ -disable-history ] [ -levenshtein-sort ] [ -show *mode* ] [ -switcher
*mode1,mode2* ] [ -e *message*]
*mode1,mode2* ] [ -e *message*] [ -sep *separator* ]
## DESCRIPTION
@ -281,6 +281,10 @@ The default key combinations are:
Popup a message dialog (used internally for showing errors) with *message*.
`-sep` *separator*
Separator for dmenu.
## Pattern
To launch commands (e.g. when using the ssh dialog) the user can enter the used commandline,

View File

@ -10,7 +10,7 @@ rofi \- A window switcher, run dialog and dmenu replacement
[ \-opacity \fIopacity%\fP ] [ \-display \fIdisplay\fP ] [ \-bc \fIcolor\fP ] [ \-bw \fIwidth\fP ] [ \-dmenu [ \-p \fIprompt\fP ] ]
[ \-ssh\-client \fIclient\fP ] [ \-ssh\-command \fIcommand\fP ] [ \-now ] [ \-rnow ] [ \-snow ] [ \-version ]
[ \-help] [ \-dump\-xresources ] [ \-disable\-history ] [ \-levenshtein\-sort ] [ \-show \fImode\fP ] [ \-switcher
\fImode1,mode2\fP ] [ \-e \fImessage\fP]
\fImode1,mode2\fP ] [ \-e \fImessage\fP] [ \-sep \fIseparator\fP ]
.SH DESCRIPTION
.PP
\fBrofi\fP is an X11 popup window switcher. A list is displayed center\-screen showing open window titles, WM_CLASS, and desktop number.
@ -362,6 +362,14 @@ So to have a mode 'Workspaces' using the \fB\fCi3_switch_workspace.sh\fR script
Popup a message dialog (used internally for showing errors) with *message*.
.fi
.RE
.PP
\fB\fC\-sep\fR \fIseparator\fP
.PP
.RS
.nf
Separator for dmenu.
.fi
.RE
.SH Pattern
.PP
To launch commands (e.g. when using the ssh dialog) the user can enter the used commandline,

View File

@ -3,4 +3,6 @@
int helper_parse_setup ( char * string, char ***output, int *lenght, ... );
char* fgets_s ( char* s, int n, FILE *iop, char sep );
#endif // __HELPER_H__

View File

@ -129,6 +129,7 @@ typedef struct _Settings
unsigned int disable_history;
unsigned int levenshtein_sort;
char separator;
} Settings;
extern Settings config;

View File

@ -34,6 +34,7 @@
#include <ctype.h>
#include "rofi.h"
#include "dmenu-dialog.h"
#include "helper.h"
char *dmenu_prompt = "dmenu ";
@ -44,7 +45,7 @@ static char **get_dmenu ( int *length )
*length = 0;
while ( fgets ( buffer, 1024, stdin ) != NULL ) {
while ( fgets_s ( buffer, 1024, stdin, (char) config.separator ) != NULL ) {
retv = g_realloc ( retv, ( ( *length ) + 2 ) * sizeof ( char* ) );
retv[( *length )] = g_strdup ( buffer );
retv[( *length ) + 1] = NULL;

View File

@ -4,6 +4,27 @@
#include <helper.h>
#include <config.h>
char* fgets_s ( char* s, int n, FILE *iop, char sep )
{
register int c;
register char* cs;
cs = s;
while ( --n > 0 && ( c = getc ( iop ) ) != EOF ) {
// put the input char into the current pointer position, then increment it
// if a newline entered, break
if ( ( *cs++ = c ) == sep ) {
// Whipe separator
cs[-1] = '\0';
break;
}
}
*cs = '\0';
return ( c == EOF && cs == s ) ? NULL : s;
}
/**
* Replace the entries
*/

View File

@ -263,6 +263,53 @@ static int find_arg_uint ( const int argc, char * const argv[], const char * con
}
return FALSE;
}
static int find_arg_char ( const int argc, char * const argv[], const char * const key, char *val )
{
int i = find_arg ( argc, argv, key );
if ( val != NULL && i > 0 && i < ( argc - 1 ) ) {
int len = strlen ( argv[i + 1] );
if ( len == 1 ) {
*val = argv[i + 1][0];
}
else if ( len == 2 && argv[i + 1][0] == '\\' ) {
if ( argv[i + 1][1] == 'n' ) {
*val = '\n';
}
else if ( argv[i + 1][1] == 'a' ) {
*val = '\a';
}
else if ( argv[i + 1][1] == 'b' ) {
*val = '\b';
}
else if ( argv[i + 1][1] == 't' ) {
*val = '\t';
}
else if ( argv[i + 1][1] == 'v' ) {
*val = '\v';
}
else if ( argv[i + 1][1] == 'f' ) {
*val = '\f';
}
else if ( argv[i + 1][1] == 'r' ) {
*val = '\r';
}
else if ( argv[i + 1][1] == '\\' ) {
*val = '\\';
}
else {
fprintf ( stderr, "Failed to parse command-line argument." );
exit ( 1 );
}
}
else{
fprintf ( stderr, "Failed to parse command-line argument." );
exit ( 1 );
}
return TRUE;
}
return FALSE;
}
static int ( *xerror )( Display *, XErrorEvent * );
@ -2198,6 +2245,8 @@ static void parse_cmd_options ( int argc, char ** argv )
find_arg_str ( argc, argv, "-skey", &( config.ssh_key ) );
find_arg_char ( argc, argv, "-sep", &( config.separator ) );
// Dump.
if ( find_arg ( argc, argv, "-dump-xresources" ) >= 0 ) {
xresource_dump ();

View File

@ -109,6 +109,7 @@ static XrmOption xrmOptions[] = {
{ xrm_String, "key", { .str = &config.window_key }, NULL },
{ xrm_String, "rkey", { .str = &config.run_key }, NULL },
{ xrm_String, "skey", { .str = &config.ssh_key }, NULL },
{ xrm_Number, "separator", { .num = &config.separator }, NULL },
};