Commit Graph
773 Commits
Author SHA1 Message Date
Dundar Goc 824a729628 refactor: replace char_u with char
Work on https://github.com/neovim/neovim/issues/459
2022-07-31 00:52:59 +02:00
zeertzjq e0c433833f refactor: fix clang and PVS warnings (#19532) 2022-07-28 06:05:33 +08:00
zeertzjq f586131e57 vim-patch:8.2.4623: Coverity warns for using uninitialized field
Problem:    Coverity warns for using uninitialized field.
Solution:   Initialize he field to zero.
https://github.com/vim/vim/commit/03a297c63f1512ba9783104a343dc7e2024e0bb0

Also only initialize used fields in f_fullcommand().
2022-07-27 12:00:52 +08:00
zeertzjq 890d4023cd vim-patch:9.0.0081: command line completion of user command may have duplicates (#19529)
Problem:    Command line completion of user command may have duplicates.
            (Dani Dickstein)
Solution:   Skip global user command if an identical buffer-local one is
            defined. (closes vim/vim#10797)
https://github.com/vim/vim/commit/c2842adfb2ca0637f13e2793fefa18e7818684f9
2022-07-27 07:25:47 +08:00
zeertzjq 9d4a4f49ef vim-patch:8.1.1933: the eval.c file is too big (#19462)
Problem:    The eval.c file is too big.
Solution:   Move code related to variables to evalvars.c. (Yegappan
            Lakshmanan, closes vim/vim#4868)
https://github.com/vim/vim/commit/0522ba0359c96a8c2a4fc8fca0d3b58e49dda759

Name the new file eval/vars.c instead.
2022-07-22 21:14:17 +08:00
zeertzjq 77b9f1eac5 refactor: fix clang warnings (#19453) 2022-07-21 17:42:59 +08:00
zeertzjq 7e79cb56c5 vim-patch:8.2.1294: Vim9: error when using vim9script in TextYankPost
Problem:    Vim9: error when using vim9script in TextYankPost.
Solution:   Use EX_LOCKOK instead of the EX_CMDWIN flag for command that can
            be used when text is locked. (closes vim/vim#6529)
https://github.com/vim/vim/commit/37394ff75270877a032422abcd079a6732a29730
2022-07-17 13:51:46 +08:00
zeertzjq 9f837a5dcf fix(api): fix nvim_parse_cmd interfere with printing line in Ex mode (#19400) 2022-07-17 09:59:32 +08:00
zeertzjq fa29bc94b5 vim-patch:8.2.0593: finding a user command is not optimal (#19386)
Problem:    Finding a user command is not optimal.
Solution:   Start further down in the list of commands.
https://github.com/vim/vim/commit/a494f56f885876c98a276f7acfa386bfbb344680
2022-07-16 13:49:48 +08:00
zeertzjq a649af4dba vim-patch:8.2.0426: some errors were not tested for
Problem:    Some errors were not tested for.
Solution:   Add tests. (Dominique Pelle, closes vim/vim#5824)
https://github.com/vim/vim/commit/9b9be007e7d674f49fc2b650f840d08532b180ad

Cherry-pick get_highest_fnum() from patch 8.1.1908 to make tests pass.
2022-07-15 15:21:39 +08:00
zeertzjq c01690b1ea fix(exmode): flush messages before printing a line after pressing Enter (#19341) 2022-07-13 09:06:31 +08:00
zeertzjq 6a670a00b3 fix(exmode): do not throttle messages when pressing enter to print line 2022-07-12 14:06:42 +08:00
zeertzjq 27fd17a79c vim-patch:8.2.0243: insufficient code coverage for ex_docmd.c functions
Problem:    Insufficient code coverage for ex_docmd.c functions.
Solution:   Add more tests. (Yegappan Lakshmanan, closes vim/vim#5618)
https://github.com/vim/vim/commit/9f6277bdde97b7767ded43a0b5a2023eb601b3b7

Cherry-pick Test_window_only() from patch 8.2.0203.
Cherry-pick a memory leak fix from patch 8.2.0399.
2022-07-12 05:36:33 +08:00
zeertzjq 0d0a6aff6b vim-patch:8.2.0274: hang with combination of feedkeys(), Ex mode and :global
Problem:    Hang with combination of feedkeys(), Ex mode and :global.
            (Yegappan Lakshmanan)
Solution:   Add the pending_exmode_active flag.
https://github.com/vim/vim/commit/9e2bcb5d23138d45a0b6f9c1542b5facc807efe7
2022-07-08 23:11:12 +08:00
zeertzjq 4ffe5d0189 vim-patch:8.2.5063: error for a command may go over the end of IObuff (#19260)
Problem:    Error for a command may go over the end of IObuff.
Solution:   Truncate the message.
https://github.com/vim/vim/commit/44a3f3353e0407e9fffee138125a6927d1c9e7e5
2022-07-07 06:37:54 +08:00
zeertzjq 9ced054134 fix(mark): fix unexpected cursor movements (#19253) 2022-07-06 19:01:44 +08:00
zeertzjq 0313aba77a vim-patch:9.0.0031: <mods> of user command does not have correct verbose value (#19215)
vim-patch:9.0.0031: <mods> of user command does not have correct verbose value

Problem:    <mods> of user command does not have correct verbose value.
Solution:   Use the value from the command modifier. (closes vim/vim#10651)
https://github.com/vim/vim/commit/9359e8a6d99fe2abfcbb9603339f1740d8870cc6
2022-07-03 21:17:03 +08:00
zeertzjq f93eb169f6 vim-patch:8.2.1900: Vim9: command modifiers do not work
Problem:    Vim9: command modifiers do not work.
Solution:   Make most command modifiers work.
https://github.com/vim/vim/commit/02194d2bd54eacd0b7b9a017a3fe1702ecb80971
2022-07-03 04:34:28 +08:00
Dundar Goc 3b8804571c refactor: replace char_u
Work on https://github.com/neovim/neovim/issues/459
2022-07-02 16:01:27 +02:00
Lewis Russell ed429c00d7 refactor(fold): style #19175
* refactor(fold): update comment formatting
* refactor(fold): use post-increment/decrement
* refactor(fold): reduce scope of local variables
* refactor(fold): use booleans
2022-07-02 04:29:27 -07:00
zeertzjq 015778a381 vim-patch:8.1.0487: no menus specifically for the terminal window
Problem:    No menus specifically for the terminal window.
Solution:   Add :tlmenu. (Yee Cheng Chin, closes vim/vim#3439) Add a menu test.
https://github.com/vim/vim/commit/4c5d815256099b50eca2ec5bf8f9aaa67a890211

ADDR_OHTER comes from patch 8.1.1241, which has already been ported.
2022-07-01 10:17:39 +08:00
zeertzjq 610cf9f950 vim-patch:8.0.1570: can't use :popup for a menu in the terminal
Problem:    Can't use :popup for a menu in the terminal. (Wei Zhang)
Solution:   Make :popup work in the terminal.  Also fix that entries were
            included that don't work in the current state.
https://github.com/vim/vim/commit/29a2c08d792e4458a0af8371f5341394829fce29
2022-07-01 10:17:39 +08:00
Javier Lopez 565f72b968 feat(marks): restore viewport on jump #15831
** Refactor

Previously most functions used to "get" a mark returned a position,
changed the line number and sometimes changed even the current buffer.

Now functions return a {x}fmark_T making calling context aware whether
the mark is in another buffer without arcane casting. A new function is
provided for switching to the mark buffer and returning a flag style
Enum to convey what happen in the movement. If the cursor changed, line,
columns, if it changed buffer, etc.

The function to get named mark was split into multiple functions.

- mark_get() -> fmark_T
- mark_get_global() -> xfmark_T
- mark_get_local() -> fmark_T
  - mark_get_motion() -> fmark_T
  - mark_get_visual() -> fmark_T

Functions that manage the changelist and jumplist were also modified to
return mark types.

- get_jumplist -> fmark_T
- get_changelist -> fmark_T

The refactor is also seen mainly on normal.c, where all the mark
movement has been siphoned through one function nv_gomark, while the
other functions handle getting the mark and setting their movement
flags. To handle whether context marks should be left, etc.

** Mark View

While doing the refactor the concept of a mark view was also
implemented:

The view of a mark currently implemented as the number of lines between
the mark position on creation and the window topline. This allows for
moving not only back to the position of a mark but having the window
look similar to when the mark was defined. This is done by carrying and
extra element in the fmark_T struct, which can be extended later to also
restore horizontal shift.

*** User space features

1. There's a new option, jumpoptions+=view enables the mark view restoring
automatically when using the jumplist, changelist, alternate-file and
mark motions. <C-O> <C-I> g; g, <C-^> '[mark] `[mark]

** Limitations

- The view information is not saved in shada.
- Calls to get_mark should copy the value in the pointer since we are
  using pos_to_mark() to wrap and provide a homogeneous interfaces. This
  was also a limitation in the previous state of things.
2022-06-30 05:59:52 -07:00
Famiu Haque 606ec8b708 feat(api): make nvim_parse_cmd and nvim_cmd support :filter
Also fixes a memory leak in `parse_cmdline`.

Closes #18954.
2022-06-28 17:31:04 +06:00
dundargoc 014a88799a refactor: replace char_u #18429
Work on https://github.com/neovim/neovim/issues/459
2022-06-28 02:31:54 -07:00
Famiu Haqueandzeertzjq 7e1cf6b764 fix(inccommand): parse the command to check if it is previewable
Free regprog if command isn't previewable

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2022-06-28 13:00:05 +08:00
zeertzjq cf23695dd7 fix(api): nvim_parse_cmd check for ambiguous user command (#19116) 2022-06-27 14:10:13 +08:00
zeertzjq 0cf0be302b vim-patch:8.2.4895: buffer overflow with invalid command with composing chars
Problem:    Buffer overflow with invalid command with composing chars.
Solution:   Check that the whole character fits in the buffer.
https://github.com/vim/vim/commit/d88934406c5375d88f8f1b65331c9f0cab68cc6c
2022-06-24 07:26:06 +08:00
zeertzjq 7718b75846 refactor: move some mapping-related code to a separate file (#19061)
This marks the following Vim patches as ported:

vim-patch:8.1.1785: map functionality mixed with character input

Problem:    Map functionality mixed with character input.
Solution:   Move the map functionality to a separate file. (Yegappan
            Lakshmanan, closes vim/vim#4740)  Graduate the +localmap feature.
https://github.com/vim/vim/commit/b66bab381c8ba71fd6e92327d1d34c6f8a65f2a7

vim-patch:8.2.3643: header for source file is outdated

Problem:    Header for source file is outdated.
Solution:   Make the header more accurate. (closes vim/vim#9186)
https://github.com/vim/vim/commit/a3f83feb63eae5464a620ae793c002eb45f7a838

Also cherry-pick a change for <unique> mappings from patch 8.2.0807.
Rename map_clear_mode() to do_mapclear().
2022-06-23 21:17:11 +08:00
zeertzjq f088915495 vim-patch:8.2.5150: read past the end of the first line with ":0;'{"
Problem:    Read past the end of the first line with ":0;'{".
Solution:   When on line zero check the column is valid for line one.
https://github.com/vim/vim/commit/f7c7c3fad6d2135d558f3b36d0d1a943118aeb5e
2022-06-23 06:25:05 +08:00
bfredl 5d69872105 perf(ui): reduce allocation overhead when encoding "redraw" events
Note for external UIs: Nvim can now emit multiple "redraw" event batches
before a final "flush" event is received. To retain existing behavior,
clients should make sure to update visible state at an explicit "flush"
event, not just the end of a "redraw" batch of event.

* Get rid of copy_object() blizzard in the auto-generated ui_event layer
* Special case "grid_line" by encoding screen state directly to
  msgpack events with no intermediate API events.
* Get rid of the arcane notion of referring to the screen as the "shell"
* Array and Dictionary are kvec_t:s, so define them as such.
* Allow kvec_t:s, such as Arrays and Dictionaries, to be allocated with
  a predetermined size within an arena.
* Eliminate redundant capacity checking when filling such kvec_t:s
  with values.
2022-06-20 12:44:56 +02:00
zeertzjq 0a0cda9528 vim-patch:8.2.5088: value of cmod_verbose is a bit complicated to use
Problem:    Value of cmod_verbose is a bit complicated to use.
Solution:   Use zero for not set, value + 1 when set. (closes vim/vim#10564)
https://github.com/vim/vim/commit/cd7496382efc9e6748326c6cda7f01003fa07063

Omit has_cmdmod(): only used for Vim9 script
2022-06-14 21:12:27 +08:00
zeertzjq 6130b4a84b vim-patch:8.2.1898: command modifier parsing always uses global cmdmod
Problem:    Command modifier parsing always uses global cmdmod.
Solution:   Pass in cmdmod_T to use.  Rename struct fields consistently.
https://github.com/vim/vim/commit/e10044015841711b989f9a898d427bcc1fdb4c32
2022-06-14 20:58:34 +08:00
zeertzjq dad898b665 refactor(api): remove redundant fields of CmdParseInfo 2022-06-14 20:58:34 +08:00
zeertzjq da41ca299f vim-patch:8.2.1897: command modifiers are saved and set inconsistently
Problem:    Command modifiers are saved and set inconsistently.
Solution:   Separate parsing and applying command modifiers.  Save values in
            cmdmod_T.
https://github.com/vim/vim/commit/5661ed6c833e05467cab33cb9b1c535e7e5cc570

Cherry-pick: :0verbose fix from patch 8.2.4741
2022-06-14 20:58:34 +08:00
zeertzjq e13c36e312 vim-patch:8.2.0577: not all modifiers supported for :options (#18952)
Problem:    Not all modifiers supported for :options.
Solution:   Use all cmdmod.split flags. (closes vim/vim#4401)
https://github.com/vim/vim/commit/7a1637f4c00ac3d0cbf894803ada1586a1717470

Cherry-pick Test_options_command() change from patch 8.2.0540
2022-06-13 22:04:39 +08:00
bfredl 0d63fafcda refactor(api): move command related API to separate file 2022-06-12 19:45:39 +02:00
Dundar Goc a732c253b7 refactor: change type of linenr_T from long to int32_t
The size of long varies depending on architecture, in contrast to the
MAXLNUM constant which sets the maximum allowable number of lines to
2^32-1. This discrepancy may lead to hard to detect bugs, for example
https://github.com/neovim/neovim/issues/18454. Setting linenr_T to a
fix maximum size of 2^32-1 will prevent this type of errors in the
future.

Also change the variables `amount` and `amount_after` to be linenr_T
since they're referring to "the line number difference" between two
texts.
2022-06-10 16:16:41 +02:00
zeertzjq f40adf770d fix(inccommand): do not try to preview an ambiguous command (#18827) 2022-06-01 20:17:52 +08:00
Famiu Haque 46536f53e8 feat: add preview functionality to user commands
Adds a Lua-only `preview` flag to user commands which allows the command to be incrementally previewed like `:substitute` when 'inccommand' is set.
2022-05-31 20:55:05 +06:00
zeertzjq 772ae3e656 vim-patch:8.2.5037: cursor position may be invalid after "0;" range (#18782)
Problem:    Cursor position may be invalid after "0;" range.
Solution:   Check the cursor position when it was set by ";" in the range.
https://github.com/vim/vim/commit/4d97a565ae8be0d4debba04ebd2ac3e75a0c8010
2022-05-29 07:00:18 +08:00
kylo252 7b952793d5 refactor: missing parenthesis may cause unexpected problems (#17443)
related vim-8.2.{4402,4639}
2022-05-26 10:49:25 +08:00
dundargoc 9fec6dc9a2 refactor(uncrustify): set maximum number of consecutive newlines to 2 (#18695) 2022-05-25 12:31:14 -06:00
Gregory Anders 9e1ee9fb1d refactor!: delete insertmode (#18547)
Neovim already removed `evim` (or any similar flags). The 'insertmode'
option is a weird remnant, so get rid of it.

The 'insertmode' option is replaced with a script that closely emulates
the option. This script is documented at :help 'insertmode'
2022-05-22 21:20:18 -06:00
James McCoy 47d9a393de fix(cid/352839): USE_AFTER_FREE in create_user_command #18669 2022-05-22 10:29:15 -07:00
Famiu Haque fb8fa004d8 fix: make nvim_cmd not suppress errors inside key mapping
Closes #18632
2022-05-19 22:23:14 +06:00
bfredl d7dd600716 Merge pull request #18562 from famiu/feat/ui/winbar
feat(ui): add `'winbar'`
2022-05-18 13:08:07 +02:00
Famiu HaqueandBjörn Linse e1bdb2a258 feat(ui): add 'winbar'
Adds support for a bar at the top of each window, enabled through the
`'winbar'` option.

Co-authored-by: Björn Linse <bjorn.linse@gmail.com>
2022-05-18 09:27:08 +06:00
Justin M. Keyes b70856009d Merge #18605 PVS fixes 2022-05-18 02:32:15 +02:00
zeertzjq 7ded303d68 vim-patch:8.2.4975: recursive command line loop may cause a crash (#18614)
Problem:    Recursive command line loop may cause a crash.
Solution:   Limit recursion of getcmdline().
https://github.com/vim/vim/commit/51f0bfb88a3554ca2dde777d78a59880d1ee37a8

Cherry-pick e_command_too_recursive from patch 8.2.3957.
2022-05-18 08:21:24 +08:00