diff --git a/config/config.c b/config/config.c index bb5f4555..8bdbe45b 100644 --- a/config/config.c +++ b/config/config.c @@ -79,6 +79,7 @@ Settings config = { .fixed_num_lines = FALSE, .disable_history = FALSE, .levenshtein_sort = FALSE, - .separator = '\n' + .separator = '\n', + .element_height = 1 }; diff --git a/doc/rofi-manpage.markdown b/doc/rofi-manpage.markdown index 23a9fa8c..6e2a6b1b 100644 --- a/doc/rofi-manpage.markdown +++ b/doc/rofi-manpage.markdown @@ -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*] [ -sep *separator* ] +*mode1,mode2* ] [ -e *message*] [ -sep *separator* ] [ -eh *element height* ] ## DESCRIPTION @@ -300,6 +300,12 @@ The default key combinations are: echo "a|b|c|d|e" | rofi -sep '|' -dmenu -p "monkey:" +`-eh` *element height* + + The height of a field in lines. e.g. + + echo -e "a\n3|b\n4|c\n5" | rofi -sep '|' -eh 2 -dmenu + ### Message dialog `-e` *message* diff --git a/include/rofi.h b/include/rofi.h index de95cb8e..6bf261e1 100644 --- a/include/rofi.h +++ b/include/rofi.h @@ -130,6 +130,7 @@ typedef struct _Settings unsigned int levenshtein_sort; char separator; + int element_height; } Settings; extern Settings config; diff --git a/source/rofi.c b/source/rofi.c index 2d515f09..39161a67 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -1529,17 +1529,25 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom textbox_show ( state.prompt_tb ); - int line_height = textbox_get_height ( state.text ); + int line_height = textbox_get_height ( state.text ); + int element_height = line_height * config.element_height; // filtered list display state.boxes = g_malloc0_n ( state.max_elements, sizeof ( textbox* ) ); - for ( i = 0; i < state.max_elements; i++ ) { - int line = ( i ) % state.max_rows + ( ( config.hmode == FALSE ) ? 1 : 0 ); - int col = ( i ) / state.max_rows + ( ( config.hmode == FALSE ) ? 0 : 1 ); + int y_offset = config.padding + ( ( config.hmode == FALSE ) ? line_height : 0 ); + int x_offset = config.padding + ( ( config.hmode == FALSE ) ? 0 : ( state.element_width + LINE_MARGIN ) ); - int ex = ( config.padding ) + col * ( state.element_width + LINE_MARGIN ); - int ey = line * line_height + config.padding + ( ( config.hmode == TRUE ) ? 0 : LINE_MARGIN ); - state.boxes[i] = textbox_create ( main_window, 0, ex, ey, state.element_width, line_height, NORMAL, "" ); + for ( i = 0; i < state.max_elements; i++ ) { + int line = ( i ) % state.max_rows; + int col = ( i ) / state.max_rows; + + int ex = col * ( state.element_width + LINE_MARGIN ); + int ey = line * element_height + ( ( config.hmode == TRUE ) ? 0 : LINE_MARGIN ); + + state.boxes[i] = textbox_create ( main_window, 0, + ex + x_offset, + ey + y_offset, + state.element_width, element_height, NORMAL, "" ); textbox_show ( state.boxes[i] ); } // Arrows @@ -1562,7 +1570,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom config.padding + line_height + LINE_MARGIN ); textbox_move ( state.arrowbox_bottom, state.w - config.padding - state.arrowbox_bottom->w, - config.padding + state.max_rows * line_height + LINE_MARGIN ); + config.padding + state.max_rows * element_height + LINE_MARGIN ); } else { textbox_move ( state.arrowbox_bottom, @@ -1582,7 +1590,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom // resize window vertically to suit // Subtract the margin of the last row. - state.h = line_height * ( state.max_rows + 1 ) + ( config.padding ) * 2 + LINE_MARGIN; + state.h = line_height + element_height * state.max_rows + ( config.padding ) * 2 + LINE_MARGIN; if ( config.hmode == TRUE ) { state.h = line_height + ( config.padding ) * 2; } @@ -2247,6 +2255,9 @@ static void parse_cmd_options ( int argc, char ** argv ) find_arg_char ( argc, argv, "-sep", &( config.separator ) ); + + + find_arg_int ( argc, argv, "-eh", &( config.element_height ) ); // Dump. if ( find_arg ( argc, argv, "-dump-xresources" ) >= 0 ) { xresource_dump ();