summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-01-11 20:20:08 +0100
committerLouis Burda <quent.burda@gmail.com>2023-01-11 20:20:08 +0100
commit46655884de4d7c6dd7be34ba35d8142ce5a6c7cf (patch)
treea49d6d8f43e33ae332e5b632316b60b4a6fc276c
parent9f13ff2d7ab94a25764ec56d9807f39dfd3e854a (diff)
downloadtmenu-46655884de4d7c6dd7be34ba35d8142ce5a6c7cf.tar.gz
tmenu-46655884de4d7c6dd7be34ba35d8142ce5a6c7cf.zip
Add silent mode which does not echo input and hides prompt
-rw-r--r--tmenu.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/tmenu.c b/tmenu.c
index f09f64c..d3225a1 100644
--- a/tmenu.c
+++ b/tmenu.c
@@ -114,8 +114,6 @@ static const struct mode modes[] = {
static FILE *infile;
-static bool verbose;
-
static size_t *entries;
static size_t entries_cap, entries_cnt;
@@ -134,6 +132,8 @@ static int bwdctx = 1;
static int termw = 80;
static bool multiout = false;
+static bool verbose = false;
+static bool prompt = true;
char
lower(char c)
@@ -279,11 +279,16 @@ browse_prompt(void)
for (i = selected - bwdctx; i <= selected + fwdctx; i++) {
eprintf(CSI_CLEAR_LINE);
- if (i == selected) {
+
+ if (i == selected)
eprintf(CSI_STYLE_BOLD);
- eprintf("(browse): ");
- } else {
- eprintf("%*.s", 10, " ");
+
+ if (prompt) {
+ if (i == selected) {
+ eprintf("(browse): ");
+ } else {
+ eprintf("%*.s", 10, " ");
+ }
}
if (selected >= 0 && i >= 0 && i < entries_cnt) {
@@ -356,7 +361,7 @@ browse_cleanup(void)
void
search_prompt(void)
{
- char prompt[256];
+ char promptbuf[256];
ssize_t i, index;
ssize_t len, entlen;
@@ -369,7 +374,7 @@ search_prompt(void)
selected = search_match(selected, BWD, 1, 1, -1);
}
- len = snprintf(prompt, sizeof(prompt), "(search[%c:%s]) %.*s",
+ len = snprintf(promptbuf, sizeof(promptbuf), "(search[%c:%s]) %.*s",
(searchcase == CASE_SENSITIVE) ? 'I' : 'i',
searchmodes[searchmode].sh, (int) searchlen, searchbuf);
if (len < 0) err(1, "snprintf");
@@ -389,11 +394,14 @@ search_prompt(void)
eprintf(CSI_CLEAR_LINE);
- if (i == 0) {
- eprintf(CSI_STYLE_BOLD);
- eprintf("%s : ", prompt);
- } else {
- eprintf("%*.s", (int) (len + 3), " ");
+ if (i == 0) eprintf(CSI_STYLE_BOLD);
+
+ if (prompt) {
+ if (i == 0) {
+ eprintf("%s : ", promptbuf);
+ } else {
+ eprintf("%*.s", (int) (len + 3), " ");
+ }
}
if (index < 0) {
@@ -664,6 +672,7 @@ run(const char *filepath)
break;
case KEY_CTRL('J'):
case '\r':
+ if (selected < 0) break;
entry = read_entry(entry, selected);
modes[mode].cleanup();
printf("%.*s\n", (int) entry_len(selected), entry);
@@ -703,11 +712,16 @@ parseopt(const char *flag, const char **args)
case 'v':
verbose = true;
return 0;
- case 'b':
+ case 's':
+ mode = MODE_SEARCH;
+ searchmode = SEARCH_SUBSTR;
+ prompt = false;
+ return 0;
+ case 'a':
fwdctx = strtol(*args, &end, 10);
if (end && *end) goto badint;
return 1;
- case 'a':
+ case 'b':
bwdctx = strtol(*args, &end, 10);
if (end && *end) goto badint;
return 1;
@@ -735,7 +749,6 @@ main(int argc, const char **argv)
entry = NULL;
entries = NULL;
- verbose = false;
filepath = NULL;
for (i = 1; i < argc; i++) {
if (*argv[i] == '-') {