Introduction
Introduction Statistics Contact Development Disclaimer Help
add .prompt and .title file handling - lchat - A line oriented chat front end f…
git clone git://git.suckless.org/lchat
Log
Files
Refs
README
---
commit 3a2446ff8f1e0d30bf3b1ee02617e15020bc829a
parent 595d8b5e4d763305139cbd482a8c469f9e926494
Author: Jan Klemkow <[email protected]>
Date: Mon, 11 Jan 2016 21:49:31 +0100
add .prompt and .title file handling
add the possibility to set prompt and window title by file.
Diffstat:
M lchat.1 | 6 +++++-
M lchat.c | 52 +++++++++++++++++++++++++++--…
2 files changed, 51 insertions(+), 7 deletions(-)
---
diff --git a/lchat.1 b/lchat.1
@@ -49,7 +49,7 @@ as prompt for the input line.
.It Fl t Ar title
Use
.Ar title
-as title terminal window.
+as title for the terminal window.
In a
.Xr tmux 1
or
@@ -84,6 +84,10 @@ If this file exists and has executable permissions, it is us…
program for the output lines.
This program should read raw lines from stdin and outputs filtered or
transformed lines to stdout.
+.It .prompt
+contains the prompt string.
+.It .title
+contains the terminal window title.
.El
.Sh SEE ALSO
.Xr tail 1 ,
diff --git a/lchat.c b/lchat.c
@@ -51,6 +51,35 @@ exit_handler(void)
err(EXIT_FAILURE, "tcsetattr");
}
+static char *
+read_file_line(const char *file)
+{
+ FILE *fh;
+ char buf[BUFSIZ];
+ char *line = NULL;
+ char *nl = NULL;
+
+ if (access(file, R_OK) == -1)
+ return NULL;
+
+ if ((fh = fopen(file, "r")) == NULL)
+ err(EXIT_FAILURE, "fopen");
+
+ if (fgets(buf, sizeof buf, fh) == NULL)
+ err(EXIT_FAILURE, "fgets");
+
+ if (fclose(fh) == EOF)
+ err(EXIT_FAILURE, "fclose");
+
+ if ((nl = strchr(buf, '\n')) != NULL) /* delete new line */
+ *nl = '\0';
+
+ if ((line = strdup(buf)) == NULL)
+ err(EXIT_FAILURE ,"strdup");
+
+ return line;
+}
+
static bool
bell_match(const char *str, const char *regex_file)
{
@@ -114,7 +143,12 @@ main(int argc, char *argv[])
bool bell_flag = true;
char *bell_file = ".bellmatch";
size_t history_len = 5;
- char *prompt = ">";
+ char *prompt = read_file_line(".prompt");
+ char *title = read_file_line(".title");
+
+ if (prompt == NULL) /* set default prompt */
+ prompt = ">";
+
size_t prompt_len = strlen(prompt);
size_t loverhang = 0;
char *dir = ".";
@@ -149,11 +183,9 @@ main(int argc, char *argv[])
err(EXIT_FAILURE, "strdup");
prompt_len = strlen(prompt);
break;
- case 't': /* set optarg to terminal's window title */
- if (strcmp(getenv("TERM"), "screen") == 0)
- printf("\033k%s\033\\", optarg);
- else
- printf("\033]0;%s\a", optarg);
+ case 't':
+ if ((title = strdup(optarg)) == NULL)
+ err(EXIT_FAILURE, "strdup");
break;
case 'h':
default:
@@ -182,6 +214,14 @@ main(int argc, char *argv[])
if (isatty(fd) == 0)
err(EXIT_FAILURE, "isatty");
+ /* set optarg to terminal's window title */
+ if (title != NULL) {
+ if (strcmp(getenv("TERM"), "screen") == 0)
+ printf("\033k%s\033\\", title);
+ else
+ printf("\033]0;%s\a", title);
+ }
+
/* preprate terminal reset on exit */
if (tcgetattr(fd, &origin_term) == -1)
err(EXIT_FAILURE, "tcgetattr");
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.