summaryrefslogtreecommitdiff
path: root/lib/menu.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2015-01-17 18:53:29 +0200
committerJari Vetoniemi <mailroxas@gmail.com>2015-01-17 18:53:29 +0200
commit074b2d1b5894f12fae78a569ea507612616663ff (patch)
tree505af8b2e0a82993d2d070afcf42fe303dbf1302 /lib/menu.c
parentb32b8db5236f86007cd37aecbcc64060b2038fc2 (diff)
downloadbemenu-074b2d1b5894f12fae78a569ea507612616663ff.tar.gz
bemenu-074b2d1b5894f12fae78a569ea507612616663ff.tar.bz2
bemenu-074b2d1b5894f12fae78a569ea507612616663ff.zip
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.
Diffstat (limited to 'lib/menu.c')
-rw-r--r--lib/menu.c18
1 files changed, 14 insertions, 4 deletions
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;