35 #include <xcb/xcb_xrm.h>
130 "Command executed on accep-entry-custom for window modus",
CONFIG_DEFAULT },
141 "DRUN format string. (Supports: generic,name,comment,exec,categories)",
CONFIG_DEFAULT },
149 "Choose the strategy used for sorting: normal (levenshtein) or fzf.",
CONFIG_DEFAULT },
167 "Set the matching algorithm. (normal, regex, glob, fuzzy)",
CONFIG_DEFAULT },
182 "Separator style (none, dash, solid) *DEPRECATED*",
CONFIG_DEFAULT },
198 "Background to use for fake transparency. (background or screenshot) *DEPRECATED*",
CONFIG_DEFAULT },
200 "Window Format. w (desktop name), t (title), n (name), r (role), c (class)",
CONFIG_DEFAULT },
216 "Max history size (WARNING: can cause slowdowns when set to high).",
CONFIG_DEFAULT },
218 "Hide the prefix mode prefix on the combi view.",
CONFIG_DEFAULT },
220 "Set the character used to negate the matching. ('\\0' to disable)",
CONFIG_DEFAULT },
222 "Directory where history and temporary files are stored.",
CONFIG_DEFAULT },
254 switch ( option->
type )
257 if ( ( option )->mem != NULL ) {
258 g_free ( option->
mem );
261 *( option->
value.
str ) = g_strchomp ( g_strdup ( xrmValue ) );
264 ( option )->mem = *( option->
value.
str );
267 *( option->
value.
num ) = (
unsigned int) g_ascii_strtoull ( xrmValue, NULL, 10 );
270 *( option->
value.
snum ) = (
int) g_ascii_strtoll ( xrmValue, NULL, 10 );
273 if ( strlen ( xrmValue ) > 0 &&
274 g_ascii_strcasecmp ( xrmValue,
"true" ) == 0 ) {
290 const char * namePrefix =
"rofi";
293 char *name = g_strdup_printf (
"%s.%s", namePrefix,
xrmOptions[i].name );
295 char *xrmValue = NULL;
296 if ( xcb_xrm_resource_get_string ( xDB, name, NULL, &xrmValue ) == 0 ) {
308 const char * namePrefix =
"rofi";
313 name = g_strdup_printf (
"%s.%s", namePrefix,
extra_options[i].name );
314 char *xrmValue = NULL;
315 if ( xcb_xrm_resource_get_string ( xDB, name, NULL, &xrmValue ) == 0 ) {
327 xcb_xrm_database_t *xDB = xcb_xrm_database_from_default (
xcb->
connection );
331 xcb_xrm_database_free ( xDB );
340 xcb_xrm_database_t *xDB = xcb_xrm_database_from_file ( filename );
346 xcb_xrm_database_free ( xDB );
355 char *key = g_strdup_printf (
"-%s", option->
name );
356 switch ( option->
type )
370 if ( option->
mem != NULL ) {
371 g_free ( option->
mem );
384 key = g_strdup_printf (
"-no-%s", option->
name );
418 *error = g_strdup_printf (
"Option: %s needs to be set with a string not a %s.", option->
name,
PropertyTypeName[p->
type] );
423 for ( GList *iter = p->
value.
list; iter != NULL; iter = g_list_next ( iter ) ) {
424 if ( value == NULL ) {
425 value = g_strdup ( (
char *) ( iter->data ) );
428 char *nv = g_strjoin (
",", value, (
char *) ( iter->data ), NULL );
435 value = g_strdup ( p->
value.
s );
437 if ( ( option )->mem != NULL ) {
438 g_free ( option->
mem );
444 ( option )->mem = *( option->
value.
str );
449 *error = g_strdup_printf (
"Option: %s needs to be set with a number not a %s.", option->
name,
PropertyTypeName[p->
type] );
457 *error = g_strdup_printf (
"Option: %s needs to be set with a number not a %s.", option->
name,
PropertyTypeName[p->
type] );
465 *error = g_strdup_printf (
"Option: %s needs to be set with a boolean not a %s.", option->
name,
PropertyTypeName[p->
type] );
483 if ( g_strcmp0 ( op->
name, p->
name ) == 0 ) {
489 if ( g_strcmp0 ( op->
name, p->
name ) == 0 ) {
493 *error = g_strdup_printf (
"Option: %s is not found.", p->
name );
518 printf (
"! \"%s\" ", option->
comment );
523 printf (
"%s.%s: %*s", namePrefix, option->
name,
524 (
int) ( 30 - strlen ( option->
name ) ),
"" );
525 switch ( option->
type )
528 printf (
"%u", *( option->
value.
num ) );
531 printf (
"%i", *( option->
value.
snum ) );
534 if ( ( *( option->
value.
str ) ) != NULL ) {
535 printf (
"%s", *( option->
value.
str ) );
539 printf (
"%s", ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false" );
546 printf (
"\\x%02X", *( option->
value.
charc ) );
557 const char * namePrefix =
"rofi";
559 for (
unsigned int i = 0; i < entries; ++i ) {
561 if ( ( i + 1 ) < entries ) {
578 printf (
"\t%s: ", option->
name );
579 switch ( option->
type )
582 printf (
"%u", *( option->
value.
num ) );
585 printf (
"%i", *( option->
value.
snum ) );
588 if ( ( *( option->
value.
str ) ) != NULL ) {
590 printf (
"\"%s\"", *( option->
value.
str ) );
594 printf (
"%s", ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false" );
602 printf (
"'\\x%02X'", *( option->
value.
charc ) );
604 printf (
" /* unsupported */" );
619 printf (
"configuration {\n" );
622 for (
unsigned int i = 0; i < entries; ++i ) {
624 if ( ( i + 1 ) < entries ) {
644 int l = strlen ( xo->
name );
651 printf (
"\t-%s [string]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
652 printf (
"\t\t%s", ( *( xo->
value.
str ) == NULL ) ?
"(unset)" : ( *( xo->
value.
str ) ) );
658 int l = strlen ( xo->
name );
665 printf (
"\t-%s [number]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
666 printf (
"\t\t%u", *( xo->
value.
num ) );
672 int l = strlen ( xo->
name );
679 printf (
"\t-%s [number]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
680 printf (
"\t\t%d", *( xo->
value.
snum ) );
686 int l = strlen ( xo->
name );
693 printf (
"\t-%s [character]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
700 int l = strlen ( xo->
name );
707 printf (
"\t-[no-]%s %-*c%s\n", xo->
name, 33 - l,
' ', xo->
comment );
708 printf (
"\t\t%s", ( *( xo->
value.
snum ) ) ?
"True" :
"False" );
739 int is_term = isatty ( fileno ( stdout ) );
741 for (
unsigned int i = 0; i < entries; ++i ) {
742 if ( ( i + 1 ) < entries ) {
754 void print_help_msg (
const char *option,
const char *type,
const char*text,
const char *def,
int isatty )
756 int l = 37 - strlen ( option ) - strlen ( type );
764 printf (
"\t%s %s %-*c%s\n", option, type, l,
' ', text );
766 printf (
"\t\t%s\n", def );
774 switch ( option->
type )
777 return g_markup_printf_escaped (
"<b%-*s</b> (%u) <span style='italic' size='small'>%s</span>",
780 return g_markup_printf_escaped (
"<b%-*s</b> (%d) <span style='italic' size='small'>%s</span>",
783 return g_markup_printf_escaped (
"<b>%-*s</b> (%s) <span style='italic' size='small'>%s</span>",
789 return g_markup_printf_escaped (
"<b>%-*s</b> (%s) <span style='italic' size='small'>%s</span>",
790 ll, option->
name, ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false", option->
comment );
793 return g_markup_printf_escaped (
"<b>%-*s</b> (%c) <span style='italic' size='small'>%s</span>",
797 return g_markup_printf_escaped (
"<b%-*s</b> (\\x%02X) <span style='italic' size='small'>%s</span>",
804 return g_strdup (
"failed" );
814 size_t max_length = 0;
815 for (
unsigned int i = 0; i < entries; ++i ) {
817 max_length = MAX ( max_length, l );
821 max_length = MAX ( max_length, l );
826 for (
unsigned int i = 0; i < entries; ++i ) {
827 if ( ( i + 1 ) < entries ) {
832 if ( strncmp (
xrmOptions[i].name,
"kb", 2 ) != 0 && strncmp (
xrmOptions[i].name,
"ml", 2 ) != 0 && strncmp (
xrmOptions[i].name,
"me", 2 ) != 0 ) {
836 retv = g_realloc ( retv, ( ( *length ) + 2 ) *
sizeof (
char* ) );
845 retv = g_realloc ( retv, ( ( *length ) + 2 ) *
sizeof (
char* ) );
849 if ( ( *length ) > 0 ) {
850 retv[( *length )] = NULL;