Problem: Completing the longest match doesn't work properly with multi-byte
characters.
Solution: When using multi-byte characters use another way to find the
longest match. (Hirohito Higashi)
4f8fa1633c
Problem: When 'conceallevel' is 1 and quitting the command-line window with
CTRL-C the first character ':' is erased.
Solution: Reset 'conceallevel' in the command-line window. (Hirohito
Higashi)
fa67fbe6b8
Problem: glob() and globpath() cannot include links to non-existing files.
(Charles Campbell)
Solution: Add an argument to include all links with glob(). (James McCoy)
Also for globpath().
a245bc79b4
Regarding the individual items in the header:
`Vim - Vi improved by Bram Moolenar`
Bram Moolenar is already mentioned throughout the documentation, as
well as the intro screen.
`:help uganda`
It's already shown to all users who don't use `shortmess+=I` upon
starting nvim, and is already placed prominently in help.txt, i.e.,
`:help` run with no arguments.
`:help credits`
Already mentioned near the top of help.txt.
`README.md`
Already mentioned in develop.txt.
This change adds switch cases for K_FOCUSGAINED and K_FOCUSLOST to the
input handling functions in ex_getln.c and terminal.c. The handling is
identical to what's found in edit.c (just calling apply_autocmds).
If one enters cmdline-mode by feeding `:` and sends a focuslost event (by
leaving the window for example) the text `<FocusLost>` will be inserted
into the command line. There is similar behaviour in terminal mode. This
patch corrects this behavior to fire the apropriate autocmd instead.
Fixes#3714
Begin refactoring getcmdline() into a state that can be managed by the
`state_enter()`:
- Move local variables into a local CommandLineState structure
- Fix code style in the entire function.
The new function contains logic that must be executed after handling input in
normal mode and also before the first main loop iteration. Also rename
`main_loop` to `normal_enter` and move it to normal.c
What works:
1. ShaDa file dumping: header, registers, jump list, history, search patterns,
substitute strings, variables.
2. ShaDa file reading: registers, global marks, variables.
Most was not tested.
TODO:
1. Merging.
2. Reading history, local marks, jump and buffer lists.
3. Documentation update.
4. Converting some data from &encoding.
5. Safer variant of dumping viminfo (dump to temporary file then rename).
6. Removing old viminfo code (currently masked with `#if 0` in a ShaDa file for
reference).
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
A file that matches with one of the patterns in 'wildignore' is ignored
when using expand_wildcards(). After removing ignored files, the array
of (file name) matches can be empty. But an empty array is never freed.
- 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.
- 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.
Problem: Using a range for window and buffer commands has a few
problems.
Cannot specify the type of range for a user command.
Solution: Add the -addr argument for user commands. Fix problems.
(Marcin Szamotulski
https://code.google.com/p/vim/source/detail?name=v7-4-542
Problem : Dead increment @ 1795.
Diagnostic : Harmless issue.
Rationale : Line was necessary before (indent was used by the following
while loop), but now that loop is removed, assignment is
indeed dead.
Resolution : Remove line.
Problem : Argument with 'nonnull' attribute passed null @ 4227.
Diagnostic : Harmless issue.
Rationale : It's true we're calling memset with NULL pointer, but it's
also true we're doing it with zero size. We just thought
that would work and do nothing (it was a way of avoiding
to add a guard). It doesn't work, though, as memset
requires nonnull arguments.
Resolution : Add guard to avoid null argument.
Problems with line-input editing commands in Ex mode
('nvim -e' or 'Q' in normal mode):
CTRL_U: Only after the next keystroke the complete
line change is shown if the indentation was
not 0.
: asdfCTRL_U
CTRL_T: Memory reallocation with ga_grows() before a
memmove(), but pointers into the memory are
not updated.
:set sw=40
:CTRL_T
...
Should complain about a memory error.
CTRL_D: Trying to reduce an indentation of 0.
:set sw=1
:CTRL_D
Segfault
Helped-by: Scott Prager <splinterofchaos@gmail.com>
The refactoring of vim_getenv() to remove the mustfree arg
included reworking calling functions. expand_shellcmd was
also using that to track its usage of the variable within
the function, resulting in #2487. This change addresses
that scenario and cleans up some of the function for style.
Problem : Dereference of null pointer @ 4199.
Diagnostic : False positive.
Rationale : Suggested error path implies that newlen == 0 and
newlen > hislen, which implies hislen < 0, which is
impossible (hislen is always between 0 and 10000).
Resolution : Refactor code.
Asserting oldlen >= 0 should have sufficed, but
for some reason analyzer doesn't follow implications in
that case.
Asserting newlen != 0 || newlen <= hislen works.
But the chance has been taken to do extensive
refactoring of this function, as it was difficult to
understand as it was.
As a result of refactoring, assert is not needed anymore,
as we don't call clear_hist_entry() in refactored version.
Refactor : - Rework algorithm:
* Drop guard for OOM case, which can't happen now.
* Drop empty/growing/shrinking cases. Simplify to always
doing the same.
* Perform circular array reordering in all cases
(before, it only did when shrinking).
* Work in batches through memcpy/memset, instead of one
entry at a time, as it did before.
- Inline variable declarations.
- Replace `ssize_t` by `int`.
- Introduce oldlen as entry value of hislen.
- Add a lot of comments.
Helped-by: Scott Prager <splinterofchaos@gmail.com>
Helped-by: oni-link <knil.ino@gmail.com>
Without the casts*, the compiler rightly warns about the os_getenv
losing the qualifier. This refactor adds a variable to manage this
properly, and renames the original variables to increase clarity.
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.
The original fix 3db0a40d69
does not work for more than one loop iteration, because memory allocated
in the previous iteration could be reused in the current iteration.
Because expand_wildcards() never reads the variables *num_file
and *file before the first assignment to them, the initial
values for these variables can be anything. So instead of
calling expand_shellcmd() with *file = "" we set *file = NULL.
That should help coverity see, that not a array-typed value
is freed.
Helped-by: Eliseo Martínez <eliseomarmol@gmail.com>
Be more specific in the description of mch_expand_wildcards():
This function will never free memory pointed to by its arguments.
If OK is returned, *file will always point to allocated memory.
*num_file is set to the number of pointers in *file.
If FAIL is returned *file is set to NULL and *num_file to 0.
If gen_expand_wildcards() returns FAIL, no memory allocation in this
function needs to be undone.
If expand_wildcards() returns FAIL, no memory allocation in this
function needs to be undone.
Helped-by: Eliseo Martínez <eliseomarmol@gmail.com>
Helped-by: Michael Reed <m.reed@mykolab.com>
Problem: In Ex mode, cyrillic characters are not handled. (Stas Malavin)
Solution: Support multi-byte characters in Ex mode. (Yukihiro Nakadaira)
https://github.com/vim/vim/releases/tag/v7-4-324