35 #include <xcb/xcb_xrm.h> 87 "Enabled modi", CONFIG_DEFAULT },
89 "Window width", CONFIG_DEFAULT },
91 "Number of lines", CONFIG_DEFAULT },
93 "Number of columns", CONFIG_DEFAULT },
96 "Font to use", CONFIG_DEFAULT },
100 "Border width", CONFIG_DEFAULT },
103 "Location on screen", CONFIG_DEFAULT },
106 "Padding", CONFIG_DEFAULT },
108 "Y-offset relative to location", CONFIG_DEFAULT },
110 "X-offset relative to location", CONFIG_DEFAULT },
112 "Always show number of lines", CONFIG_DEFAULT },
115 "Whether to load and show icons", CONFIG_DEFAULT },
118 "Terminal to use", CONFIG_DEFAULT },
120 "Ssh client to use", CONFIG_DEFAULT },
122 "Ssh command to execute", CONFIG_DEFAULT },
124 "Run command to execute", CONFIG_DEFAULT },
126 "Command to get extra run targets", CONFIG_DEFAULT },
128 "Run command to execute that runs in shell", CONFIG_DEFAULT },
130 "Command executed on accep-entry-custom for window modus", CONFIG_DEFAULT },
132 "Window fields to match in window mode", CONFIG_DEFAULT },
134 "Theme to use to look for icons", CONFIG_DEFAULT },
137 "Desktop entry fields to match in drun", CONFIG_DEFAULT },
139 "Disable history in run/ssh", CONFIG_DEFAULT },
141 "Use sorting", CONFIG_DEFAULT },
143 "Use levenshtein sorting also for fuzzy matching", CONFIG_DEFAULT },
145 "Set case-sensitivity", CONFIG_DEFAULT },
147 "Cycle through the results list", CONFIG_DEFAULT },
149 "Enable sidebar-mode", CONFIG_DEFAULT },
151 "Row height (in chars)", CONFIG_DEFAULT },
153 "Enable auto select mode", CONFIG_DEFAULT },
155 "Parse hosts file for ssh mode", CONFIG_DEFAULT },
157 "Parse known_hosts file for ssh mode", CONFIG_DEFAULT },
159 "Set the modi to combine in combi mode", CONFIG_DEFAULT },
161 "Set the matching algorithm. (normal, regex, glob, fuzzy)", CONFIG_DEFAULT },
163 "Tokenize input string", CONFIG_DEFAULT },
165 "", CONFIG_DEFAULT },
168 "Monitor id to show on", CONFIG_DEFAULT },
170 "Margin between rows *DEPRECATED*", CONFIG_DEFAULT },
172 "Padding within rows *DEPRECATED*", CONFIG_DEFAULT },
174 "Pre-set filter", CONFIG_DEFAULT },
176 "Separator style (none, dash, solid) *DEPRECATED*", CONFIG_DEFAULT },
178 "Hide scroll-bar *DEPRECATED*", CONFIG_DEFAULT },
180 "Fullscreen", CONFIG_DEFAULT },
182 "Fake transparency *DEPRECATED*", CONFIG_DEFAULT },
184 "DPI", CONFIG_DEFAULT },
186 "Threads to use for string matching", CONFIG_DEFAULT },
188 "Scrollbar width *DEPRECATED*", CONFIG_DEFAULT },
190 "Scrolling method. (0: Page, 1: Centered)", CONFIG_DEFAULT },
192 "Background to use for fake transparency. (background or screenshot)", CONFIG_DEFAULT },
194 "Window Format. w (desktop name), t (title), n (name), r (role), c (class) *DEPRECATED*", CONFIG_DEFAULT },
196 "Click outside the window to exit", CONFIG_DEFAULT },
198 "Indicate how it match by underlining it.", CONFIG_DEFAULT },
200 "New style theme file", CONFIG_DEFAULT },
202 "Color scheme for normal row", CONFIG_DEFAULT },
204 "Color scheme for urgent row", CONFIG_DEFAULT },
206 "Color scheme for active row", CONFIG_DEFAULT },
208 "Color scheme window", CONFIG_DEFAULT },
210 "Max history size (WARNING: can cause slowdowns when set to high).", CONFIG_DEFAULT },
212 "Hide the prefix mode prefix on the combi view.", CONFIG_DEFAULT },
244 switch ( option->
type )
247 if ( ( option )->mem != NULL ) {
248 g_free ( option->
mem );
251 *( option->
value.
str ) = g_strchomp ( g_strdup ( xrmValue ) );
254 ( option )->mem = *( option->
value.
str );
257 *( option->
value.
num ) = (
unsigned int) g_ascii_strtoull ( xrmValue, NULL, 10 );
260 *( option->
value.
snum ) = (
int) g_ascii_strtoll ( xrmValue, NULL, 10 );
263 if ( strlen ( xrmValue ) > 0 &&
264 g_ascii_strcasecmp ( xrmValue,
"true" ) == 0 ) {
280 const char * namePrefix =
"rofi";
283 char *name = g_strdup_printf (
"%s.%s", namePrefix, xrmOptions[i].name );
285 char *xrmValue = NULL;
286 if ( xcb_xrm_resource_get_string ( xDB, name, NULL, &xrmValue ) == 0 ) {
298 const char * namePrefix =
"rofi";
303 name = g_strdup_printf (
"%s.%s", namePrefix, extra_options[i].name );
304 char *xrmValue = NULL;
305 if ( xcb_xrm_resource_get_string ( xDB, name, NULL, &xrmValue ) == 0 ) {
317 xcb_xrm_database_t *xDB = xcb_xrm_database_from_default ( xcb->
connection );
321 xcb_xrm_database_free ( xDB );
330 xcb_xrm_database_t *xDB = xcb_xrm_database_from_file ( filename );
336 xcb_xrm_database_free ( xDB );
345 char *key = g_strdup_printf (
"-%s", option->
name );
346 switch ( option->
type )
360 if ( option->
mem != NULL ) {
361 g_free ( option->
mem );
374 key = g_strdup_printf (
"-no-%s", option->
name );
408 *error = g_strdup_printf (
"Option: %s needs to be set with a string not a %s.", option->
name,
PropertyTypeName[p->
type] );
413 for ( GList *iter = p->
value.
list; iter != NULL; iter = g_list_next ( iter ) ) {
414 if ( value == NULL ) {
415 value = g_strdup ( (
char *) ( iter->data ) );
418 char *nv = g_strjoin (
",", value, (
char *) ( iter->data ), NULL );
425 value = g_strdup ( p->
value.
s );
427 if ( ( option )->mem != NULL ) {
428 g_free ( option->
mem );
434 ( option )->mem = *( option->
value.
str );
439 *error = g_strdup_printf (
"Option: %s needs to be set with a numger not a %s.", option->
name,
PropertyTypeName[p->
type] );
447 *error = g_strdup_printf (
"Option: %s needs to be set with a numger not a %s.", option->
name,
PropertyTypeName[p->
type] );
455 *error = g_strdup_printf (
"Option: %s needs to be set with a boolean not a %s.", option->
name,
PropertyTypeName[p->
type] );
473 if ( g_strcmp0 ( op->
name, p->
name ) == 0 ) {
479 if ( g_strcmp0 ( op->
name, p->
name ) == 0 ) {
483 *error = g_strdup_printf (
"Option: %s is not found.", p->
name );
489 for (
unsigned int i = 0; i < (
sizeof (
xrmOptions ) /
sizeof ( *xrmOptions ) ); ++i ) {
490 if ( xrmOptions[i].mem != NULL ) {
491 g_free ( xrmOptions[i].mem );
492 xrmOptions[i].
mem = NULL;
496 if ( extra_options[i].mem != NULL ) {
497 g_free ( extra_options[i].mem );
498 extra_options[i].
mem = NULL;
501 if ( extra_options != NULL ) {
502 g_free ( extra_options );
508 printf (
"! \"%s\" ", option->
comment );
513 printf (
"%s.%s: %*s", namePrefix, option->
name,
514 (
int) ( 30 - strlen ( option->
name ) ),
"" );
515 switch ( option->
type )
518 printf (
"%u", *( option->
value.
num ) );
521 printf (
"%i", *( option->
value.
snum ) );
524 if ( ( *( option->
value.
str ) ) != NULL ) {
525 printf (
"%s", *( option->
value.
str ) );
529 printf (
"%s", ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false" );
536 printf (
"\\x%02X", *( option->
value.
charc ) );
547 const char * namePrefix =
"rofi";
548 unsigned int entries =
sizeof (
xrmOptions ) /
sizeof ( *xrmOptions );
549 for (
unsigned int i = 0; i < entries; ++i ) {
551 if ( ( i + 1 ) < entries ) {
552 if ( xrmOptions[i].value.
str == xrmOptions[i + 1].
value.
str ) {
568 printf (
"\t%s: ", option->
name );
569 switch ( option->
type )
572 printf (
"%u", *( option->
value.
num ) );
575 printf (
"%i", *( option->
value.
snum ) );
578 if ( ( *( option->
value.
str ) ) != NULL ) {
580 printf (
"\"%s\"", *( option->
value.
str ) );
584 printf (
"%s", ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false" );
592 printf (
"'\\x%02X'", *( option->
value.
charc ) );
594 printf (
" /* unsupported */" );
609 printf (
"configuration {\n" );
611 unsigned int entries =
sizeof (
xrmOptions ) /
sizeof ( *xrmOptions );
612 for (
unsigned int i = 0; i < entries; ++i ) {
614 if ( ( i + 1 ) < entries ) {
615 if ( xrmOptions[i].value.
str == xrmOptions[i + 1].
value.
str ) {
634 int l = strlen ( xo->
name );
641 printf (
"\t-%s [string]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
642 printf (
"\t\t%s", ( *( xo->
value.
str ) == NULL ) ?
"(unset)" : ( *( xo->
value.
str ) ) );
648 int l = strlen ( xo->
name );
655 printf (
"\t-%s [number]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
656 printf (
"\t\t%u", *( xo->
value.
num ) );
662 int l = strlen ( xo->
name );
669 printf (
"\t-%s [number]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
670 printf (
"\t\t%d", *( xo->
value.
snum ) );
676 int l = strlen ( xo->
name );
683 printf (
"\t-%s [character]%-*c%s\n", xo->
name, 30 - l,
' ', xo->
comment );
690 int l = strlen ( xo->
name );
697 printf (
"\t-[no-]%s %-*c%s\n", xo->
name, 33 - l,
' ', xo->
comment );
698 printf (
"\t\t%s", ( *( xo->
value.
snum ) ) ?
"True" :
"False" );
729 int is_term = isatty ( fileno ( stdout ) );
730 unsigned int entries =
sizeof (
xrmOptions ) /
sizeof ( *xrmOptions );
731 for (
unsigned int i = 0; i < entries; ++i ) {
732 if ( ( i + 1 ) < entries ) {
733 if ( xrmOptions[i].value.
str == xrmOptions[i + 1].
value.
str ) {
744 void print_help_msg (
const char *option,
const char *type,
const char*text,
const char *def,
int isatty )
746 int l = 37 - strlen ( option ) - strlen ( type );
754 printf (
"\t%s %s %-*c%s\n", option, type, l,
' ', text );
756 printf (
"\t\t%s\n", def );
764 switch ( option->
type )
767 return g_markup_printf_escaped (
"<b%-*s</b> (%u) <span style='italic' size='small'>%s</span>",
770 return g_markup_printf_escaped (
"<b%-*s</b> (%d) <span style='italic' size='small'>%s</span>",
773 return g_markup_printf_escaped (
"<b>%-*s</b> (%s) <span style='italic' size='small'>%s</span>",
779 return g_markup_printf_escaped (
"<b>%-*s</b> (%s) <span style='italic' size='small'>%s</span>",
780 ll, option->
name, ( *( option->
value.
num ) == TRUE ) ?
"true" :
"false", option->
comment );
783 return g_markup_printf_escaped (
"<b>%-*s</b> (%c) <span style='italic' size='small'>%s</span>",
787 return g_markup_printf_escaped (
"<b%-*s</b> (\\x%02X) <span style='italic' size='small'>%s</span>",
794 return g_strdup (
"failed" );
799 unsigned int entries =
sizeof (
xrmOptions ) /
sizeof ( *xrmOptions );
804 size_t max_length = 0;
805 for (
unsigned int i = 0; i < entries; ++i ) {
806 size_t l = strlen ( xrmOptions[i].name );
807 max_length = MAX ( max_length, l );
810 size_t l = strlen ( extra_options[i].name );
811 max_length = MAX ( max_length, l );
816 for (
unsigned int i = 0; i < entries; ++i ) {
817 if ( ( i + 1 ) < entries ) {
818 if ( xrmOptions[i].value.
str == xrmOptions[i + 1].
value.
str ) {
822 if ( strncmp ( xrmOptions[i].name,
"kb", 2 ) != 0 && strncmp ( xrmOptions[i].name,
"ml", 2 ) != 0 && strncmp ( xrmOptions[i].name,
"me", 2 ) != 0 ) {
826 retv = g_realloc ( retv, ( ( *length ) + 2 ) *
sizeof (
char* ) );
832 if ( strncmp ( extra_options[i].name,
"kb", 2 ) != 0 && strncmp ( extra_options[i].name,
"ml", 2 ) != 0 && strncmp ( extra_options[i].name,
"me", 2 ) != 0 ) {
835 retv = g_realloc ( retv, ( ( *length ) + 2 ) *
sizeof (
char* ) );
839 if ( ( *length ) > 0 ) {
840 retv[( *length )] = NULL;
static void print_option_string(XrmOption *xo, int is_term)
static XrmOption xrmOptions[]
unsigned int fake_transparency
static void xresource_dump_entry(const char *namePrefix, XrmOption *option)
int find_arg_char(const char *const key, char *val)
unsigned int case_sensitive
union XrmOption::@2 value
unsigned int sidebar_mode
unsigned int parse_known_hosts
unsigned int menu_columns
static void config_parse_cmd_option(XrmOption *option)
void config_parse_xresource_dump(void)
unsigned int scroll_method
unsigned int scrollbar_width
gboolean combi_hide_mode_prefix
int find_arg_uint(const char *const key, unsigned int *val)
int find_arg_str(const char *const key, char **val)
int find_arg_int(const char *const key, int *val)
static char * config_parser_return_display_help_entry(XrmOption *option, size_t l)
void config_parse_xresource_options_file(const char *filename)
static void print_option(XrmOption *xo, int is_term)
unsigned int max_history_size
void print_help_msg(const char *option, const char *type, const char *text, const char *def, int isatty)
void config_parse_xresource_options(xcb_stuff *xcb)
static void print_option_number(XrmOption *xo, int is_term)
char * window_match_fields
void config_xresource_free(void)
static void __config_parse_xresource_options(xcb_xrm_database_t *xDB, enum ConfigSource source)
static void print_option_char(XrmOption *xo, int is_term)
static void print_option_boolean(XrmOption *xo, int is_term)
char ** config_parser_return_display_help(unsigned int *length)
xcb_connection_t * connection
static void print_option_snumber(XrmOption *xo, int is_term)
static void config_parser_set(XrmOption *option, char *xrmValue, enum ConfigSource source)
static void __config_parse_xresource_options_dynamic(xcb_xrm_database_t *xDB, enum ConfigSource source)
static void config_parse_dump_config_option(XrmOption *option)
unsigned int levenshtein_sort
unsigned int hide_scrollbar
const char *const PropertyTypeName[P_NUM_TYPES]
void config_parse_dump_config_rasi_format(gboolean changes)
Dump configuration in rasi format.
void config_parse_cmd_options(void)
int find_arg(const char *const key)
gboolean config_parse_set_property(const Property *p, char **error)
Set config option.
void config_parser_add_option(XrmOptionType type, const char *key, void **value, const char *comment)
static gboolean __config_parser_set_property(XrmOption *option, const Property *p, char **error)
char helper_parse_char(const char *arg)
unsigned int num_extra_options
unsigned int disable_history
unsigned int fixed_num_lines
XrmOption * extra_options
unsigned int line_padding
const char *const ConfigSourceStr[]