summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-10-25 20:02:34 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-10-25 20:02:34 +0300
commitd3db039136ad66d2c83c1c0fbf0964bfbb5afb16 (patch)
tree93af6d73ad168e0169183a9c4f625acd5492e08c /client
parent2820734ec01ad6d2e1a0611fa480c3dd533588c7 (diff)
downloadbemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.tar.gz
bemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.tar.bz2
bemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.zip
Single line mode, color customization, etc..
Diffstat (limited to 'client')
-rw-r--r--client/client.c81
1 files changed, 69 insertions, 12 deletions
diff --git a/client/client.c b/client/client.c
index 95c270e..52933d1 100644
--- a/client/client.c
+++ b/client/client.c
@@ -13,8 +13,11 @@ static struct {
enum bm_filter_mode filter_mode;
int32_t wrap;
uint32_t lines;
+ const char *colors[BM_COLOR_LAST];
const char *title;
const char *renderer;
+ char *font;
+ uint32_t font_size;
int32_t selected;
int32_t bottom;
int32_t grab;
@@ -24,8 +27,11 @@ static struct {
.filter_mode = BM_FILTER_MODE_DMENU,
.wrap = 0,
.lines = 0,
+ .colors = {0},
.title = "bemenu",
.renderer = NULL,
+ .font = NULL,
+ .font_size = 0,
.selected = 0,
.bottom = 0,
.grab = 0,
@@ -99,11 +105,18 @@ usage(FILE *out, const char *name)
" -b, --bottom appears at the bottom of the screen. ()\n"
" -f, --grab grabs the keyboard before reading stdin. ()\n"
" -m, --monitor index of monitor where menu will appear. ()\n"
- " --fn defines the font to be used. ()\n"
- " --nb defines the normal background color. ()\n"
- " --nf defines the normal foreground color. ()\n"
- " --sb defines the selected background color. ()\n"
- " --sf defines the selected foreground color. ()\n", out);
+ " --fn defines the font to be used. (w)\n"
+ " --bg defines the background color. (w)\n"
+ " --tb defines the title background color. (w)\n"
+ " --tf defines the title foreground color. (w)\n"
+ " --fb defines the filter background color. (w)\n"
+ " --ff defines the filter foreground color. (w)\n"
+ " --nb defines the normal background color. (w)\n"
+ " --nf defines the normal foreground color. (w)\n"
+ " --hb defines the highlighted background color. (w)\n"
+ " --hf defines the highlighted foreground color. (w)\n"
+ " --sb defines the selected background color. (w)\n"
+ " --sf defines the selected foreground color. (w)\n", out);
exit((out == stderr ? EXIT_FAILURE : EXIT_SUCCESS));
}
@@ -126,12 +139,19 @@ parse_args(int *argc, char **argv[])
{ "grab", no_argument, 0, 'f' },
{ "monitor", required_argument, 0, 'm' },
{ "fn", required_argument, 0, 0x102 },
- { "nb", required_argument, 0, 0x103 },
- { "nf", required_argument, 0, 0x104 },
- { "sb", required_argument, 0, 0x105 },
- { "sf", required_argument, 0, 0x106 },
-
- { "disco", no_argument, 0, 0x107 },
+ { "bg", required_argument, 0, 0x103 },
+ { "tb", required_argument, 0, 0x104 },
+ { "tf", required_argument, 0, 0x105 },
+ { "fb", required_argument, 0, 0x106 },
+ { "ff", required_argument, 0, 0x107 },
+ { "nb", required_argument, 0, 0x108 },
+ { "nf", required_argument, 0, 0x109 },
+ { "hb", required_argument, 0, 0x110 },
+ { "hf", required_argument, 0, 0x111 },
+ { "sb", required_argument, 0, 0x112 },
+ { "sf", required_argument, 0, 0x113 },
+
+ { "disco", no_argument, 0, 0x114 },
{ 0, 0, 0, 0 }
};
@@ -190,13 +210,44 @@ parse_args(int *argc, char **argv[])
break;
case 0x102:
+ if (sscanf(optarg, "%ms:%u", &client.font, &client.font_size) < 2)
+ sscanf(optarg, "%ms", &client.font);
+ break;
case 0x103:
+ client.colors[BM_COLOR_BG] = optarg;
+ break;
case 0x104:
+ client.colors[BM_COLOR_TITLE_BG] = optarg;
+ break;
case 0x105:
+ client.colors[BM_COLOR_TITLE_FG] = optarg;
+ break;
case 0x106:
+ client.colors[BM_COLOR_FILTER_BG] = optarg;
break;
-
case 0x107:
+ client.colors[BM_COLOR_FILTER_FG] = optarg;
+ break;
+ case 0x108:
+ client.colors[BM_COLOR_ITEM_BG] = optarg;
+ break;
+ case 0x109:
+ client.colors[BM_COLOR_ITEM_FG] = optarg;
+ break;
+ case 0x110:
+ client.colors[BM_COLOR_HIGHLIGHTED_BG] = optarg;
+ break;
+ case 0x111:
+ client.colors[BM_COLOR_HIGHLIGHTED_FG] = optarg;
+ break;
+ case 0x112:
+ client.colors[BM_COLOR_SELECTED_BG] = optarg;
+ break;
+ case 0x113:
+ client.colors[BM_COLOR_SELECTED_FG] = optarg;
+ break;
+
+ case 0x114:
disco();
break;
@@ -267,10 +318,15 @@ main(int argc, char **argv)
if (!(menu = bm_menu_new(client.renderer, client.prioritory)))
return EXIT_FAILURE;
+ bm_menu_set_font(menu, client.font, client.font_size);
bm_menu_set_title(menu, client.title);
bm_menu_set_filter_mode(menu, client.filter_mode);
+ bm_menu_set_lines(menu, client.lines);
bm_menu_set_wrap(menu, client.wrap);
+ for (uint32_t i = 0; i < BM_COLOR_LAST; ++i)
+ bm_menu_set_color(menu, i, client.colors[i]);
+
read_items_to_menu_from_stdin(menu);
bm_menu_set_highlighted_index(menu, client.selected);
@@ -295,6 +351,7 @@ main(int argc, char **argv)
printf("%s\n", bm_menu_get_filter(menu));
}
+ free(client.font);
bm_menu_free(menu);
return (status == BM_RUN_RESULT_SELECTED ? EXIT_SUCCESS : EXIT_FAILURE);
}