LDFLAGS = -L/opt/X11/lib -lX11 -lXft -lfontconfig
-CFLAGS = --std=gnu99 -Wall -Wextra -I. -I/opt/X11/include -I/opt/local/include/freetype2 -I/usr/include/freetype2
+CFLAGS = -Os --std=gnu99 -Wall -Wextra -I. -I/opt/X11/include -I/opt/local/include/freetype2 -I/usr/include/freetype2
OBJS = buf.o screen.o utf8.o keyboard.o mouse.o charset.o utils.o
TESTOBJS = tests/tests.o tests/buf.o tests/utf8.o
void buf_init(Buf* buf) {
buf->insert_mode = false;
buf->modified = false;
+ buf->charset = DEFAULT_CHARSET;
+ buf->crlf = DEFAULT_CRLF;
buf->bufsize = BufSize;
buf->bufstart = (Rune*)malloc(buf->bufsize * sizeof(Rune));
buf->bufend = buf->bufstart + buf->bufsize;
if (!buf->insert_mode) { return; }
buf->modified = true;
syncgap(buf, off);
- if (rune == '\n' && buf_get(buf, off-1) == '\r')
+ if (buf->crlf && rune == '\n' && buf_get(buf, off-1) == '\r')
*(buf->gapstart-1) = RUNE_CRLF;
else
*(buf->gapstart++) = rune;
}
}
/* report back the linefeed mode */
- *crlf = (crs > (lfs / 2));
+ *crlf = (crs == lfs);
return type;
}
#endif
#define DEFAULT_COLORSCHEME DARK
+#define DEFAULT_CRLF 1
+#define DEFAULT_CHARSET UTF_8
+
}
void handle_key(Rune key) {
+ /* handle the proper line endings */
+ if (key == '\r') key = '\n';
+ if (key == '\n' && Buffer.crlf) key = RUNE_CRLF;
/* ignore invalid keys */
if (key == RUNE_ERR) return;
/* handle the special keys */
/* decode it */
if (len > 0) {
len = 0;
- if (buf[0] == '\r') buf[0] = '\n';
for(int i = 0; i < 8 && !utf8decode(&rune, &len, buf[i]); i++);
}
/* translate the key code into a unicode codepoint */