* no trimming of trailing whitespace
* gap buffer does not handle UTF-8 currently
* mouse selection handling when mouse moves outside region
+* move mouse handlers back into tide.c
Up Next:
bool buf_iseol(Buf* buf, size_t off) {
Rune r = buf_getrat(buf, off);
- return (r == '\n');
+ return (r == '\r' || r == '\n');
}
size_t buf_bol(Buf* buf, size_t off) {
view->nvisible = 0;
/* load the file and jump to the address returned from the load function */
buf_init(BUF);
- if (file) buf_load(BUF, file);
+ if (file) {
+ buf_load(BUF, file);
+ /* use the EOL style of the first line to determine EOL style */
+ DosLineFeed = (buf_getrat(BUF, buf_eol(BUF, 0)) == '\r');
+ }
}
void view_reload(View* view) {
size_t off = buf_selbeg(BUF);
size_t n = (TabWidth - ((off - buf_bol(BUF, off)) % TabWidth));
for (; n > 0; n--) buf_putc(BUF, ' ');
- } else if (CopyIndent && rune == '\n') {
+ } else if (CopyIndent && rune == '\n') {
size_t off = buf_selbeg(BUF);
size_t beg = buf_bol(BUF, off-1), end = beg;
for (; end < buf_end(BUF) && (' ' == buf_getrat(BUF, end) || '\t' == buf_getrat(BUF, end)); end++);
- buf_putc(BUF, rune);
+ if (DosLineFeed)
+ buf_putc(BUF, '\r');
+ buf_putc(BUF, '\n');
for (; beg < end; beg++)
buf_putc(BUF, buf_getrat(BUF, beg));
} else {