Introduction
Introduction Statistics Contact Development Disclaimer Help
bell rings if input matches on regex in .bellmatch - lchat - A line oriented ch…
git clone git://git.suckless.org/lchat
Log
Files
Refs
README
---
commit 5152e1d331ca3dff844c7ee7aecf43874a4ccb03
parent 3476e0bbc8a9d8fbf5a5846f0a765163b5a2254d
Author: Jan Klemkow <[email protected]>
Date: Mon, 28 Dec 2015 21:04:59 +0100
bell rings if input matches on regex in .bellmatch
Diffstat:
M lchat.1 | 5 +++++
M lchat.c | 31 +++++++++++++++++++++++++++++…
2 files changed, 35 insertions(+), 1 deletion(-)
---
diff --git a/lchat.1 b/lchat.1
@@ -75,6 +75,11 @@ Uses
to search for in and out file.
Default path is the current working directory.
.El
+.Sh FILES
+.Bl -tag -width Ds
+.It .bellmatch
+contains regular expressions that controls bell ring on matching input.
+.El
.Sh SEE ALSO
.Xr tail 1 ,
.Xr ii 1
diff --git a/lchat.c b/lchat.c
@@ -51,6 +51,29 @@ exit_handler(void)
err(EXIT_FAILURE, "tcsetattr");
}
+static bool
+bell_match(const char *str, const char *regex_file)
+{
+ FILE *fh = NULL;
+ char cmd[BUFSIZ];
+
+ if (access(regex_file, R_OK) == -1)
+ return true;
+
+ snprintf(cmd, sizeof cmd, "exec grep -qf %s", regex_file);
+
+ if ((fh = popen(cmd, "w")) == NULL)
+ err(EXIT_FAILURE, "popen");
+
+ if (fputs(str, fh) == EOF)
+ err(EXIT_FAILURE, "fputs");
+
+ if (pclose(fh) == 0)
+ return true;
+
+ return false;
+}
+
static void
line_output(struct slackline *sl, char *file)
{
@@ -89,6 +112,7 @@ main(int argc, char *argv[])
int ch;
bool empty_line = false;
bool bell_flag = true;
+ char *bell_file = ".bellmatch";
size_t history_len = 5;
char *prompt = ">";
size_t prompt_len = strlen(prompt);
@@ -242,7 +266,12 @@ main(int argc, char *argv[])
err(EXIT_FAILURE, "read");
if (write(STDOUT_FILENO, buf, n) == -1)
err(EXIT_FAILURE, "write");
- if (bell_flag) /* ring the bell on external inp…
+
+ /* terminate the input buffer with NUL */
+ buf[n == BUFSIZ ? n - 1 : n] = '\0';
+
+ /* ring the bell on external input */
+ if (bell_flag && bell_match(buf, bell_file))
putchar('\a');
}
out:
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.