From 074b2d1b5894f12fae78a569ea507612616663ff Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Sat, 17 Jan 2015 18:53:29 +0200 Subject: Remove --backend and --prioritory options, change prioritory -> priorty and provide BEMENU_BACKEND env variable. Change API to reflect this change. There is no reliable way to detect when running on terminal (especially when stdin is a pipe), so we need to make curses backend explicit with BEMENU_BACKEND=curses or bm_menu_new("curses"), otherwise GUI backend will be choosed automatically. --- lib/menu.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'lib/menu.c') diff --git a/lib/menu.c b/lib/menu.c index 5ab5286..4fc00e7 100644 --- a/lib/menu.c +++ b/lib/menu.c @@ -49,7 +49,7 @@ bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item) } struct bm_menu* -bm_menu_new(const char *renderer, enum bm_prioritory prioritory) +bm_menu_new(const char *renderer) { struct bm_menu *menu; if (!(menu = calloc(1, sizeof(struct bm_menu)))) @@ -58,14 +58,24 @@ bm_menu_new(const char *renderer, enum bm_prioritory prioritory) uint32_t count; const struct bm_renderer **renderers = bm_get_renderers(&count); + const char *name = secure_getenv("BEMENU_BACKEND"); + name = (name && strlen(name) > 0 ? name : NULL); + for (uint32_t i = 0; i < count; ++i) { - if (prioritory != BM_PRIO_ANY && renderers[i]->api.prioritory != prioritory) + if (!name && !renderer && renderers[i]->api.priorty != BM_PRIO_GUI) continue; - if (renderer && strcmp(renderer, renderers[i]->name)) + if ((renderer && strcmp(renderer, renderers[i]->name)) || (name && strcmp(name, renderers[i]->name))) continue; - if (renderers[i]->api.prioritory == BM_PRIO_TERMINAL) { + if (renderers[i]->api.priorty == BM_PRIO_TERMINAL) { + /** + * Some sanity checks that we are in terminal. + * These however are not reliable, thus we don't auto-detect terminal based renderers. + * These will be only used when explicitly requested. + * + * Launching terminal based menu instance at background is not a good idea. + */ const char *term = getenv("TERM"); if (!term || !strlen(term) || getppid() == 1) continue; -- cgit v1.2.3-70-g09d2