aboutsummaryrefslogtreecommitdiff
path: root/text.c
AgeCommit message (Collapse)AuthorFilesLines
2017-05-03text: remove text_history_get functionMarc André Tanner1-12/+0
As currently implemented this does not properly integrate with multiple cursor support. The functionality should be provided in a layer higher up. The jumplist and changelist need to be redesigned, for now they are broken.
2017-05-03text: remove text_iterate macroMarc André Tanner1-3/+9
2017-05-03text: remove text_insert_newline functionMarc André Tanner1-4/+0
This is no longer needed because we always insert \n never \r\n.
2017-05-03text: remove count argument from text_{earlier,later}Marc André Tanner1-10/+4
2017-05-03text: rename text_sigbus to text_mmapedMarc André Tanner1-2/+3
Add casts to uintptr_t to avoid unrelated pointer comparisons.
2017-05-03text: rename text_byte_get argument nameMarc André Tanner1-2/+2
2017-04-11text: do not redefine _GNU_SOURCEMarc André Tanner1-1/+3
Fix #536
2017-04-09text: use MB_LEN_MAX instead of MB_CUR_MAXMarc André Tanner1-2/+3
2017-04-09vis: remove handling of \r\n line endingsMarc André Tanner1-31/+1
Use something like dos2unix(1) and unix2dos(1), if you need to edit such files.
2017-04-09text: drop special handling of \r\n line endingsMarc André Tanner1-39/+6
2017-04-09text: add mem{r,}chr(3) based byte search functionsMarc André Tanner1-0/+29
These are generally implemented efficiently in libc. While memrchr(3) is non-standard, it is a common extension. If it is not available, we use a simple C implementation from musl.
2017-04-08text: adjust iterator position when switching to adjacent piecesMarc André Tanner1-2/+4
2017-04-08text: introduce text_char_get which converts \r\n to \nMarc André Tanner1-0/+5
2017-04-08text: fix iterator semantics regarding windows style newlinesMarc André Tanner1-2/+4
At some point we might drop this mess and ask users to rely upon dos2unix(1) and unix2dos(1), respectively.
2017-03-31text: Add missing va_end() whenRaúl Peñacoba1-1/+3
vsnprintf fails
2017-03-22text: use proper open(2) flags when saving inplaceMarc André Tanner1-1/+1
This was wrongly changed in commit 74085e92c095d0bf4b98e262cc07ccf9b7dfff3b.
2017-02-27Honor user's umask when saving filesMichael Forney1-2/+2
If the user wants new files to be created as 600, they will have set their umask to 077 in their environment. vis shouldn't restrict this further than the user has configured.
2017-02-27Remove unnecessary umask change in text_save_begin_inplaceMichael Forney1-2/+0
POSIX says that The mkstemp() function shall use the resulting pathname to create the file, and obtain a file descriptor for it, as if by a call to: open(pathname, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR) So this umask change didn't do anything in practice, unless the original umask was more restrictive than 0177.
2017-02-27Fix a couple typosMichael Forney1-1/+1
2017-02-25text: add iterator accessor function which translates \r\n to \nMarc André Tanner1-0/+11
2017-02-23vis: improve handling of \r\n line endingsMarc André Tanner1-6/+21
Change the text_iterator_char_{prev,next} functions to treat them as a single character, meaning cursor motions will skip both bytes at the same time.
2017-02-20text: fix some integer overflow issuesMarc André Tanner1-3/+6
2017-02-09text: fix use of uninitialized variable in error pathMarc André Tanner1-2/+2
2017-02-08text: clean up iterator semanticsMarc André Tanner1-44/+61
We now guarantee the existence of at least one non-sentinel piece at all time and allow iterators to recover from these delimiting pieces.
2017-02-08text: remove special case for marks at start of fileMarc André Tanner1-4/+0
Unlike EOF address 0 needs no special treatment.
2017-01-20text: fix EOF handling for text_iterator_byte_nextMarc André Tanner1-1/+1
Handle zero length pieces gracefully. At some point we should write a comprehensive set of unit tests for the iterator API.
2016-12-23text: make text_vprintf static, it is only used within text.cMarc André Tanner1-13/+13
2016-12-22text: introduce EMARK to denote an invalid markMarc André Tanner1-2/+2
Technically this macro name is in the reserved namespace of errno.h. The same is true for EPOS. Maybe we should rename them at some point, but for now the short names are convenient. Fix #443 Close #444
2016-12-22text: change datatype of Mark to uintptr_tMarc André Tanner1-4/+6
This should avoid undefined pointer comparisons.
2016-12-22text: make default block size overridable via C pre-processorMarc André Tanner1-0/+2
This will be used for unit test purposes to force more allocations.
2016-12-22text: avoid undefined multiple accesses in expressionMarc André Tanner1-1/+2
Work around for a (bogus?) tis-interpreter warning.
2016-12-22text: do not rely on indeterminate value in a comparisonMarc André Tanner1-1/+1
2016-12-14text: expose text save method to calling codeMarc André Tanner1-9/+5
There are cases where it is useful to specify how the file should be saved.
2016-11-10vis-lua: change misnamed attribute values of `file.newlines`Marc André Tanner1-5/+5
Also rename underlying C code.
2016-11-01text: change usage of sizeof idiom for allocation of new objectsMarc André Tanner1-6/+6
The new code is preferable because it works independently of the variable type. Whereas before a change in type, but not within the sizeof expression would cause a wrongly sized allocation.
2016-11-01text: rename Buffer to Block to avoid confusion with buffer.[ch]Marc André Tanner1-123/+123
2016-09-25text: improve variable namingMarc André Tanner1-116/+116
s/Action/Revision/g
2016-05-07text: fix bug in line break caching logicMarc André Tanner1-1/+2
2016-04-18text: when saving also fsync(2) the destination directory after rename(2)Marc André Tanner1-1/+17
2016-04-17text: add infrastructure to save non-contiguous rangesMarc André Tanner1-113/+184
2016-03-23Remove identically replicated copyright comments from source filesMarc André Tanner1-15/+0
2016-03-15text: improve ENOSPC handling when savingMarc André Tanner1-0/+3
The default atomic save method using rename(2) would correctly fail, but the calling code would wrongly assume it was because of dealing with a special (e.g. hard or symlink) file or that some other properties (e.g. POSIX ACL, SELinux labels, permissions etc) could not be restored. It would then go on to ftruncate(2) the file, if the following writes then fail (which is likely if the new file content is bigger or some other process has used up disk space in the mean time) we lose data. This should fix it for the common case i.e. regular file where the rename(2) based method is used. The problem persits when directly overwriting a file. It is unclear whether this could be improved/fixed by: 1) first appending the new file content to the old one 2) fsync the data (old||new) 3) deleteing the original file content by overwritting it with the previously appended new file content. That is essentially moving the new file content from the end of the file to the start. 4) ftruncate to the new file size 5) fsync the data (new) if during 1) or 2) an error would occur we could revert the operation by doing a ftruncate to the original file size. An error in steps 3-5 would still be fatal. Another option would be to first write a backup file somewhere.
2016-02-21Cleanup new line insertion codeMarc André Tanner1-9/+12
2016-01-10text: introduce text_bytes_alloc0 utility functionMarc André Tanner1-0/+12
Heap allocates a zero terminated string of the given range. Freeing is the caller's responsibility. Checks for unsigned integer overflow i.e. passing SIZE_MAX as len will always fail because there is no room for the terminating NUL byte. This is important as EPOS is defined to be SIZE_MAX.
2015-12-31text: let text_pos_by_lineno return EPOS if given a too large line numberMarc André Tanner1-1/+1
2015-12-31text: introduce text_newline_insertMarc André Tanner1-0/+11
2015-12-29Clean up build systemMarc André Tanner1-6/+6
2015-11-23text: introduce functions to iterate over graphemesMarc André Tanner1-2/+55
They currently consider any character for which wcwidth(3) return 0 as a combining character.
2015-11-20text: get modification time after replacing file content in placeMarc André Tanner1-0/+2
At the start of text_save_range we stat(2) the file to check whether we have currently mmap(2)-ed it. Then we proceed to write the new file content which changes modification time. Hence we have to stat(2) again to retrieve it. This should fix spurious warnings about file changes outside the editor when editing e.g. symlinked files.
2015-11-08Update year numbers in Copyright clauseMarc André Tanner1-1/+1