| Commit message (Collapse) | Author | Age |
| ... | |
| |
|
|
|
| |
Fix #3100.
On virtual consoles (Alt-F1, etc.), the Ctrl-Z combination was lost.
|
| | |
|
| |\
| |
| | |
Rename main loop variable from loop to main_loop
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Current name is inappropriate for the following reasons:
1. It is often masked by local `loop` variables.
2. It cannot be searched for. There are many `loop` variables where `loop` is
some local variable. There are many cases when “loop” word is used in
a comment.
3. It is in any case bad idea to use a generic name as a name of the global
variable. Best if global has module prefix: this is why it is in `main.h`:
`main_loop` both stands for “a main loop” and “a loop defined in `main.*`”.
Since I have no idea how to list every occurrence of this variable method used
to rename it is “remove it from globals.h, try to compile, fix errors”. Thus if
some occurrence was hidden under false `#if` branch it was not replaced.
|
| |/ |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
TODO: Only works at startup (i.e., in the user's init.vim/vimrc/--cmd),
but it should probably work at any time.
---
patch 7.4.1799
Problem: 'guicolors' is a confusing option name.
Solution: Use 'termguicolors' instead. (Hirohito Higashi)
https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162
patch 7.4.1806
Problem: 'termguicolors' option missing from the options window.
Solution: Add the entry.
https://github.com/vim/vim/commit/8e3d1b6326c103cc92f8d07b1161ee5172acf201
patch 7.4.1808
Problem: Using wrong feature name to check for 'termguicolors'.
Solution: Use the right feature name. (Ken Takata)
https://github.com/vim/vim/commit/8a24b794b89916c8074892e7b25121a21f1fa9c9
patch 7.4.1809
Problem: Using wrong short option name for 'termguicolors'.
Solution: Use the option name.
https://github.com/vim/vim/commit/868cfc19bb079a16ca58884b551486566f35419b
|
| |
|
|
| |
Originally there were 128 new errors, so I thought this is a good idea to fix
all of them. Of course, this commit also fixes many suppressed errors.
|
| |
|
|
|
|
|
|
|
|
|
| |
Wrapping it will send it to the terminal "directly", which might change the
cursor of another pane, e.g. when starting Neovim and changing to
another pane directly.
tmux has a terminfo extension (Ss/Se) to handle and translate the
DECSCUSR sequences internally. This can be controlled through
`terminal-overrides`, but does not appear to be able to handle the
uncommon sequences for Konsole.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two new keys have been added to key_name_entry in keymap.c:
`FocusGained` and `FocusLost`.
Two cases have been added to the key handing switch in edit.c each
applying their respective autocmds.
In normal.c two functions have been added alongside nv_cursorhold doing
a similar job of applying the autocmd for the appropriate key.
tui/input.c has a new function `handle_focus_event` which eats either of
the control sequences for focus gained or lost. This function is checked
before handle_bracketed_paste and handle_forced_escape.
tui.c registers neovim as able to receive these control sequences in
terminfo_start and undoes that in terminfo_stop.
Closes #2302
|
| |
|
|
| |
Fixed by waiting until the UI thread finishes processing events. Close #3541.
|
| |
|
|
| |
Ref: https://github.com/neovim/neovim/issues/3547#issuecomment-152156639
|
| |
|
|
|
| |
The abort came from using libuv tty handle on non-tty fd. Use uv_pipe_t in these
cases. Also add simple test for this case.
|
| |
|
|
|
|
| |
This is required to have <esc> working correctly when the
`ttimeout`/`ttimeoutlen` options are set. Ref:
https://github.com/neovim/neovim/issues/2093#issuecomment-146506480
|
| |
|
|
| |
Closes #3399
|
| |
|
|
|
| |
Take the return value of input_enqueue into consideration, waiting for the main
thread to consume input. Close #1714 #3377.
|
| |
|
|
|
|
|
| |
Add a new special key that can be used by UIs to toggle the 'paste' option and
use it in the TUI instead of the user's 'pastetoggle' value.
Close #2843 #2092
|
| | |
|
| | |
|
| |
|
|
|
| |
The ugrid module implements a unicode "drawing" grid and is used to store TUI
screen state. Later this module will be reused in other layers.
|
| | |
|
| |
|
|
|
|
|
|
| |
- Explicitly set the SignalWatcher event queue. Without this, the watcher will
publish events to the fast queue, resulting in resize bugs for certain
terminals(#2322).
- Set `async = false` to the `remote_ui_attach` handler(It was a deferred
before, this is the new equivalent)
|
| |
|
|
|
| |
This adds a redraw notification "update_menu" which is sent whenever
Vim's menus are changed by the :menu command and friends.
|
| |
|
|
| |
Fixes minor regression from #3145.
|
| |
|
|
| |
This is necessary to keep events in the same order received from the OS.
|
| |
|
|
|
|
|
|
|
|
| |
- Improve the implementation of deferred/immediate events.
- Use the new queue module to change how/when events are queued/processed by
giving a private queue to each emitter.
- Immediate events(which only exist to break uv_run recursion) are now
represented in the `loop->fast_events` queue.
- Events pushed to child queues are propagated to the event loop main queue and
processed as K_EVENT keys.
|
| | |
|
| |
|
|
|
| |
Default to DECSCUSR, except for known cases where other codes are used
or changing cursor shape is unsupported
|
| |
|
|
|
|
|
| |
This is a port of my original contribution to Vim, added in 7.4.687
(https://github.com/vim/vim/commit/v7-4-687). The TUI code has been
heavily refactored (see esp. 25ceadab37edba13f5afa78d8b4723da03ef35f0),
so this required some translation, but the logic is the same.
|
| |
|
|
|
|
|
| |
Currently, there are two functions in the UI API that are called when
the mode changes: insert_mode() and normal_mode(). These can be folded
into a single mode_change() entrypoint which can do whatever it wants
based on the mode it is passed, limited to INSERT and NORMAL for now.
|
| |
|
|
| |
also, include some checks.
|
| |
|
|
|
| |
`nvim --cmd "set co=... lines="` didn't work as expected, and forced to
set those options on VimEnter or afterwards.
|
| |
|
|
|
|
|
|
| |
Neither setting the 'columns' and 'lines' options nor using the
`:winsize` command resized the terminal window, which caused display
glitches.
Re: #2863
|
| |
|
|
|
|
|
|
|
| |
There are more terminals which have bracketed paste support and it
doesnt seem to do any harm with terminals that dont support it eg screen
Reviewed-by: Marco Hinz <mh.codebro@gmail.com>
Reviewed-by: Michael Reed <Pyrohh@users.noreply.github.com>
"+1 Let's see what happens" Justin M. Keyes <justinkz@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Simplify RStream/WStream API and make it more consistent with libuv.
- Move into the event loop layer(event subdirectory)
- Remove uv_helpers module.
- Simplify job/process internal modules/API.
- Unify RStream and WStream into a single structure. This is necessary because
libuv streams can be readable and writable at the same time(and because the
uv_helpers.c hack to associate multiple streams with libuv handle was removed)
- Make struct definition public, allowing more flexible/simple memory
management by users of the module.
- Adapt channel/job modules to cope with the changes.
|
| |
|
|
|
|
|
|
|
|
| |
- Add event loop abstraction module under src/nvim/event. The
src/nvim/event/loop module replaces src/nvim/os/event
- Remove direct dependency on libuv signal/timer API and use the new abstraction
instead.
- Replace all references to uv_default_loop() by &loop.uv, a new global variable
that wraps libuv main event loop but allows the event loop functions to be
reused in other contexts.
|
| |
|
|
|
|
|
|
|
|
|
| |
If at least two escape sequences were read, the beginning of the
second sequence would be off by one and the sequence would be
misinterpreted.
An escape sequence could be split in two parts and be
misinterpreted, when saved in a ring buffer with wrap around.
Fixes #2936
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Extract the RBuffer class from rstream.c and reimplement it as a ring buffer,
a more efficient version that doesn't need to relocate memory.
The old rbuffer_read/rbuffer_write interfaces are kept for simple
reading/writing, and the RBUFFER_UNTIL_{FULL,EMPTY} macros are introduced to
hide wrapping logic when more control is required(such as passing the buffer
pointer to a library function that writes directly to the pointer)
Also add a basic infrastructure for writing helper C files that are only
compiled in the unit test library, and use this to write unit tests for RBuffer
which contains some macros that can't be accessed directly by luajit.
Helped-by: oni-link <knil.ino@gmail.com>
Reviewed-by: oni-link <knil.ino@gmail.com>
Reviewed-by: Scott Prager <splinterofchaos@gmail.com>
Reviewed-by: Justin M. Keyes <justinkz@gmail.com>
Reviewed-by: Michael Reed <m.reed@mykolab.com>
|
| | |
|
| |
|
|
|
|
| |
Making an environment variable empty can be a way of unsetting it for
platforms that don't support unsetenv(). In most cases, we treat empty
variables as having been unset. For all others, use os_env_exists().
|
| |
|
|
| |
Closes #2745
|
| |
|
|
|
|
|
| |
When maximizing the window, often only lines would be detected properly
with the `try_resize` handler being called immediately.
Fixes https://github.com/neovim/neovim/issues/2322.
|
| |
|
|
|
|
| |
We already use wrappers for allocation, the new `xfree` function is the
equivalent for deallocation and provides a way to fully replace the malloc
implementation used by Neovim.
|
| |
|
|
|
|
| |
Reset mouse support to whatever was used before the process was suspended.
References #2335.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of selecting stderr on startup if stdin is not a tty, first try reading
from it and only switch to stderr when reading fails. With this behavior we
support commands like:
```
echo q | nvim -es
```
and
```
ls *.md | xargs nvim
```
Fixed small bugs in rstream.c to make this happen.
|
| |
|
|
|
|
|
|
|
| |
This is enabled by setting the `$NVIM_TUI_ENABLE_TRUE_COLOR` environment
variable, eg:
```
$ NVIM_TUI_ENABLE_TRUE_COLOR=1 nvim
```
|
| |
|
|
|
|
|
|
|
|
|
| |
Even though assuming nvim is busy most times is simpler, it has a problem: A lot
of unnecessary busy_start/busy_stop notifications are sent to the UI. That's
because in the majority of scenarios almost no time is spent between
`event_poll` calls.
This restores the normal behavior which is to call busy_start only when nvim is
going to perform some task that can take a significant amount of time. Also
improve the usage of buffering in the TUI when changing the cursor state.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since #2158 all connected UIs are informed about the busy state of nvim.
This can be used to decide whether to hide or show the cursor (in one
place).
In the TUI, this is tui_flush(). To prevent cursor flashing, the
terminal is always redrawn with an invisible cursor. After that the
cursor is shown if necessary. In the current implementation
a cursor-hide command will always be the first command in the next
redraw, to prevent flashing. This is not necessary.
Instead we start the TUI with a hidden cursor and only need to hide the
cursor in the next redraw, if the cursor was shown in the last redraw.
Otherwise the cursor is still hidden.
So instead of sending every redraw the cursor-hide command, we only need
to send the command while not busy(a state in nvim with low frequency).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Switching cursor off is only necessary in two occasions:
- When redrawing to avoid terminal flickering
- When the editor is busy
The first can now be handled by the TUI, so most calls to ui_cursor_off can be
removed from the core.
So, before this commit it was only necessary to switch the cursor off to notify
the user that nvim was running some long operation. Now the cursor_{on,off}
functions have been replaced by busy_{stop,start} which can be handled in a
UI-specific way(turning the cursor off or showing a busy indicator, for
example).
To make things even more simpler, nvim is always busy except when waiting for
user input or other asynchronous events: It automatically switches to a non-busy
state when the event loop is about to be entered for more than 100 milliseconds.
`ui_busy_start` can be called when its not desired to change the busy state in
the event loop (As its now done by functions that perform blocking shell
invocations).
|
| | |
|