mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
Add ranges for urgent active in dmenu mode.
This commit is contained in:
parent
808eee4b85
commit
d6ced176d4
5 changed files with 94 additions and 14 deletions
|
@ -3,8 +3,11 @@
|
|||
- Number mode for dmenu. allows user to get index back instead of content.
|
||||
- Combi mode. Combine multiple views into one.
|
||||
- Highlight current window.
|
||||
- Highlight urgent and active row in window view.
|
||||
- DMenu allow rows to be highlighted.
|
||||
Bug fixes:
|
||||
- On a single item in list disable auto-select.
|
||||
- Fix cursor position (#140)
|
||||
Improvements:
|
||||
- Add Ctrl(Shift)Tab to switch modi's.
|
||||
- Auto size number of columns based on available columns.
|
||||
|
|
|
@ -400,10 +400,18 @@ daemon listening to specific key-combinations.
|
|||
`-a` *X*
|
||||
|
||||
Active row, mark row X as active. (starting at 0)
|
||||
You can specify single element: -a 3
|
||||
A range: -a 3-8
|
||||
or a set of rows: -a 0,2
|
||||
Or any combination: -a 0,2-3,9
|
||||
|
||||
`-u` *X*
|
||||
|
||||
Urgent row, mark row X as urgent. (starting at 0)
|
||||
You can specify single element: -u 3
|
||||
A range: -u 3-8
|
||||
or a set of rows: -u 0,2
|
||||
Or any combination: -u 0,2-3,9
|
||||
|
||||
### Message dialog
|
||||
|
||||
|
|
|
@ -503,6 +503,10 @@ Number mode, return the index of the selected row. (starting at 0)
|
|||
.RS
|
||||
.nf
|
||||
Active row, mark row X as active. (starting at 0)
|
||||
You can specify single element: \-a 3
|
||||
A range: \-a 3\-8
|
||||
or a set of rows: \-a 0,2
|
||||
Or any combination: \-a 0,2\-3,9
|
||||
.fi
|
||||
.RE
|
||||
.PP
|
||||
|
@ -511,6 +515,10 @@ Active row, mark row X as active. (starting at 0)
|
|||
.RS
|
||||
.nf
|
||||
Urgent row, mark row X as urgent. (starting at 0)
|
||||
You can specify single element: \-u 3
|
||||
A range: \-u 3\-8
|
||||
or a set of rows: \-u 0,2
|
||||
Or any combination: \-u 0,2\-3,9
|
||||
.fi
|
||||
.RE
|
||||
.SS Message dialog
|
||||
|
|
|
@ -64,18 +64,65 @@ static char **get_dmenu ( int *length )
|
|||
return retv;
|
||||
}
|
||||
|
||||
struct range_pair
|
||||
{
|
||||
unsigned int start;
|
||||
unsigned int stop;
|
||||
};
|
||||
|
||||
static unsigned int row_urgent = 0xFFFFFFFF;
|
||||
static unsigned int row_active = 0xFFFFFFFF;
|
||||
struct range_pair * urgent_list = NULL;
|
||||
unsigned int num_urgent_list = 0;
|
||||
struct range_pair * active_list = NULL;
|
||||
unsigned int num_active_list = 0;
|
||||
|
||||
static void parse_pair ( char *input, struct range_pair *item )
|
||||
{
|
||||
int index = 0;
|
||||
for ( char *token = strsep ( &input, "-" );
|
||||
token != NULL;
|
||||
token = strsep ( &input, "-" ) ) {
|
||||
if ( index == 0 ) {
|
||||
item->start = item->stop = (unsigned int) strtoul ( token, NULL, 10 );
|
||||
index++;
|
||||
}
|
||||
else {
|
||||
if ( token[0] == '\0' ) {
|
||||
item->stop = 0xFFFFFFFF;
|
||||
}
|
||||
else{
|
||||
item->stop = (unsigned int) strtoul ( token, NULL, 10 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void parse_ranges ( char *input, struct range_pair **list, unsigned int *length )
|
||||
{
|
||||
char *endp;
|
||||
for ( char *token = strtok_r ( input, ",", &endp );
|
||||
token != NULL;
|
||||
token = strtok_r ( NULL, ",", &endp ) ) {
|
||||
// Make space.
|
||||
*list = g_realloc ( ( *list ), ( ( *length ) + 1 ) * sizeof ( struct range_pair ) );
|
||||
// Parse a single pair.
|
||||
parse_pair ( token, &( ( *list )[*length] ) );
|
||||
|
||||
( *length )++;
|
||||
}
|
||||
}
|
||||
|
||||
static const char *get_display_data ( unsigned int index, void *data, G_GNUC_UNUSED int *state )
|
||||
{
|
||||
char **retv = (char * *) data;
|
||||
if ( index == row_urgent ) {
|
||||
*state |= URGENT;
|
||||
for ( unsigned int i = 0; i < num_active_list; i++ ) {
|
||||
if ( index >= active_list[i].start && index <= active_list[i].stop ) {
|
||||
*state |= ACTIVE;
|
||||
}
|
||||
}
|
||||
if ( index == row_active ) {
|
||||
*state |= ACTIVE;
|
||||
for ( unsigned int i = 0; i < num_urgent_list; i++ ) {
|
||||
if ( index >= urgent_list[i].start && index <= urgent_list[i].stop ) {
|
||||
*state |= URGENT;
|
||||
}
|
||||
}
|
||||
return retv[index];
|
||||
}
|
||||
|
@ -97,8 +144,18 @@ int dmenu_switcher_dialog ( char **input )
|
|||
// Check prompt
|
||||
find_arg_str ( "-p", &dmenu_prompt );
|
||||
find_arg_int ( "-l", &selected_line );
|
||||
find_arg_uint ( "-u", &row_urgent );
|
||||
find_arg_uint ( "-a", &row_active );
|
||||
// Urgent.
|
||||
char *str = NULL;
|
||||
find_arg_str ( "-u", &str );
|
||||
if ( str != NULL ) {
|
||||
parse_ranges ( str, &urgent_list, &num_urgent_list );
|
||||
}
|
||||
// Active
|
||||
str = NULL;
|
||||
find_arg_str ( "-a", &str );
|
||||
if ( str != NULL ) {
|
||||
parse_ranges ( str, &active_list, &num_active_list );
|
||||
}
|
||||
|
||||
do {
|
||||
int mretv = menu ( list, length, input, dmenu_prompt,
|
||||
|
@ -138,6 +195,8 @@ int dmenu_switcher_dialog ( char **input )
|
|||
} while ( restart );
|
||||
|
||||
g_strfreev ( list );
|
||||
g_free ( urgent_list );
|
||||
g_free ( active_list );
|
||||
|
||||
return retv;
|
||||
}
|
||||
|
|
|
@ -147,18 +147,20 @@ void textbox_font ( textbox *tb, TextBoxFontType tbft )
|
|||
}
|
||||
if ( ( tbft & FMOD_MASK ) ) {
|
||||
if ( ( tbft & ACTIVE ) ) {
|
||||
if(tbft&HIGHLIGHT) {
|
||||
if ( tbft & HIGHLIGHT ) {
|
||||
tb->color_fg = color_hlfg;
|
||||
tb->color_bg = color_fg_active;
|
||||
}else {
|
||||
}
|
||||
else {
|
||||
tb->color_fg = color_fg_active;
|
||||
}
|
||||
}
|
||||
else if ( ( tbft & URGENT ) ) {
|
||||
if(tbft&HIGHLIGHT) {
|
||||
if ( tbft & HIGHLIGHT ) {
|
||||
tb->color_fg = color_hlfg;
|
||||
tb->color_bg = color_fg_urgent;
|
||||
}else {
|
||||
}
|
||||
else {
|
||||
tb->color_fg = color_fg_urgent;
|
||||
}
|
||||
}
|
||||
|
@ -318,8 +320,8 @@ void textbox_draw ( textbox *tb )
|
|||
// draw the cursor
|
||||
if ( tb->flags & TB_EDITABLE ) {
|
||||
XftDrawRect ( draw, &tb->color_fg,
|
||||
x / PANGO_SCALE + cursor_x, y/PANGO_SCALE, // Align with font
|
||||
cursor_width, font_height );
|
||||
x / PANGO_SCALE + cursor_x, y / PANGO_SCALE, // Align with font
|
||||
cursor_width, font_height );
|
||||
}
|
||||
|
||||
// flip canvas to window
|
||||
|
|
Loading…
Reference in a new issue