aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/tui
Commit message (Collapse)AuthorAge
...
* docs: various #25289Justin M. Keyes2024-01-18
| | | | | | Co-authored-by: Jongwook Choi <wookayin@gmail.com> Co-authored-by: Oliver Marriott <hello@omarriott.com> Co-authored-by: Benoit de Chezelles <bew@users.noreply.github.com> Co-authored-by: Jongwook Choi <wookayin@gmail.com>
* refactor(IWYU): fix headersdundargoc2024-01-11
| | | | | | Remove `export` pramgas from defs headers as it causes IWYU to believe that the definitions from the defs headers comes from main header, which is not what we really want.
* fix(tui): use buflen to calculate remaining buffer size (#26942)James McCoy2024-01-07
| | | buf is a pointer argument, not a local char array, so sizeof(buf) is just the size of a pointer type on the platform. This is always an incorrect value, but on 32-bit platforms it actually has an impact, since sizeof(buf) is just 4 and causes the buffer to get truncated.
* refactor(tui): remove code that is no longer necessaryzeertzjq2023-12-31
|
* refactor: run IWYU on entire repodundargoc2023-12-21
| | | | Reference: https://github.com/neovim/neovim/issues/6371.
* refactor(IWYU): move decor provider types to decoration_defs.h (#26692)zeertzjq2023-12-21
|
* docs: add style rule regarding initializationdundargoc2023-12-18
| | | | | Specifically, specify that each initialization should be done on a separate line.
* refactor: move non-symbols to defs.h headersdundargoc2023-12-17
|
* fix(tui): don't use tui->params[] for 'termsync' (#26565)zeertzjq2023-12-14
| | | | | Problem: 'termsync' overwrites the first parameter of a format string when UNIBI_OUT() encounters an overflow. Solution: Don't use tui->params[] for 'termsync'.
* fix(tui): don't forget to update cursor visibility (#26523)zeertzjq2023-12-12
|
* refactor(tui): use synchronized updates around actual buf flush (#26478)Gregory Anders2023-12-09
| | | | | | | | | | | | | Rather than writing the synchronized update begin and end sequences into the TUI's internal buffer (where it is later flushed to the TTY), write these sequences directly to the TTY before and after the TUI's internal buffer is itself flushed to the TTY. This guarantees that a synchronized update is always used when we are actually sending data to the TTY. This means we do not need to keep track of the TUI's "dirty" state (any sequences which affect the TUI state will be written in the TUI's internal buffer, which is now guaranteed to only ever be written when a synchronized update is active).
* fix(tui): start flush earlier (#26463)zeertzjq2023-12-08
| | | | | Problem: TUI flush (start sync or hide cursor) only starts on a "flush" event, which is too late. Solution: Start the next flush when anything will be drawn.
* fix(tui): use uv_timer_t instead of TimeWatcher for input (#26435)zeertzjq2023-12-07
| | | | | Avoid scheduling on main loop. Fix #26425
* feat(defaults): enable 'termguicolors' by default when supported by terminalGregory Anders2023-12-06
| | | | | | | | | | | | Enable 'termguicolors' automatically when Nvim can detect that truecolor is supported by the host terminal. If $COLORTERM is set to "truecolor" or "24bit", or the terminal's terminfo entry contains capabilities for Tc, RGB, or setrgbf and setrgbb, then we assume that the terminal supports truecolor. Otherwise, the terminal is queried (using both XTGETTCAP and SGR + DECRQSS). If the terminal's response to these queries (if any) indicates that it supports truecolor, then 'termguicolors' is enabled.
* refactor: change event_create() to a macro (#26343)zeertzjq2023-12-01
| | | A varargs functions can never be inlined, so a macro is faster.
* refactor(IWYU): create {ex_getln,rbuffer,os/fileio}_defs.h (#26338)zeertzjq2023-12-01
|
* build: vendor libtermkeydundargoc2023-11-30
| | | | | This is a proof of concept/WIP to evaluate the viability of vendoring libtermkey as it's been deprecated.
* refactor: explicitly abort on OOM condition (#26330)Gregory Anders2023-11-30
| | | | assert() would not abort in release builds, meaning an OOM condition would be undetected.
* refactor(IWYU): fix includes for cmdhist.h (#26324)zeertzjq2023-11-30
|
* fix(tui): grow termkey's internal buffer for large escape sequences (#26309)Gregory Anders2023-11-30
| | | | | | Some escape sequences (in particular, OSC 52 paste responses) can be very large, even unbounded in length. These can easily overflow termkey's internal buffer. In order to process these long sequences, dynamically grow termkey's internal buffer.
* refactor(IWYU): move UI and LineFlags to ui_defs.h (#26318)zeertzjq2023-11-30
|
* build: don't define FUNC_ATTR_* as empty in headers (#26317)zeertzjq2023-11-30
| | | | | | FUNC_ATTR_* should only be used in .c files with generated headers. Defining FUNC_ATTR_* as empty in headers causes misuses of them to be silently ignored. Instead don't define them by default, and only define them as empty after a .c file has included its generated header.
* refactor: fix headers with IWYUdundargoc2023-11-28
|
* refactor: iwyu (#26269)zeertzjq2023-11-28
|
* refactor: rename types.h to types_defs.hdundargoc2023-11-27
|
* build(IWYU): fix includes for func_attr.hdundargoc2023-11-27
|
* refactor: move Arena and ArenaMem to memory_defs.h (#26240)zeertzjq2023-11-27
|
* build(IWYU): replace public-to-public mappings with pragmas (#26237)zeertzjq2023-11-27
|
* build(clint): more precise check for "defs" headers (#26236)zeertzjq2023-11-27
|
* build: rework IWYU mapping filesdundargoc2023-11-25
| | | | | Create mapping to most of the C spec and some POSIX specific functions. This is more robust than relying files shipped with IWYU.
* refactor(tui): remove unnecessary scheduling when suspending (#26190)zeertzjq2023-11-24
| | | | Nvim no longer calls loop_poll_events() when suspending, so it isn't necessary to schedule suspend_event.
* build: adjust clang-tidy warning exclusion logicdundargoc2023-11-20
| | | | | | | Enable all clang-tidy warnings by default instead of disabling them. This ensures that we don't miss useful warnings on each clang-tidy version upgrade. A drawback of this is that it will force us to either fix or adjust the warnings as soon as possible.
* refactor: enable formatting for ternariesdundargoc2023-11-20
| | | | | | This requires removing the "Inner expression should be aligned" rule from clint as it prevents essentially any formatting regarding ternary operators.
* build: bump uncrustify versiondundargoc2023-11-19
| | | | Biggest change is that uncrustify is silent during linting.
* refactor(tui): use termkey_interpret_modereportGregory Anders2023-11-17
| | | | | The sign extension issue has been fixed upstream, so we no longer need to use our own workaround.
* refactor(tui): refactor Kitty keyboard query implementationGregory Anders2023-11-17
| | | | | | | | | | | | | | | | | | | Refactor our implementation of querying for Kitty keyboard protocol support: - Remove usage of the "extkeys" term. This is not standard or really used elsewhere. Use "key encoding" instead - Replace usages of "CSIu" with "Kitty". "Kitty keyboard protocol" is vastly more common than "CSIu" now - Replace the countdown response counter with a simple boolean flag. We don't actually need a countdown counter because we request the primary device attributes along with the Kitty keyboard query, so we will always receive a "terminating event", making a countdown/timer unnecessary - Move the CSI response handling into a dedicated function - Bypass Unibilium for sending key encoding escape sequences. These sequences are not part of terminfo and do not have any parameters, so there's no reason to go through Unibilium
* fix(tui): handle cursor visibility properly (#26091)zeertzjq2023-11-17
| | | | The test is for the case without 'termsync' because libvterm doesn't support synchronized output, and it passes without this PR.
* feat(tui): support DCS responses in TermResponse event (#26061)Gregory Anders2023-11-16
|
* refactor: iwyu (#26062)zeertzjq2023-11-16
|
* fix(tui): do not toggle cursor visibility when flushing the buffer (#26055)Gregory Anders2023-11-15
| | | | | | | | | | | | | | | | | | | | | | When writing large amounts of data to the tty it is common to first hide the cursor to avoid a flickering effect. This has been done in Nvim for a long time and was implemented in the function that actually flushed the TUI buffer out to the TTY. However, when using synchronized updates with the 'termsync' option this is no longer necessary, as the terminal emulator will buffer all of the updates and display them atomically. Thus there is no need to toggle the cursor visibility when flushing the buffer when synchronized updates are used. In fact, doing so can actually reintroduce cursor flickering in certain scenarios because the visibility state is itself being synchronized by the terminal. In addition, the management of the cursor visibility should not happen when the TUI _buffer_ is flushed, but rather when the TUI itself is flushed. This is a subtle but meaningful distinction: the former literally writes bytes to the TTY while the latter flushes the TUI's grid into its buffer. There is no need to hide the cursor every time we write bytes to the TTY, only at the beginning of a full TUI "flush" event.
* feat(tui): add 'termsync' option (#25871)Gregory Anders2023-11-14
| | | | | | | The 'termsync' option enables a mode (provided the underlying terminal supports it) where all screen updates during a redraw cycle are buffered and drawn together when the redraw is complete. This eliminates tearing or flickering in cases where Nvim redraws slower than the terminal redraws the screen.
* refactor: move background color detection into LuaGregory Anders2023-11-13
|
* refactor: replace manual header guards with #pragma oncedundargoc2023-11-12
| | | | | It is less error-prone than manually defining header guards. Pretty much all compilers support it even if it's not part of the C standard.
* build: remove PVSdundargoc2023-11-12
| | | | | | | We already have an extensive suite of static analysis tools we use, which causes a fair bit of redundancy as we get duplicate warnings. PVS is also prone to give false warnings which creates a lot of work to identify and disable.
* fix(input): set termkey buffer size to read stream capacityGregory Anders2023-11-07
| | | | | | | This ensures that the read stream never overflows termkey's internal buffer. This only happens when a large amount of bytes are pushed into termkey at the same time, which is exactly what happens when we receive a large OSC 52 response.
* feat(tui): use TermResponse event for OSC responses (#25868)Gregory Anders2023-11-06
| | | | | | | | | | | | | When the terminal emulator sends an OSC sequence to Nvim (as a response to another OSC sequence that was first sent by Nvim), populate the OSC sequence in the v:termresponse variable and fire the TermResponse event. The escape sequence is also included in the "data" field of the autocommand callback when the autocommand is defined in Lua. This makes use of the already documented but unimplemented TermResponse event. This event exists in Vim but is only fired when Vim receives a primary device attributes response. Fixes: https://github.com/neovim/neovim/issues/25856
* refactor: allow not having a `default` case for enumFamiu Haque2023-10-10
| | | | | | Problem: The style guide states that all switch statements that are not conditional on an enum must have a `default` case, but does not give any explicit guideline for switch statements that are conditional on enums. As a result, a `default` case is added in many enum switch statements, even when the switch statement is exhaustive. This is not ideal because it removes the ability to have compiler errors to easily detect unchanged switch statements when a new possible value for an enum is added. Solution: Add explicit guidelines for switch statements that are conditional on an enum, clarifying that a `default` case is not necessary if the switch statement is exhaustive. Also refactor pre-existing code with unnecessary `default` cases.
* refactor: the long goodbyedundargoc2023-10-09
| | | | | | long is 32 bits on windows, while it is 64 bits on other architectures. This makes the type suboptimal for a codebase meant to be cross-platform. Replace it with more appropriate integer types.
* refactor: reorganize option header files (#25437)zeertzjq2023-09-30
| | | | | | - Move vimoption_T to option.h - option_defs.h is for option-related types - option_vars.h corresponds to Vim's option.h - option_defs.h and option_vars.h don't include each other
* build(iwyu): add a few more _defs.h mappings (#25435)zeertzjq2023-09-30
|