aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-12-31vis-single: fix implicit declaration of 'mkdtemp' and 'setenv'zdiff1-0/+1
2025-12-30lua: filetype: fix collision for lexers that target text filesJason Lenz1-10/+3
2025-12-23Add missing janet and todo.txt lexers to filetype.lua~engenforge1-0/+6
2025-12-22text: remove text-internal.hRandy Palamar3-89/+79
this is not really useful anymore
2025-12-22text: make text_snapshot return voidRandy Palamar2-3/+2
No one was checking this and there is not an error case for this function.
2025-12-22silence new gcc warningsRandy Palamar3-4/+8
2025-12-22move all standard library includes into util.hRandy Palamar45-216/+52
2025-12-16make vis a single file buildRandy Palamar11-152/+95
2025-12-16delete functions which were exposed as unusedRandy Palamar12-159/+3
2025-12-16mark all functions in headers with VIS_EXPORT or VIS_INTERNALRandy Palamar28-458/+480
if vis actually wants to be a library exported symbols may need mark up depending on the platform (eg. __declspec(dllexport)). This needs to be hidden behind a macro because the way you export is not the same on every platform. I did this based on the assumption that vis.h was supposed to be the only interface to the "vis" library. Since nobody actually uses vis as a library I have no idea if this is actually correct. Anyway marking up all prototypes like this allows for one to convert all functions to static if a single translation unit is used by inserting at the start: #define VIS_INTERNAL static #define VIS_EXPORT static
2025-12-16main: make vis instance into a globalRandy Palamar3-23/+26
This might be controversial to some but for the purposes of the editor there will never be more than one instance of vis. This allows the compiler to use more efficient rip relative addressing in the places where it knows the code is referring to the global instance. Once the code is compiling in a single translation unit with all functions declared static this will allow for much better optimization. From the perspective that vis is meant to be a library, which is what Marc clearly intended, changing vis_new() to vis_init() and vis_free() to vis_cleanup() is still better design. The library user should be allowed to place the vis instance wherever they want in memory.
2025-12-16clean up remaining struct and function name collisionsRandy Palamar5-41/+41
I think that having structs with the same name be completely different depending on which part of the program you look at is even less readable than having functions with same name.
2025-12-16main: replace key action enum, prototype, and table with single X-macro listRandy Palamar2-1276/+347
The lists were very long and if you need to change anything in them you need to do so in at least 3 different places to ensure they remain in sync. The idiomatic way of solving this problem in C (without using features outside the language) is to use a sequence of X-macros. This was motivated by the fact that many of the functions in this file have names that collide with other names in the program. When the program is compiled into separate object files this is not a problem but I want to compile vis in a single translation unit. It also adds more mental overhead when debugging if you have to keep track of which file you are in as well as which function you are in. The macro definition for the function args is less common but is a good way of ensuring that if you need to modify the type of the function pointer (i.e. change its arguments) you will not have to locate hundreds of locations throughout the code. This also makes it much easier to potentially refactor the KeyAction array of structs into separate arrays.
2025-12-16text-iterator: fix one byte over-read in codepoint iteratorRandy Palamar1-8/+8
Reported by @kyx0r here: https://github.com/kyx0r/nextvi/issues/189#issuecomment-3650406932 The crash is relatively hard to reproduce as it relies on there being no padding after the end of the memory allocation. This can only happen if the text size is an exact multiple of the system page size. In the linked backtrace it->start = 0x7ffff0e00000 and it->end = 0x7ffff7200000 (page size was likely 4K or 0x1000) so it->end, which is one past the last byte of the text, was pointing to an entirely different page. Dereferencing it can cause a segfault. If it doesn't segfault it is still incorrect to read beyond the end of the text even if it happens to work due to padding. The underlying text_iterator_byte_{next,prev}() functions were already handling this correctly. The fix is to not throw away their work.
2025-12-14Use STYLE_WHITESPACE for spaces, newlines, and tabsLaurence de Bruxelles4-5/+21
Allow theming the replacement characters shown for showspaces, showtabs, and/or shownewlines.
2025-12-09vis-lua: add file:snapshot methodRandy Palamar1-0/+12
A number of plugins, for example vis-spellcheck[0], want to perform bulk edits on the file text. They may desire for those edits to be split into multiple undo/redo points. This is achievable by switching the mode between insert and normal mode but that has other side effects. Instead introduce a method of doing this directly. [0]: https://gitlab.com/muhq/vis-spellcheck
2025-12-09show "pattern not found: foo" on search without resultChristian Hesse1-3/+8
2025-12-09introduce search_common...Christian Hesse1-7/+9
... and make search_{forward,backward} wrapper to that function.
2025-12-08map: stop setting errno on errorRandy Palamar3-32/+15
the return of these functions already give all the necessary information. this is not c standard library code, we have no need of such a nonsensical error reporting mechanism NOTE: since errno needs to be thread local accessing it from non-libc code ends up being a function call and serves as a pointless optimization barrier.
2025-12-08util: replace memrchr with internal versionRandy Palamar6-46/+19
The amount of code we need to detect if this is present and handle the fallback is more than if we just provide it ourselves. Also we are passing in a difference of pointers so the argument type should be ptrdiff_t. This avoids a C brain damage of having unsigned size type which can wrap around if the caller is careful.
2025-12-06build: update alpine in docker build to version 3.23Christian Hesse1-1/+1
Just a version bump, no changes required.
2025-12-05vis-lua: complete_command: utilize map_prefix() instead of grepRandy Palamar3-9/+9
we already have a function for filtering by a prefix. No need for snprintf and extra grep process for filtering. also use simpler buffer_append for appending instead of going through string formatting
2025-12-02doc/Makefile: add an empty clean target...Christian Hesse1-1/+4
... now that this is made with 12fc09a442939d0af09d700c7a8074cca9b1694e. This unbreaks `make docker`, which triggered the catch-all target and failed.
2025-12-02test: add gdb debugging support to lua testsMatěj Cepl1-8/+36
This commit refactors the lua test runner (`test.sh`) to support running a test inside `gdb` when the `-d` or `--debug` flag is passed.
2025-11-29cmd_write: show error message for non-existing path componentsFlorian Fischer1-1/+3
2025-11-29Clarify testing infrastructure for vis editorJorge Gomez1-2/+1
Updated README to clarify repository purpose and structure.
2025-11-28Add command completion with tab keyMax Schillinger4-4/+67
In the command prompt, press <tab> to get a list of all available commands and pick one (using vis-menu). This works also after typing the first letters of a command (p.e. `:la<tab>`). Co-authored-by: Matěj Cepl <mcepl@cepl.eu>
2025-11-28build: make clean also documentaitonMatěj Cepl1-0/+1
2025-11-28filetype: detect additional shell filesunrealapex1-1/+1
2025-11-28docs: remove $ from environment variable nameunrealapex1-1/+1
remove $ from environment variable name because environment variables are referenced by name without it
2025-11-28lua/lexers: synchronization with new release scintillua_6.6mitchell21-63/+316
Bugfixes: - Fixed Pascal numeric literals. - Fixed folding of HTML/XML comments and XML processing instructions. - Fixed incorrectly highlighting '..' range operators between numbers. Changes: - Added Janet and todo.txt lexers. - Updated Python lexer to recognize t-strings. - Migrated ini and Dart lexers. - Updated org lexer word lists.
2025-11-27ui: add missing includes for printfssewn1-0/+2
functions such as [v]snprintf and sscanf require stdio and stdarg.
2025-11-24text-util: convert trivial functions to macrosRandy Palamar2-15/+3
This would be less of an issue if vis was compiled as a single translation unit but even then compiler may not inline them if they are not marked as static.
2025-11-24text: remove a bunch of unused save functionsRandy Palamar7-68/+26
These functions were only used for testing the text system. One of them was moved to text-test.c to continue to facilitate this. Otherwise these functions are just cluttering up the code and making it hard to modify.
2025-11-24text-io: make TextSave visibleRandy Palamar4-72/+53
Having a failure case on allocing a TextSave is stupid. Ideally there would be no allocations in the file saving path but we have to replace the braindead dirname(3) with an internal implementation.
2025-11-24text-io: do not free the temporary file name before unlinking the fileFlorian Fischer1-2/+0
2025-11-12Fixed typoStefan1-1/+1
2025-08-19Fixes waycopy hanging due to unclosed stderr fdrunitclean1-2/+2
2025-06-13doc: source_suffix should be a map, not a listMatěj Cepl1-1/+1
2025-06-13lua/lexers: update to scintillua 6.5Matěj Cepl7-532/+720
This is an amalgamation of the following upstream commits: - Overhauled API documentation for lexer.lua. - Fixed Markdown to allow code fence blocks to be indented. - Use GitHub Pages' Primer theme for documentation. Build static pages with Jekyll, like GitHub Pages does. - Migrated systemd lexer. Thanks to Matěj Cepl. - Migrated Lisp lexer and highlight character escapes. Thanks to Matěj Cepl. - Migrated rpmspec lexer and made some improvements. Thanks to Matěj Cepl. - Modernized reST lexer. Thanks to Matěj Cepl. - Markdown lexer should just tag the start of a blockquote. The quote's contents may contain markdown. - Output lexer can highlight CSI color sequences. - Allow lexers to define their own fold functions. - Added custom folder for Markdown headers. - Added `lexer.line_start`, `lexer.line_end` and `lexer.text_range()`. - Fixed Markdown lexer to not lex some continuation lines as code. - Fixed SciTE not using Scintillua's markdown lexer. - Markdown lexer should not highlight secondary paragraphs in list items as code blocks. - Have SciTE recognize CMakeLists.txt.
2025-06-13doc: fix Markdown in CHANGELOG.mdMatěj Cepl1-2/+2
2025-06-13doc: fix Doxygen comments for vis-subprocess.cMatěj Cepl1-1/+5
2025-06-13doc: fix Doxygen comments for view.hMatěj Cepl1-18/+23
2025-06-13doc: fix Doxygen comments for text.hMatěj Cepl1-24/+31
2025-06-13doc: fix Doxygen comments for vis.hMatěj Cepl1-201/+634
2025-06-13doc: fix Doxygen comments for map.hMatěj Cepl1-23/+53
2025-06-13doc: change default_role to 'c:any'Matěj Cepl1-1/+1
2025-06-13use <vis-prompt-show> instead of ':'Alvaro Sanchez1-11/+11
fixes #1246 - Remapping : break other mappings like <C-w>s or <C-w>v
2025-06-02build: update alpine in docker build to version 3.22Christian Hesse1-1/+1
Just a version bump, no changes required.
2025-05-17ci: drop ubuntu-20.04, deprecatedsewn1-4/+1
Github CI ubuntu-20.04 runner image deprecated, seen in https://github.com/actions/runner-images/issues/11101