| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: We want to keep track of the current message column, which is
done very rudimentary for ext_messages; only checking if the
message ends in a newline to reset the column, while computing
the entire cellwidth of the message, which may contain
(multiple) newlines not necessarily at the end (since 21718c6).
This introduced a noticeable delay for large messages (e.g. :=vim).
Solution: Calculate the cellwidth of the message after the last newline.
Use it to keep track of the current message column. This might
not be a functional change currently, since it only affects
messages with (multiple) newlines not at the end of a message,
which I don't think we emit internally, and msg_col is reset for
a new kind. It does fix the performance problem.
|
|
|
|
|
| |
Problem: No "verbose" kind for nvim_echo() opts->verbose.
Solution: Pass NULL "kind" to indicate no new kind.
|
| |
|
|
|
|
|
|
|
|
|
| |
Problem: Assert hit related to message kind, which is reset after a
ext_messages UI is forcibly detached, so the assertion is
expectedly false. Assert hit related to message grid variables
after an ext_messages UI attaches while message grid is scrolled.
Solution: Don't check message kind assertion if no ext_messages UI is
attached. Flush message grid when first/last ext_messages UI
attaches/detaches.
|
|
|
|
|
|
|
|
| |
Problem: We want to deprecate `nvim_err_write(ln)()` but there is no
obvious replacement (from Lua). Meanwhile we already have
`nvim_echo()` with an `opts` argument.
Solution: Add `err` argument to `nvim_echo()` that directly maps to
`:echoerr`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
`nvim -es` (and `nvim -Es`) is the recommended way to non-interactively
run commands/vimscript. But it enables shada by default, which is
usually not wanted.
Solution:
- Disable shada by default for `nvim -es/-Es`. This can be overridden by
`-i foo` if needed.
- Do NOT change the 'loadplugins' default.
- User config + packages _should_ be enabled by default, for both `nvim
-es` and `nvim -l`. Else any Lua packages you have can't be accessed
without `-u path/to/config`, which is clumsy.
- Use-cases:
```
nvim --headless "+Lazy! sync" +qa
would become: nvim -es "+Lazy! sync"
nvim --headless +PlugInstall +qall
would become: nvim -es +PlugInstall
```
- Opt-out (`--clean` or `-u NONE`) is much easier than opt-in (`-u
path/to/config`).
- User config/packages are analogous to pip packages, which are
expected when doing `python -c ...`.
related: 7c94bcd2d77e2e54b8836ab8325460a367b79eae
related: ddd0eb6f5120a09b97867d2561ea61309038ccd2
|
|
|
|
|
|
|
|
|
|
| |
Problem: Message grid newline formatting based on `msg_col` is not
utilized with ext_messages.
Solution: Increment `msg_col` with the cell width of the chunk. Allowing
message code that uses `msg_col` to determine when to place a
newline to do so. E.g. when the message goes beyond `Columns`;
this is not necessarily where the ext_messages implementation
would want to place a newline, but it is a best guess. Message
parsing and manipulation is still possible.
|
|
|
|
|
|
|
| |
Problem: Prompts are emitted as messages events, where cmdline events
are more appropriate. The user input is also emitted as
message events in fast context, so cannot be displayed with
vim.ui_attach().
Solution: Prompt for user input through cmdline prompts.
|
|
|
| |
Result of `make iwyu` (after some "fixups").
|
|\ |
|
| |
| |
| |
| |
| | |
Pass along whether message in msg_show event is added to the internal
:messages history.
|
|/
|
|
|
|
|
|
|
|
| |
- Typo/bug in msg_outtrans_long passing string length as "hist" argument.
- Avoid truncating message in msg_outtrans_long with ext_messages (followup to
1097d239c307a10a87fa995c4cfbe5987939e177).
- Remove `_hl` from `msg_keep`, `smsg_keep` as there is no non-`_hl` variant.
- `msg_printf_hl` is removed (identical to `smsg` except it sets
`msg_scroll = true`, seemingly as a caveat to force a more prompt in
cmdline mode). Move this logic to the only the only place this was
used in ex_getln.c.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CID 516419: Integer handling issues (INTEGER_OVERFLOW)
/src/nvim/message.c: 2242 in msg_puts_display()
2236 }
2237 // Concat pieces with the same highlight
2238 size_t len = maxlen < 0 ? strlen(str) : strnlen(str, (size_t)maxlen);
2239 ga_concat_len(&msg_ext_last_chunk, str, len);
2240 msg_ext_cur_len += len;
2241 // When message ends in newline, reset variables used to format message: msg_advance().
>>> CID 516419: Integer handling issues (INTEGER_OVERFLOW)
>>> Expression "len - 1UL", which is equal to 18446744073709551615, where "len" is known to be equal to 0, underflows the type that receives it, an unsigned integer 64 bits wide.
2242 if (str[len - 1] == '\n') {
2243 msg_ext_cur_len = 0;
2244 msg_col = 0;
2245 }
2246 return;
2247 }
|
|
|
| |
Also avoid going down message callstack with empty message, and remove expected grid for some tests where it did not change, and we are just testing for expected messages.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: no error check for neg values for 'messagesopt'
(after v9.1.0908)
Solution: add additional error checks and tests (h-east)
closes: vim/vim#16187
https://github.com/vim/vim/commit/65be834c30fb43abb2e41585b41eefcd2ae06c01
Nvim's getdigits() checks for overflow, so the code change isn't needed.
Co-authored-by: h-east <h.east.727@gmail.com>
|
|
|
|
|
|
|
|
|
|
| |
Problem: Variable name for 'messagesopt' doesn't match short name
(after v9.1.0908)
Solution: Change p_meo to p_mopt. Add more details to docs.
closes: vim/vim#16182
https://github.com/vim/vim/commit/8cc43daee1f485c9abf1de3c638cce7835b9f861
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: 'messagesopt' does not check max wait time
(after v9.1.0908)
Solution: Check for max wait value
(Shougo Matsushita)
closes: vim/vim#16183
https://github.com/vim/vim/commit/d9e9f89e0ffd6e7ce5e2a7f8f1ace5471e37c210
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: not possible to configure :messages
Solution: add the 'messagesopt' option (Shougo Matsushita)
closes: vim/vim#16068
https://github.com/vim/vim/commit/51d4d84d6a7159c6ce9e04b36f8edc105ca3794b
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Co-authored-by: h_east <h.east.727@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: message history cleanup is missing some tests
Solution: Add tests, refactor common code into did_set_msghistory()
(Shougo Matsushita)
closes: vim/vim#16078
https://github.com/vim/vim/commit/9f860a14c308f7a9a27a6850d36790615717a710
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Co-authored-by: Milly <milly.ca@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: Option metadata like list of valid values for an option and
option flags are not listed in the `options.lua` file and are instead
manually defined in C, which means option metadata is split between
several places.
Solution: Put metadata such as list of valid values for an option and
option flags in `options.lua`, and autogenerate the corresponding C
variables and enums.
Supersedes #28659
Co-authored-by: glepnir <glephunter@gmail.com>
|
|
|
|
| |
Add kinds for various commands that output a list, the 'wildmode'
list, and for number prompts.
|
|
|
|
|
|
| |
Problem: Separate message emitted for each newline present in Lua
print() arguments.
Solution: Make msg_multiline() handle NUL bytes. Refactor print() to use
msg_multiline(). Refactor vim.print() to use print().
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: message history is fixed to 200
Solution: Add the 'msghistory' option, increase the default
value to 500 (Shougo Matsushita)
closes: vim/vim#16048
https://github.com/vim/vim/commit/4bd9b2b2467e696061104a029000e9824c6c609e
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Co-authored-by: Milly <milly.ca@gmail.com>
|
|
|
|
|
| |
This makes it possible to use HLF_ values directly as highlight id:s
and avoids +1 adjustments especially around messages.
|
| |
|
|
|
|
|
|
|
|
| |
Problem: Ext_messages chunks only contain the highlight attr id, which
is not very useful for vim.ui_attach() consumers.
Solotion: Add highlight group id to message chunks, which can easily be
used to highlight text in the TUI through nvim_buf_set_extmark():
hl_group = synIDattr(id, "name").
|
|
|
|
|
|
|
| |
Problem: Highlight group id is not propagated to the end of the message call
stack, where ext_messages are emitted.
Solution: Refactor message functions to pass along highlight group id
instead of attr id.
|
|
|
|
| |
Problem: Cannot allow mouse interaction for non-focusable float window.
Solution: Add a "mouse" field to float window config.
|
|
|
|
|
|
|
|
|
| |
Use the grapheme break algorithm from utf8proc to support grapheme
clusters from recent unicode versions.
Handle variant selector VS16 turning some codepoints into double-width
emoji. This means we need to use ptr2cells rather than char2cells when
possible.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
Variables are often assigned multiple places in common patterns.
Solution:
Replace these common patterns with different patterns that reduce the
number of assignments.
Use `MAX` and `MIN`:
```c
if (x < y) {
x = y;
}
// -->
x = MAX(x, y);
```
```c
if (x > y) {
x = y;
}
// -->
x = MIN(x, y);
```
Use ternary:
```c
int a;
if (cond) {
a = b;
} els {
a = c;
}
// -->
int a = cond ? b : c;
```
|
|
|
|
|
| |
revert: "refactor: use S_LEN(s) instead of s, n (#29219)"
This reverts commit c37695a5d5f2e8914fff86f3581bed70b4c85d3c.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: Compiler warning when building Nvim in Release mode:
In function ‘msg_puts_display’,
inlined from ‘disp_sb_line’ at **/src/nvim/message.c:2647:5:
**/src/nvim/message.c:2165:18: warning: ‘strnlen’ specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overread]
2165 | size_t len = strnlen(str, (size_t)maxlen);
| ^
Solution: Use strlen() when maxlen is negative.
|
|
|
|
|
|
|
|
| |
Problem: Calling :redraw from vim.ui_attach() callback results in
recursive cmdline/message events.
Solution: Avoid recursiveness where possible and replace global "call_buf"
with separate, temporary buffers for each event so that when a Lua
callback for one event fires another event, that does not result
in invalid memory access.
|
|
|
|
| |
This just copies code from msg_start() to wait_return(). Not sure if
there is a better place to put such a block.
|
|
|
|
|
|
|
|
|
| |
Problem: Dialog for file changed outside of Vim not tested.
Solution: Add a test. Move FileChangedShell test. Add 'L' flag to
feedkeys().
https://github.com/vim/vim/commit/5e66b42aae7c67a3ef67617d4bd43052ac2b73ce
Co-authored-by: Bram Moolenaar <Bram@vim.org>
|
|
|
| |
Keys before mapping (i.e. typed keys) are passed as the second argument.
|
| |
|
|
|
|
|
|
| |
After #25470 the `s` pointer is advanced before calling store_sb_text()
when a newline character is found, and store_sb_text() sets `sb_str` to
`s`, so it's not possible for `s == sb_str + 1` and `*sb_str == '\n'` to
be satisfied at the same time.
|
|
|
|
|
| |
Problem: More prompt is not shown in headless mode even if there is a
UI attached.
Solution: Don't skip more prompt when there is a UI active.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
incomplete (#27448)
Problem: Mechanism to prevent recursive screen updating is incomplete.
Solution: Add "redraw_not_allowed" and set it in build_stl_str_hl().
(issue vim/vim#10952)
https://github.com/vim/vim/commit/471c0fa3eed4f6207d1cb7636970547bfd2eee26
Co-authored-by: Bram Moolenaar <Bram@vim.org>
|
| |
|
|
|
|
|
| |
In the context a String inside an Object/Dictionary etc is consumed,
it is considered to be read-only.
|
|
|
| |
Co-authored-by: Matthieu Coudron <886074+teto@users.noreply.github.com>
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
| |
grid_put_linebuf() used grid_clear() internally to handle clearing the
left part of a rightleft line. By reimplementing that internally, we
can instead use grid_put_linebuf() as the implementation of
grid_clear(), which in the end is a net reduction of code as grid_fill()
is used for nothing else.
win_draw_end: Implement "draw_margin" on a per-row basis which closer reflects how
terminals work. Also use the magic mirror for 'rightleft'
|