mirror of
https://github.com/lbonn/rofi
synced 2024-11-15 08:37:17 +00:00
Cleanups and indenting.
This commit is contained in:
parent
a26cf2637d
commit
21a0666a6e
7 changed files with 309 additions and 285 deletions
|
@ -70,92 +70,10 @@ Settings config = {
|
||||||
// Mode of window, list (Vertical) or dmenu like (Horizontal)
|
// Mode of window, list (Vertical) or dmenu like (Horizontal)
|
||||||
.hmode = FALSE,
|
.hmode = FALSE,
|
||||||
// Padding of the window.
|
// Padding of the window.
|
||||||
.padding = 5,
|
.padding = 5,
|
||||||
.show_title = 1,
|
.show_title = 1,
|
||||||
.y_offset = 0,
|
.y_offset = 0,
|
||||||
.x_offset = 0,
|
.x_offset = 0,
|
||||||
.fixed_num_lines = FALSE
|
.fixed_num_lines = FALSE
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Do some input validation, especially the first few could break things.
|
|
||||||
* It is good to catch them beforehand.
|
|
||||||
*
|
|
||||||
* This functions exits the program with 1 when it finds an invalid configuration.
|
|
||||||
*/
|
|
||||||
void config_sanity_check( void )
|
|
||||||
{
|
|
||||||
if ( config.menu_lines == 0 ) {
|
|
||||||
fprintf(stderr, "config.menu_lines is invalid. You need at least one visible line.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if ( config.menu_columns == 0 ) {
|
|
||||||
fprintf(stderr, "config.menu_columns is invalid. You need at least one visible column.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( config.menu_width == 0 ) {
|
|
||||||
fprintf(stderr, "config.menu_width is invalid. You cannot have a window with no width.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !( config.location >= WL_CENTER && config.location <= WL_WEST ) )
|
|
||||||
{
|
|
||||||
fprintf(stderr, "config.location is invalid. ( %d >= %d >= %d) does not hold.\n",
|
|
||||||
WL_WEST, config.location, WL_CENTER);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !( config.hmode == TRUE || config.hmode == FALSE ) )
|
|
||||||
{
|
|
||||||
fprintf(stderr, "config.hmode is invalid.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print out the current configuration.
|
|
||||||
*/
|
|
||||||
void config_print( void )
|
|
||||||
{
|
|
||||||
printf("Windows opacity: %3d%%\n", config.window_opacity);
|
|
||||||
printf("Border width: %3d\n", config.menu_bw);
|
|
||||||
printf("Padding: %3d\n", config.padding);
|
|
||||||
printf("Width: %4d%s\n", config.menu_width,
|
|
||||||
config.menu_width > 100? "px":"%");
|
|
||||||
printf("offset (x,y): (%2d,%2d)px\n", config.x_offset, config.y_offset);
|
|
||||||
printf("Location: ");
|
|
||||||
switch(config.location)
|
|
||||||
{
|
|
||||||
case WL_CENTER: printf(" Center\n"); break;
|
|
||||||
case WL_NORTH_WEST: printf("North West\n"); break;
|
|
||||||
case WL_NORTH: printf(" North\n"); break;
|
|
||||||
case WL_NORTH_EAST: printf("North East\n"); break;
|
|
||||||
case WL_EAST: printf(" East\n"); break;
|
|
||||||
case WL_EAST_SOUTH: printf("East South\n"); break;
|
|
||||||
case WL_SOUTH: printf(" South\n"); break;
|
|
||||||
case WL_SOUTH_WEST: printf("South West\n"); break;
|
|
||||||
case WL_WEST: printf(" West\n"); break;
|
|
||||||
default: printf(" Invalid\n"); break;
|
|
||||||
}
|
|
||||||
printf("# Lines: %3d\n", config.menu_lines);
|
|
||||||
printf("# Columns: %3d\n", config.menu_columns);
|
|
||||||
printf("Fixed number of lines: %5s\n", config.fixed_num_lines?"true":"false");
|
|
||||||
printf("Horizontal model: %5s\n", config.hmode == TRUE?"true":"false");
|
|
||||||
|
|
||||||
|
|
||||||
printf("Font: %35s\n", config.menu_font);
|
|
||||||
/* Colors */
|
|
||||||
printf("FG Color: %7s\n", config.menu_fg);
|
|
||||||
printf("BG Color: %7s\n", config.menu_bg);
|
|
||||||
printf("Highlight FG Color: %7s\n", config.menu_hlfg);
|
|
||||||
printf("Highlight BG Color: %7s\n", config.menu_hlbg);
|
|
||||||
printf("Border color: %7s\n", config.menu_bc);
|
|
||||||
|
|
||||||
/* Terminal */
|
|
||||||
printf("Terminal emulator: %22s\n", config.terminal_emulator);
|
|
||||||
/* Keybindings. */
|
|
||||||
printf("Window switcher key: %7s\n", config.window_key);
|
|
||||||
printf("Run dialog key: %7s\n", config.run_key);
|
|
||||||
printf("SSH dialog key: %7s\n", config.ssh_key);
|
|
||||||
}
|
|
||||||
|
|
199
source/history.c
199
source/history.c
|
@ -33,8 +33,8 @@
|
||||||
#include "rofi.h"
|
#include "rofi.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
#define HISTORY_NAME_LENGTH 256
|
#define HISTORY_NAME_LENGTH 256
|
||||||
#define HISTORY_MAX_ENTRIES 25
|
#define HISTORY_MAX_ENTRIES 25
|
||||||
|
|
||||||
typedef struct __element
|
typedef struct __element
|
||||||
{
|
{
|
||||||
|
@ -49,40 +49,41 @@ static int __element_sort_func ( const void *ea, const void *eb )
|
||||||
return b->index - a->index;
|
return b->index - a->index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __history_write_element_list( FILE *fd, _element **list, unsigned int length)
|
static void __history_write_element_list ( FILE *fd, _element **list, unsigned int length )
|
||||||
{
|
{
|
||||||
if(list == NULL) {
|
if ( list == NULL )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Sort the list before writing out.
|
// Sort the list before writing out.
|
||||||
qsort ( list, length, sizeof ( _element* ), __element_sort_func );
|
qsort ( list, length, sizeof ( _element* ), __element_sort_func );
|
||||||
|
|
||||||
// Set the max length of the list.
|
// Set the max length of the list.
|
||||||
length = (length > HISTORY_MAX_ENTRIES)? HISTORY_MAX_ENTRIES:length;
|
length = ( length > HISTORY_MAX_ENTRIES ) ? HISTORY_MAX_ENTRIES : length;
|
||||||
|
|
||||||
// Write out entries.
|
// Write out entries.
|
||||||
for(unsigned int iter = 0; iter < length ;iter++)
|
for ( unsigned int iter = 0; iter < length; iter++ )
|
||||||
{
|
{
|
||||||
fprintf(fd , "%ld %s\n", list[iter]->index, list[iter]->name);
|
fprintf ( fd, "%ld %s\n", list[iter]->index, list[iter]->name );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static _element ** __history_get_element_list ( FILE *fd, unsigned int *length )
|
static _element ** __history_get_element_list ( FILE *fd, unsigned int *length )
|
||||||
{
|
{
|
||||||
char buffer[HISTORY_NAME_LENGTH+16];
|
char buffer[HISTORY_NAME_LENGTH + 16];
|
||||||
_element **retv = NULL;
|
_element **retv = NULL;
|
||||||
|
|
||||||
if (length == NULL)
|
if ( length == NULL )
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
*length = 0;
|
*length = 0;
|
||||||
|
|
||||||
if( fd == NULL)
|
if ( fd == NULL )
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
while ( fgets (buffer, HISTORY_NAME_LENGTH+16, fd ) != NULL)
|
while ( fgets ( buffer, HISTORY_NAME_LENGTH + 16, fd ) != NULL )
|
||||||
{
|
{
|
||||||
char * start = NULL;
|
char * start = NULL;
|
||||||
// Skip empty lines.
|
// Skip empty lines.
|
||||||
|
@ -90,18 +91,18 @@ static _element ** __history_get_element_list ( FILE *fd, unsigned int *length )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
retv = realloc ( retv, ( *length + 2 ) * sizeof ( _element* ) );
|
retv = realloc ( retv, ( *length + 2 ) * sizeof ( _element* ) );
|
||||||
retv[(*length)] = malloc ( sizeof ( _element ) );
|
retv[( *length )] = malloc ( sizeof ( _element ) );
|
||||||
// remove trailing \n
|
// remove trailing \n
|
||||||
buffer[strlen ( buffer ) - 1] = '\0';
|
buffer[strlen ( buffer ) - 1] = '\0';
|
||||||
// Parse the number of times.
|
// Parse the number of times.
|
||||||
retv[(*length)]->index = strtol ( buffer, &start, 10 );
|
retv[( *length )]->index = strtol ( buffer, &start, 10 );
|
||||||
strncpy(retv[(*length)]->name, (start+1),HISTORY_NAME_LENGTH);
|
strncpy ( retv[( *length )]->name, ( start + 1 ), HISTORY_NAME_LENGTH );
|
||||||
// Force trailing '\0'
|
// Force trailing '\0'
|
||||||
retv[(*length)]->name[HISTORY_NAME_LENGTH-1] = '\0';
|
retv[( *length )]->name[HISTORY_NAME_LENGTH - 1] = '\0';
|
||||||
retv[(*length) + 1] = NULL;
|
retv[( *length ) + 1] = NULL;
|
||||||
|
|
||||||
(*length)++;
|
( *length )++;
|
||||||
}
|
}
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
|
@ -109,41 +110,44 @@ static _element ** __history_get_element_list ( FILE *fd, unsigned int *length )
|
||||||
|
|
||||||
void history_set ( const char *filename, const char *entry )
|
void history_set ( const char *filename, const char *entry )
|
||||||
{
|
{
|
||||||
int found = 0;
|
int found = 0;
|
||||||
unsigned int curr = 0;
|
unsigned int curr = 0;
|
||||||
unsigned int length = 0;
|
unsigned int length = 0;
|
||||||
_element **list = NULL;
|
_element **list = NULL;
|
||||||
// Open file for reading and writing.
|
// Open file for reading and writing.
|
||||||
FILE *fd = fopen(filename, "a+");
|
FILE *fd = fopen ( filename, "a+" );
|
||||||
if(fd == NULL)
|
if ( fd == NULL )
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
|
fprintf ( stderr, "Failed to open file: %s\n", strerror ( errno ) );
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
// Get list.
|
// Get list.
|
||||||
list = __history_get_element_list(fd, &length);
|
list = __history_get_element_list ( fd, &length );
|
||||||
|
|
||||||
// Look if the entry exists.
|
// Look if the entry exists.
|
||||||
for(unsigned int iter = 0;!found && iter < length; iter++)
|
for ( unsigned int iter = 0; !found && iter < length; iter++ )
|
||||||
{
|
{
|
||||||
if(strcmp(list[iter]->name, entry) == 0)
|
if ( strcmp ( list[iter]->name, entry ) == 0 )
|
||||||
{
|
{
|
||||||
curr = iter;
|
curr = iter;
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(found) {
|
if ( found )
|
||||||
|
{
|
||||||
// If exists, increment list index number
|
// If exists, increment list index number
|
||||||
list[curr]->index++;
|
list[curr]->index++;
|
||||||
}else{
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// If not exists, add it.
|
// If not exists, add it.
|
||||||
// Increase list by one
|
// Increase list by one
|
||||||
list = realloc(list,(length+2)*sizeof(_element *));
|
list = realloc ( list, ( length + 2 ) * sizeof ( _element * ) );
|
||||||
list[length] = malloc(sizeof(_element));
|
list[length] = malloc ( sizeof ( _element ) );
|
||||||
// Copy name
|
// Copy name
|
||||||
strncpy(list[length]->name, entry, HISTORY_NAME_LENGTH);
|
strncpy ( list[length]->name, entry, HISTORY_NAME_LENGTH );
|
||||||
list[length]->name[HISTORY_NAME_LENGTH-1] = '\0';
|
list[length]->name[HISTORY_NAME_LENGTH - 1] = '\0';
|
||||||
// set # hits
|
// set # hits
|
||||||
list[length]->index = 1;
|
list[length]->index = 1;
|
||||||
|
|
||||||
|
@ -152,111 +156,130 @@ void history_set ( const char *filename, const char *entry )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rewind.
|
// Rewind.
|
||||||
fseek(fd, 0L, SEEK_SET);
|
fseek ( fd, 0L, SEEK_SET );
|
||||||
// Clear file.
|
// Clear file.
|
||||||
if ( ftruncate(fileno(fd), 0) == 0)
|
if ( ftruncate ( fileno ( fd ), 0 ) == 0 )
|
||||||
{
|
{
|
||||||
// Write list.
|
// Write list.
|
||||||
__history_write_element_list(fd, list, length);
|
__history_write_element_list ( fd, list, length );
|
||||||
}else {
|
}
|
||||||
fprintf(stderr, "Failed to truncate file: %s\n", strerror(errno));
|
else
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "Failed to truncate file: %s\n", strerror ( errno ) );
|
||||||
}
|
}
|
||||||
// Free the list.
|
// Free the list.
|
||||||
for(unsigned int iter = 0; iter < length; iter++)
|
for ( unsigned int iter = 0; iter < length; iter++ )
|
||||||
{
|
{
|
||||||
if(list[iter] != NULL) { free(list[iter]); }
|
if ( list[iter] != NULL )
|
||||||
|
{
|
||||||
|
free ( list[iter] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( list != NULL )
|
||||||
|
{
|
||||||
|
free ( list );
|
||||||
}
|
}
|
||||||
if(list != NULL) free(list);
|
|
||||||
// Close file.
|
// Close file.
|
||||||
fclose(fd);
|
fclose ( fd );
|
||||||
}
|
}
|
||||||
|
|
||||||
void history_remove ( const char *filename, const char *entry )
|
void history_remove ( const char *filename, const char *entry )
|
||||||
{
|
{
|
||||||
_element ** list = NULL;
|
_element ** list = NULL;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
unsigned int curr = 0;
|
unsigned int curr = 0;
|
||||||
unsigned int length = 0;
|
unsigned int length = 0;
|
||||||
// Open file for reading and writing.
|
// Open file for reading and writing.
|
||||||
FILE *fd = fopen(filename, "a+");
|
FILE *fd = fopen ( filename, "a+" );
|
||||||
if(fd == NULL)
|
if ( fd == NULL )
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
|
fprintf ( stderr, "Failed to open file: %s\n", strerror ( errno ) );
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
// Get list.
|
// Get list.
|
||||||
list = __history_get_element_list(fd, &length);
|
list = __history_get_element_list ( fd, &length );
|
||||||
|
|
||||||
// Find entry.
|
// Find entry.
|
||||||
for(unsigned int iter = 0;!found && iter < length; iter++)
|
for ( unsigned int iter = 0; !found && iter < length; iter++ )
|
||||||
{
|
{
|
||||||
if(strcmp(list[iter]->name, entry) == 0)
|
if ( strcmp ( list[iter]->name, entry ) == 0 )
|
||||||
{
|
{
|
||||||
curr = iter;
|
curr = iter;
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If found, remove it and write out new file.
|
// If found, remove it and write out new file.
|
||||||
if(found) {
|
if ( found )
|
||||||
|
{
|
||||||
// Remove the entry.
|
// Remove the entry.
|
||||||
free(list[curr]);
|
free ( list[curr] );
|
||||||
// Swap last to here (if list is size 1, we just swap empty sets).
|
// Swap last to here (if list is size 1, we just swap empty sets).
|
||||||
list[curr] = list[length-1];
|
list[curr] = list[length - 1];
|
||||||
// Empty last.
|
// Empty last.
|
||||||
list[length-1] = NULL;
|
list[length - 1] = NULL;
|
||||||
length--;
|
length--;
|
||||||
|
|
||||||
// Rewind.
|
// Rewind.
|
||||||
fseek(fd, 0L, SEEK_SET);
|
fseek ( fd, 0L, SEEK_SET );
|
||||||
// Clear list.
|
// Clear list.
|
||||||
if(ftruncate(fileno(fd), 0) == 0) {
|
if ( ftruncate ( fileno ( fd ), 0 ) == 0 )
|
||||||
|
{
|
||||||
// Write list.
|
// Write list.
|
||||||
__history_write_element_list(fd, list, length);
|
__history_write_element_list ( fd, list, length );
|
||||||
} else {
|
}
|
||||||
fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
|
else
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "Failed to open file: %s\n", strerror ( errno ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free the list.
|
// Free the list.
|
||||||
for(unsigned int iter = 0; iter < length; iter++)
|
for ( unsigned int iter = 0; iter < length; iter++ )
|
||||||
{
|
{
|
||||||
if(list[iter] != NULL) { free(list[iter]); }
|
if ( list[iter] != NULL )
|
||||||
|
{
|
||||||
|
free ( list[iter] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( list != NULL )
|
||||||
|
{
|
||||||
|
free ( list );
|
||||||
}
|
}
|
||||||
if(list != NULL) free(list);
|
|
||||||
// Close file.
|
// Close file.
|
||||||
fclose(fd);
|
fclose ( fd );
|
||||||
}
|
}
|
||||||
|
|
||||||
char ** history_get_list ( const char *filename, unsigned int *length )
|
char ** history_get_list ( const char *filename, unsigned int *length )
|
||||||
{
|
{
|
||||||
_element **list = NULL;
|
_element **list = NULL;
|
||||||
char **retv = NULL;
|
char **retv = NULL;
|
||||||
// Open file.
|
// Open file.
|
||||||
FILE *fd = fopen(filename, "r");
|
FILE *fd = fopen ( filename, "r" );
|
||||||
if(fd == NULL)
|
if ( fd == NULL )
|
||||||
{
|
{
|
||||||
if(errno != ENOENT) {
|
if ( errno != ENOENT )
|
||||||
fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
|
{
|
||||||
|
fprintf ( stderr, "Failed to open file: %s\n", strerror ( errno ) );
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
// Get list.
|
// Get list.
|
||||||
list = __history_get_element_list(fd, length);
|
list = __history_get_element_list ( fd, length );
|
||||||
|
|
||||||
// Copy list in right format.
|
// Copy list in right format.
|
||||||
if((*length) > 0 )
|
if ( ( *length ) > 0 )
|
||||||
{
|
{
|
||||||
retv = malloc(((*length)+1)*sizeof(char *));
|
retv = malloc ( ( ( *length ) + 1 ) * sizeof ( char * ) );
|
||||||
for ( int iter = 0; iter < (*length); iter++)
|
for ( int iter = 0; iter < ( *length ); iter++ )
|
||||||
{
|
{
|
||||||
retv[iter] = strdup(list[iter]->name);
|
retv[iter] = strdup ( list[iter]->name );
|
||||||
free(list[iter]);
|
free ( list[iter] );
|
||||||
}
|
}
|
||||||
retv[(*length)] = NULL;
|
retv[( *length )] = NULL;
|
||||||
free(list);
|
free ( list );
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fd);
|
fclose ( fd );
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
|
|
121
source/rofi.c
121
source/rofi.c
|
@ -152,11 +152,7 @@ static inline void tokenize_free ( char **ip )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ip[0] )
|
free ( ip[0] );
|
||||||
{
|
|
||||||
free ( ip[0] );
|
|
||||||
}
|
|
||||||
|
|
||||||
free ( ip );
|
free ( ip );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1495,10 +1491,7 @@ MenuReturn menu ( char **lines, char **input, char *prompt, Time *time, int *shi
|
||||||
release_keyboard ();
|
release_keyboard ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( *input != NULL )
|
free ( *input );
|
||||||
{
|
|
||||||
free ( *input );
|
|
||||||
}
|
|
||||||
|
|
||||||
*input = strdup ( text->text );
|
*input = strdup ( text->text );
|
||||||
|
|
||||||
|
@ -1673,8 +1666,6 @@ SwitcherMode run_switcher_window ( char **input )
|
||||||
|
|
||||||
void run_switcher ( int fmode, SwitcherMode mode )
|
void run_switcher ( int fmode, SwitcherMode mode )
|
||||||
{
|
{
|
||||||
// TODO: this whole function is messy. build a nicer solution
|
|
||||||
|
|
||||||
// we fork because it's technically possible to have multiple window
|
// we fork because it's technically possible to have multiple window
|
||||||
// lists up at once on a zaphod multihead X setup.
|
// lists up at once on a zaphod multihead X setup.
|
||||||
// this also happens to isolate the Xft font stuff in a child process
|
// this also happens to isolate the Xft font stuff in a child process
|
||||||
|
@ -1724,10 +1715,7 @@ void run_switcher ( int fmode, SwitcherMode mode )
|
||||||
}
|
}
|
||||||
} while ( mode != MODE_EXIT );
|
} while ( mode != MODE_EXIT );
|
||||||
|
|
||||||
if ( input != NULL )
|
free ( input );
|
||||||
{
|
|
||||||
free ( input );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fmode == FORK )
|
if ( fmode == FORK )
|
||||||
{
|
{
|
||||||
|
@ -1950,9 +1938,6 @@ static void parse_cmd_options ( int argc, char ** argv )
|
||||||
config_print ();
|
config_print ();
|
||||||
exit ( EXIT_SUCCESS );
|
exit ( EXIT_SUCCESS );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sanity check
|
|
||||||
config_sanity_check ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cleanup ()
|
static void cleanup ()
|
||||||
|
@ -1992,10 +1977,96 @@ static void cleanup ()
|
||||||
xdgWipeHandle ( &xdg_handle );
|
xdgWipeHandle ( &xdg_handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do some input validation, especially the first few could break things.
|
||||||
|
* It is good to catch them beforehand.
|
||||||
|
*
|
||||||
|
* This functions exits the program with 1 when it finds an invalid configuration.
|
||||||
|
*/
|
||||||
|
void config_sanity_check ( void )
|
||||||
|
{
|
||||||
|
if ( config.menu_lines == 0 )
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "config.menu_lines is invalid. You need at least one visible line.\n" );
|
||||||
|
exit ( 1 );
|
||||||
|
}
|
||||||
|
if ( config.menu_columns == 0 )
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "config.menu_columns is invalid. You need at least one visible column.\n" );
|
||||||
|
exit ( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( config.menu_width == 0 )
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "config.menu_width is invalid. You cannot have a window with no width.\n" );
|
||||||
|
exit ( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !( config.location >= WL_CENTER && config.location <= WL_WEST ) )
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "config.location is invalid. ( %d >= %d >= %d) does not hold.\n",
|
||||||
|
WL_WEST, config.location, WL_CENTER );
|
||||||
|
exit ( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !( config.hmode == TRUE || config.hmode == FALSE ) )
|
||||||
|
{
|
||||||
|
fprintf ( stderr, "config.hmode is invalid.\n" );
|
||||||
|
exit ( 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print out the current configuration.
|
||||||
|
*/
|
||||||
|
void config_print ( void )
|
||||||
|
{
|
||||||
|
printf ( "Windows opacity: %3d%%\n", config.window_opacity );
|
||||||
|
printf ( "Border width: %3d\n", config.menu_bw );
|
||||||
|
printf ( "Padding: %3d\n", config.padding );
|
||||||
|
printf ( "Width: %4d%s\n", config.menu_width,
|
||||||
|
config.menu_width > 100 ? "px" : "%" );
|
||||||
|
printf ( "offset (x,y): (%2d,%2d)px\n", config.x_offset, config.y_offset );
|
||||||
|
printf ( "Location: " );
|
||||||
|
switch ( config.location )
|
||||||
|
{
|
||||||
|
case WL_CENTER: printf ( " Center\n" ); break;
|
||||||
|
case WL_NORTH_WEST: printf ( "North West\n" ); break;
|
||||||
|
case WL_NORTH: printf ( " North\n" ); break;
|
||||||
|
case WL_NORTH_EAST: printf ( "North East\n" ); break;
|
||||||
|
case WL_EAST: printf ( " East\n" ); break;
|
||||||
|
case WL_EAST_SOUTH: printf ( "East South\n" ); break;
|
||||||
|
case WL_SOUTH: printf ( " South\n" ); break;
|
||||||
|
case WL_SOUTH_WEST: printf ( "South West\n" ); break;
|
||||||
|
case WL_WEST: printf ( " West\n" ); break;
|
||||||
|
default: printf ( " Invalid\n" ); break;
|
||||||
|
}
|
||||||
|
printf ( "# Lines: %3d\n", config.menu_lines );
|
||||||
|
printf ( "# Columns: %3d\n", config.menu_columns );
|
||||||
|
printf ( "Fixed number of lines: %5s\n", config.fixed_num_lines ? "true" : "false" );
|
||||||
|
printf ( "Horizontal model: %5s\n", config.hmode == TRUE ? "true" : "false" );
|
||||||
|
|
||||||
|
|
||||||
|
printf ( "Font: %35s\n", config.menu_font );
|
||||||
|
/* Colors */
|
||||||
|
printf ( "FG Color: %7s\n", config.menu_fg );
|
||||||
|
printf ( "BG Color: %7s\n", config.menu_bg );
|
||||||
|
printf ( "Highlight FG Color: %7s\n", config.menu_hlfg );
|
||||||
|
printf ( "Highlight BG Color: %7s\n", config.menu_hlbg );
|
||||||
|
printf ( "Border color: %7s\n", config.menu_bc );
|
||||||
|
|
||||||
|
/* Terminal */
|
||||||
|
printf ( "Terminal emulator: %22s\n", config.terminal_emulator );
|
||||||
|
/* Keybindings. */
|
||||||
|
printf ( "Window switcher key: %7s\n", config.window_key );
|
||||||
|
printf ( "Run dialog key: %7s\n", config.run_key );
|
||||||
|
printf ( "SSH dialog key: %7s\n", config.ssh_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main ( int argc, char *argv[] )
|
int main ( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
int i, j;
|
|
||||||
|
|
||||||
// Initialize xdg, so we can grab the xdgCacheHome
|
// Initialize xdg, so we can grab the xdgCacheHome
|
||||||
if ( xdgInitHandle ( &xdg_handle ) == NULL )
|
if ( xdgInitHandle ( &xdg_handle ) == NULL )
|
||||||
{
|
{
|
||||||
|
@ -2025,8 +2096,10 @@ int main ( int argc, char *argv[] )
|
||||||
// Parse command line for settings.
|
// Parse command line for settings.
|
||||||
parse_cmd_options ( argc, argv );
|
parse_cmd_options ( argc, argv );
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
config_sanity_check ();
|
||||||
|
|
||||||
|
// Set up X interaction.
|
||||||
signal ( SIGCHLD, catch_exit );
|
signal ( SIGCHLD, catch_exit );
|
||||||
screen = DefaultScreenOfDisplay ( display );
|
screen = DefaultScreenOfDisplay ( display );
|
||||||
screen_id = DefaultScreen ( display );
|
screen_id = DefaultScreen ( display );
|
||||||
|
@ -2039,9 +2112,9 @@ int main ( int argc, char *argv[] )
|
||||||
// determine numlock mask so we can bind on keys with and without it
|
// determine numlock mask so we can bind on keys with and without it
|
||||||
XModifierKeymap *modmap = XGetModifierMapping ( display );
|
XModifierKeymap *modmap = XGetModifierMapping ( display );
|
||||||
|
|
||||||
for ( i = 0; i < 8; i++ )
|
for ( int i = 0; i < 8; i++ )
|
||||||
{
|
{
|
||||||
for ( j = 0; j < ( int ) modmap->max_keypermod; j++ )
|
for ( int j = 0; j < ( int ) modmap->max_keypermod; j++ )
|
||||||
{
|
{
|
||||||
if ( modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode ( display, XK_Num_Lock ) )
|
if ( modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode ( display, XK_Num_Lock ) )
|
||||||
{
|
{
|
||||||
|
@ -2056,7 +2129,7 @@ int main ( int argc, char *argv[] )
|
||||||
cache_xattr = winlist_new ();
|
cache_xattr = winlist_new ();
|
||||||
|
|
||||||
// X atom values
|
// X atom values
|
||||||
for ( i = 0; i < NETATOMS; i++ )
|
for ( int i = 0; i < NETATOMS; i++ )
|
||||||
{
|
{
|
||||||
netatoms[i] = XInternAtom ( display, netatom_names[i], False );
|
netatoms[i] = XInternAtom ( display, netatom_names[i], False );
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,11 +81,12 @@ static pid_t exec_cmd ( const char *cmd, int run_in_term )
|
||||||
* This happens in non-critical time (After launching app)
|
* This happens in non-critical time (After launching app)
|
||||||
* It is allowed to be a bit slower.
|
* It is allowed to be a bit slower.
|
||||||
*/
|
*/
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) == -1) {
|
if ( asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) == -1 )
|
||||||
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
history_set(path, cmd);
|
history_set ( path, cmd );
|
||||||
|
|
||||||
free ( path );
|
free ( path );
|
||||||
|
|
||||||
|
@ -98,11 +99,12 @@ static void delete_entry ( const char *cmd )
|
||||||
* This happens in non-critical time (After launching app)
|
* This happens in non-critical time (After launching app)
|
||||||
* It is allowed to be a bit slower.
|
* It is allowed to be a bit slower.
|
||||||
*/
|
*/
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) == -1) {
|
if ( asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) == -1 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
history_remove(path, cmd);
|
history_remove ( path, cmd );
|
||||||
|
|
||||||
free ( path );
|
free ( path );
|
||||||
}
|
}
|
||||||
|
@ -129,19 +131,20 @@ static char ** get_apps ( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) > 0) {
|
if ( asprintf ( &path, "%s/%s", cache_dir, RUN_CACHE_FILE ) > 0 )
|
||||||
retv = history_get_list(path, &index);
|
{
|
||||||
|
retv = history_get_list ( path, &index );
|
||||||
free ( path );
|
free ( path );
|
||||||
// Keep track of how many where loaded as favorite.
|
// Keep track of how many where loaded as favorite.
|
||||||
num_favorites=index;
|
num_favorites = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
path = strdup ( getenv ( "PATH" ) );
|
path = strdup ( getenv ( "PATH" ) );
|
||||||
|
|
||||||
for ( const char *dirname = strtok ( path, ":" );
|
for ( const char *dirname = strtok ( path, ":" );
|
||||||
dirname != NULL;
|
dirname != NULL;
|
||||||
dirname = strtok ( NULL, ":" ) )
|
dirname = strtok ( NULL, ":" ) )
|
||||||
{
|
{
|
||||||
DIR *dir = opendir ( dirname );
|
DIR *dir = opendir ( dirname );
|
||||||
|
|
||||||
|
|
|
@ -53,30 +53,33 @@ static inline int execshssh ( const char *host )
|
||||||
/**
|
/**
|
||||||
* I am not happy about this code, it causes 7 mallocs and frees
|
* I am not happy about this code, it causes 7 mallocs and frees
|
||||||
*/
|
*/
|
||||||
char **args = malloc(sizeof(char*)*7);
|
char **args = malloc ( sizeof ( char* ) * 7 );
|
||||||
int i=0;
|
int i = 0;
|
||||||
args[i++] = config.terminal_emulator;
|
args[i++] = config.terminal_emulator;
|
||||||
if(config.show_title) {
|
if ( config.show_title )
|
||||||
|
{
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
if( asprintf(&buffer, "ssh %s", host) > 0)
|
if ( asprintf ( &buffer, "ssh %s", host ) > 0 )
|
||||||
{
|
{
|
||||||
args[i++] = strdup("-T");
|
args[i++] = strdup ( "-T" );
|
||||||
args[i++] = buffer;
|
args[i++] = buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
args[i++] = strdup("-e");
|
args[i++] = strdup ( "-e" );
|
||||||
args[i++] = strdup("ssh");
|
args[i++] = strdup ( "ssh" );
|
||||||
args[i++] = strdup(host);
|
args[i++] = strdup ( host );
|
||||||
args[i++] = NULL;
|
args[i++] = NULL;
|
||||||
int retv = execvp ( config.terminal_emulator, (char * const *)args );
|
int retv = execvp ( config.terminal_emulator, (char * const *) args );
|
||||||
|
|
||||||
// Free the args list.
|
// Free the args list.
|
||||||
for(i =0; i < 7;i++) {
|
for ( i = 0; i < 7; i++ )
|
||||||
if(args[i] != NULL) {
|
{
|
||||||
free(args[i]);
|
if ( args[i] != NULL )
|
||||||
|
{
|
||||||
|
free ( args[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(args);
|
free ( args );
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
// execute sub-process
|
// execute sub-process
|
||||||
|
@ -102,10 +105,10 @@ static pid_t exec_ssh ( const char *cmd )
|
||||||
* It is allowed to be a bit slower.
|
* It is allowed to be a bit slower.
|
||||||
*/
|
*/
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0)
|
if ( asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0 )
|
||||||
{
|
{
|
||||||
history_set(path, cmd);
|
history_set ( path, cmd );
|
||||||
free(path);
|
free ( path );
|
||||||
}
|
}
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
@ -116,10 +119,10 @@ static void delete_ssh ( const char *cmd )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0)
|
if ( asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0 )
|
||||||
{
|
{
|
||||||
history_remove(path, cmd);
|
history_remove ( path, cmd );
|
||||||
free(path);
|
free ( path );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static int sort_func ( const void *a, const void *b )
|
static int sort_func ( const void *a, const void *b )
|
||||||
|
@ -144,17 +147,18 @@ static char ** get_ssh ( void )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0)
|
if ( asprintf ( &path, "%s/%s", cache_dir, SSH_CACHE_FILE ) > 0 )
|
||||||
{
|
{
|
||||||
retv = history_get_list(path, &index);
|
retv = history_get_list ( path, &index );
|
||||||
free(path);
|
free ( path );
|
||||||
num_favorites = index;
|
num_favorites = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FILE *fd = NULL;
|
FILE *fd = NULL;
|
||||||
const char *hd = getenv ( "HOME" );
|
const char *hd = getenv ( "HOME" );
|
||||||
if(asprintf ( &path, "%s/%s", hd, ".ssh/config" )>= 0){
|
if ( asprintf ( &path, "%s/%s", hd, ".ssh/config" ) >= 0 )
|
||||||
|
{
|
||||||
fd = fopen ( path, "r" );
|
fd = fopen ( path, "r" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ void textbox_text ( textbox *tb, char *text )
|
||||||
textbox_extents ( tb );
|
textbox_extents ( tb );
|
||||||
}
|
}
|
||||||
|
|
||||||
void textbox_move (textbox *tb, int x, int y)
|
void textbox_move ( textbox *tb, int x, int y )
|
||||||
{
|
{
|
||||||
if ( x != tb->x || y != tb->y )
|
if ( x != tb->x || y != tb->y )
|
||||||
{
|
{
|
||||||
|
@ -148,13 +148,13 @@ void textbox_moveresize ( textbox *tb, int x, int y, int w, int h )
|
||||||
|
|
||||||
if ( tb->flags & TB_AUTOWIDTH )
|
if ( tb->flags & TB_AUTOWIDTH )
|
||||||
{
|
{
|
||||||
if(w > 1)
|
if ( w > 1 )
|
||||||
{
|
{
|
||||||
w = MIN(w, tb->extents.width+2*SIDE_MARGIN);
|
w = MIN ( w, tb->extents.width + 2 * SIDE_MARGIN );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
w = tb->extents.width+2*SIDE_MARGIN;
|
w = tb->extents.width + 2 * SIDE_MARGIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,14 +221,14 @@ void textbox_draw ( textbox *tb )
|
||||||
// clear canvas
|
// clear canvas
|
||||||
XftDrawRect ( draw, &tb->color_bg, 0, 0, tb->w, tb->h );
|
XftDrawRect ( draw, &tb->color_bg, 0, 0, tb->w, tb->h );
|
||||||
|
|
||||||
char *text = tb->text ? tb->text : "";
|
char *text = tb->text ? tb->text : "";
|
||||||
int text_len = strlen ( text );
|
int text_len = strlen ( text );
|
||||||
int length = text_len;
|
int length = text_len;
|
||||||
int line_height = tb->font->ascent + tb->font->descent;
|
int line_height = tb->font->ascent + tb->font->descent;
|
||||||
int line_width = 0;
|
int line_width = 0;
|
||||||
|
|
||||||
int cursor_x = 0;
|
int cursor_x = 0;
|
||||||
int cursor_width = MAX ( 2, line_height / 10 );
|
int cursor_width = MAX ( 2, line_height / 10 );
|
||||||
|
|
||||||
if ( tb->flags & TB_EDITABLE )
|
if ( tb->flags & TB_EDITABLE )
|
||||||
{
|
{
|
||||||
|
@ -238,13 +238,14 @@ void textbox_draw ( textbox *tb )
|
||||||
// calc cursor position
|
// calc cursor position
|
||||||
XftTextExtentsUtf8 ( display, tb->font, ( unsigned char * ) text, cursor_offset, &extents );
|
XftTextExtentsUtf8 ( display, tb->font, ( unsigned char * ) text, cursor_offset, &extents );
|
||||||
// Add a small 4px offset between cursor and last glyph.
|
// Add a small 4px offset between cursor and last glyph.
|
||||||
cursor_x = extents.width + ((extents.width > 0)?2:0);
|
cursor_x = extents.width + ( ( extents.width > 0 ) ? 2 : 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// calc full input text width
|
// calc full input text width
|
||||||
// Calculate the right size, so no characters are cut off.
|
// Calculate the right size, so no characters are cut off.
|
||||||
// TODO: Check performance of this.
|
// TODO: Check performance of this.
|
||||||
do{
|
do
|
||||||
|
{
|
||||||
XftTextExtentsUtf8 ( display, tb->font, ( unsigned char * ) text, length, &extents );
|
XftTextExtentsUtf8 ( display, tb->font, ( unsigned char * ) text, length, &extents );
|
||||||
line_width = extents.width;
|
line_width = extents.width;
|
||||||
if ( line_width <= ( tb->w - 2 * SIDE_MARGIN ) )
|
if ( line_width <= ( tb->w - 2 * SIDE_MARGIN ) )
|
||||||
|
@ -256,8 +257,7 @@ void textbox_draw ( textbox *tb )
|
||||||
{
|
{
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
} while ( line_width > 0 );
|
||||||
while ( line_width >0 );
|
|
||||||
|
|
||||||
int x = SIDE_MARGIN, y = tb->font->ascent;
|
int x = SIDE_MARGIN, y = tb->font->ascent;
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ void textbox_draw ( textbox *tb )
|
||||||
XftDrawRect ( draw, &tb->color_fg, cursor_x + SIDE_MARGIN, 2, cursor_width, line_height - 4 );
|
XftDrawRect ( draw, &tb->color_fg, cursor_x + SIDE_MARGIN, 2, cursor_width, line_height - 4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
XftDrawRect ( draw, &tb->color_bg, tb->w, 0,0, tb->h );
|
XftDrawRect ( draw, &tb->color_bg, tb->w, 0, 0, tb->h );
|
||||||
// flip canvas to window
|
// flip canvas to window
|
||||||
XCopyArea ( display, canvas, tb->window, context, 0, 0, tb->w, tb->h, 0, 0 );
|
XCopyArea ( display, canvas, tb->window, context, 0, 0, tb->w, tb->h, 0, 0 );
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,9 @@
|
||||||
// This maps xresource options to config structure.
|
// This maps xresource options to config structure.
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
xrm_String = 0,
|
xrm_String = 0,
|
||||||
xrm_Number = 1,
|
xrm_Number = 1,
|
||||||
xrm_Boolean= 2
|
xrm_Boolean = 2
|
||||||
} XrmOptionType;
|
} XrmOptionType;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -58,48 +58,48 @@ typedef struct
|
||||||
* Currently supports string and number.
|
* Currently supports string and number.
|
||||||
*/
|
*/
|
||||||
static XrmOption xrmOptions[] = {
|
static XrmOption xrmOptions[] = {
|
||||||
{ xrm_Number, "opacity", { .num = &config.window_opacity }, NULL },
|
{ xrm_Number, "opacity", { .num = &config.window_opacity }, NULL },
|
||||||
|
|
||||||
{ xrm_Number, "width", { .num = &config.menu_width }, NULL },
|
{ xrm_Number, "width", { .num = &config.menu_width }, NULL },
|
||||||
|
|
||||||
{ xrm_Number, "lines", { .num = &config.menu_lines }, NULL },
|
{ xrm_Number, "lines", { .num = &config.menu_lines }, NULL },
|
||||||
{ xrm_Number, "columns", { .num = &config.menu_columns }, NULL },
|
{ xrm_Number, "columns", { .num = &config.menu_columns }, NULL },
|
||||||
|
|
||||||
{ xrm_String, "font", { .str = &config.menu_font }, NULL },
|
{ xrm_String, "font", { .str = &config.menu_font }, NULL },
|
||||||
/* Foreground color */
|
/* Foreground color */
|
||||||
{ xrm_String, "foreground", { .str = &config.menu_fg }, NULL },
|
{ xrm_String, "foreground", { .str = &config.menu_fg }, NULL },
|
||||||
{ xrm_String, "fg", { .str = &config.menu_fg }, NULL },
|
{ xrm_String, "fg", { .str = &config.menu_fg }, NULL },
|
||||||
|
|
||||||
{ xrm_String, "background", { .str = &config.menu_bg }, NULL },
|
{ xrm_String, "background", { .str = &config.menu_bg }, NULL },
|
||||||
{ xrm_String, "bg", { .str = &config.menu_bg }, NULL },
|
{ xrm_String, "bg", { .str = &config.menu_bg }, NULL },
|
||||||
|
|
||||||
{ xrm_String, "highlightfg", { .str = &config.menu_hlfg }, NULL },
|
{ xrm_String, "highlightfg", { .str = &config.menu_hlfg }, NULL },
|
||||||
{ xrm_String, "hlbg", { .str = &config.menu_hlfg }, NULL },
|
{ xrm_String, "hlbg", { .str = &config.menu_hlfg }, NULL },
|
||||||
|
|
||||||
{ xrm_String, "highlightbg", { .str = &config.menu_hlbg }, NULL },
|
{ xrm_String, "highlightbg", { .str = &config.menu_hlbg }, NULL },
|
||||||
{ xrm_String, "hlbg", { .str = &config.menu_hlbg }, NULL },
|
{ xrm_String, "hlbg", { .str = &config.menu_hlbg }, NULL },
|
||||||
|
|
||||||
{ xrm_String, "bordercolor", { .str = &config.menu_bc }, NULL },
|
{ xrm_String, "bordercolor", { .str = &config.menu_bc }, NULL },
|
||||||
{ xrm_String, "bc", { .str = &config.menu_bc }, NULL },
|
{ xrm_String, "bc", { .str = &config.menu_bc }, NULL },
|
||||||
|
|
||||||
{ xrm_Number, "borderwidth", { .num = &config.menu_bw }, NULL },
|
{ xrm_Number, "borderwidth", { .num = &config.menu_bw }, NULL },
|
||||||
{ xrm_Number, "bw", { .num = &config.menu_bw }, NULL },
|
{ xrm_Number, "bw", { .num = &config.menu_bw }, NULL },
|
||||||
|
|
||||||
{ xrm_Number, "location", { .num = &config.location }, NULL },
|
{ xrm_Number, "location", { .num = &config.location }, NULL },
|
||||||
{ xrm_Number, "loc", { .num = &config.location }, NULL },
|
{ xrm_Number, "loc", { .num = &config.location }, NULL },
|
||||||
|
|
||||||
{ xrm_Number, "padding", { .num = &config.padding }, NULL },
|
{ xrm_Number, "padding", { .num = &config.padding }, NULL },
|
||||||
{ xrm_Number, "yoffset", { .num = &config.y_offset }, NULL },
|
{ xrm_Number, "yoffset", { .num = &config.y_offset }, NULL },
|
||||||
{ xrm_Number, "xoffset", { .num = &config.x_offset }, NULL },
|
{ xrm_Number, "xoffset", { .num = &config.x_offset }, NULL },
|
||||||
{ xrm_Boolean,"fixed-num-lines", { .num = &config.fixed_num_lines }, NULL },
|
{ xrm_Boolean, "fixed-num-lines", { .num = &config.fixed_num_lines }, NULL },
|
||||||
{ xrm_Boolean,"hmode", { .num = &config.hmode }, NULL },
|
{ xrm_Boolean, "hmode", { .num = &config.hmode }, NULL },
|
||||||
|
|
||||||
|
|
||||||
{ xrm_String, "terminal", { .str = &config.terminal_emulator }, NULL },
|
{ xrm_String, "terminal", { .str = &config.terminal_emulator }, NULL },
|
||||||
/* Key bindings */
|
/* Key bindings */
|
||||||
{ xrm_String, "key", { .str = &config.window_key }, NULL },
|
{ xrm_String, "key", { .str = &config.window_key }, NULL },
|
||||||
{ xrm_String, "rkey", { .str = &config.run_key }, NULL },
|
{ xrm_String, "rkey", { .str = &config.run_key }, NULL },
|
||||||
{ xrm_String, "skey", { .str = &config.ssh_key }, NULL },
|
{ xrm_String, "skey", { .str = &config.ssh_key }, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,9 +151,12 @@ void parse_xresource_options ( Display *display )
|
||||||
}
|
}
|
||||||
else if ( xrmOptions[i].type == xrm_Boolean )
|
else if ( xrmOptions[i].type == xrm_Boolean )
|
||||||
{
|
{
|
||||||
if(xrmValue.size > 0 && strncasecmp(xrmValue.addr, "true", xrmValue.size) == 0) {
|
if ( xrmValue.size > 0 && strncasecmp ( xrmValue.addr, "true", xrmValue.size ) == 0 )
|
||||||
|
{
|
||||||
*xrmOptions[i].num = TRUE;
|
*xrmOptions[i].num = TRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
*xrmOptions[i].num = FALSE;
|
*xrmOptions[i].num = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue