Introduction
Introduction Statistics Contact Development Disclaimer Help
handle carriage0-return correctly - scroll - scrollbackbuffer program for st
git clone git://git.suckless.org/scroll
Log
Files
Refs
README
LICENSE
---
commit f0e76e5f8c92a00075002087396a37ee94901d34
parent 9ff6fdb25513e49abbe3750668b8ee6903326f15
Author: Jan Klemkow <[email protected]>
Date: Sat, 16 May 2020 23:09:11 +0200
handle carriage0-return correctly
Diffstat:
M scroll.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
---
diff --git a/scroll.c b/scroll.c
@@ -179,8 +179,6 @@ skipesc(char c)
switch (state) {
case CHAR:
- if (c == '\r')
- return true;
if (c == '\033')
state = BREK;
break;
@@ -493,7 +491,7 @@ main(int argc, char *argv[])
if (tcsetattr(STDIN_FILENO, TCSANOW, &new) == -1)
die("tcsetattr:");
- size_t size = BUFSIZ, pos = 0;
+ size_t size = BUFSIZ, len = 0, pos = 0;
char *buf = calloc(size, sizeof *buf);
if (buf == NULL)
die("calloc:");
@@ -536,7 +534,7 @@ main(int argc, char *argv[])
if (rules[i].event == SCROLL_UP)
scrollup(rules[i].lines);
if (rules[i].event == SCROLL_DOWN)
- scrolldown(buf, pos,
+ scrolldown(buf, len,
rules[i].lines);
goto out;
}
@@ -546,7 +544,7 @@ main(int argc, char *argv[])
die("write:");
if (bottom != TAILQ_FIRST(&head))
- jumpdown(buf, pos);
+ jumpdown(buf, len);
}
out:
if (pfd[1].revents & POLLIN) {
@@ -572,7 +570,7 @@ main(int argc, char *argv[])
continue;
if (*c == '\n') {
- addline(buf, pos);
+ addline(buf, len);
/* only advance bottom if scroll is */
/* at the end of the scroll back */
if (bottom == NULL ||
@@ -581,11 +579,16 @@ main(int argc, char *argv[])
bottom = TAILQ_FIRST(&head);
memset(buf, 0, size);
- pos = 0;
+ len = pos = 0;
buf[pos++] = '\r';
+ } else if (*c == '\r') {
+ pos = 0;
+ continue;
}
buf[pos++] = *c;
- if (pos == size) {
+ if (pos > len)
+ len = pos;
+ if (len == size) {
size *= 2;
buf = earealloc(buf, size);
}
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.