summary refs log tree commit diff
diff options
context:
space:
mode:
authorCurtis McEnroe2019-02-25 21:48:05 -0500
committerCurtis McEnroe2019-02-25 21:48:05 -0500
commitb2f6082dffb6a5fce557882e18183c2438ea4a3d (patch)
treeddde9f271c6cd97114fd522266e2572a407c31c1
parent2a6e3f2d02951fea389db6767f5e4ed657964d80 (diff)
Add M-l to list the log
-rw-r--r--catgirl.14
-rw-r--r--chat.h1
-rw-r--r--log.c20
-rw-r--r--ui.c1
4 files changed, 21 insertions, 5 deletions
diff --git a/catgirl.1 b/catgirl.1
index b8c912a..722cfd8 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -192,7 +192,7 @@ Hide the UI
 and list the most recent URLs
 in the current window.
 Press
-.Aq Enter
+.Ic Enter
 to resume the UI.
 .
 .It Ic /window Ar name
@@ -306,6 +306,8 @@ Switch to the next window.
 Switch to the previous window.
 .It Ic M-a
 Switch to next hot or unread window.
+.It Ic M-l
+Hide the UI and list the log for the current window.
 .It Ic M-m
 Insert a blank line in the window.
 .It Ic M- Ns Ar n
diff --git a/chat.h b/chat.h
index f3a102c..d6c234c 100644
--- a/chat.h
+++ b/chat.h
@@ -190,6 +190,7 @@ void logOpen(const char *path);
 void logFmt(
 	struct Tag tag, const time_t *ts, const char *format, ...
 ) __attribute__((format(printf, 3, 4)));
+void logList(struct Tag tag);
 void logReplay(struct Tag tag);
 
 wchar_t *wcsnchr(const wchar_t *wcs, size_t len, wchar_t chr);
diff --git a/log.c b/log.c
index 579e99b..6cde704 100644
--- a/log.c
+++ b/log.c
@@ -122,7 +122,7 @@ void logFmt(struct Tag tag, const time_t *ts, const char *format, ...) {
 	if (ferror(file)) err(EX_IOERR, "%s", tag.name);
 }
 
-void logReplay(struct Tag tag) {
+static void logRead(struct Tag tag, bool replay) {
 	if (logRoot < 0) return;
 
 	time_t t = time(NULL);
@@ -136,10 +136,22 @@ void logReplay(struct Tag tag) {
 	size_t cap = 0;
 	ssize_t len;
 	while (0 < (len = getline(&line, &cap, file))) {
-		if (len < 1 + StampLen + 2 + 1) continue;
-		line[len - 1] = '\0';
-		uiFmt(tag, UICold, "\3%d%s", IRCGray, &line[1 + StampLen + 2]);
+		if (replay) {
+			if (len < 1 + StampLen + 2 + 1) continue;
+			line[len - 1] = '\0';
+			uiFmt(tag, UICold, "\3%d%s", IRCGray, &line[1 + StampLen + 2]);
+		} else {
+			printf("%s", line);
+		}
 	}
 	if (ferror(file)) err(EX_IOERR, "%s", tag.name);
 	free(line);
 }
+
+void logList(struct Tag tag) {
+	logRead(tag, false);
+}
+
+void logReplay(struct Tag tag) {
+	logRead(tag, true);
+}
diff --git a/ui.c b/ui.c
index 7654e36..67f35c0 100644
--- a/ui.c
+++ b/ui.c
@@ -471,6 +471,7 @@ static void keyMeta(wchar_t ch) {
 		break; case L'f':  edit(win->tag, EditForeWord, 0);
 		break; case L'\b': edit(win->tag, EditKillBackWord, 0);
 		break; case L'd':  edit(win->tag, EditKillForeWord, 0);
+		break; case L'l':  uiHide(); logList(win->tag);
 		break; case L'm':  uiLog(win->tag, UICold, L"");
 	}
 }