diff options
Diffstat (limited to 'src')
135 files changed, 1533 insertions, 868 deletions
diff --git a/src/clint.py b/src/clint.py index 80ebf565a1..663416553e 100755 --- a/src/clint.py +++ b/src/clint.py @@ -897,13 +897,10 @@ def CheckIncludes(filename, lines, error): }): return - # These should be synced with the ignored headers in the `iwyu` target in - # the Makefile. check_includes_ignore = [ "src/nvim/api/private/validate.h", "src/nvim/assert_defs.h", "src/nvim/buffer.h", - "src/nvim/buffer_defs.h", "src/nvim/channel.h", "src/nvim/charset.h", "src/nvim/eval.h", @@ -912,32 +909,22 @@ def CheckIncludes(filename, lines, error): "src/nvim/eval/typval_defs.h", "src/nvim/eval/userfunc.h", "src/nvim/event/libuv_process.h", - "src/nvim/event/loop.h", - "src/nvim/event/process.h", - "src/nvim/event/rstream.h", - "src/nvim/event/signal.h", - "src/nvim/event/socket.h", - "src/nvim/event/stream.h", - "src/nvim/event/time.h", - "src/nvim/event/wstream.h", + "src/nvim/event/multiqueue.h", "src/nvim/garray.h", "src/nvim/globals.h", "src/nvim/grid.h", "src/nvim/highlight.h", - "src/nvim/input.h", "src/nvim/keycodes.h", "src/nvim/lua/executor.h", "src/nvim/main.h", + "src/nvim/mark.h", "src/nvim/msgpack_rpc/channel_defs.h", - "src/nvim/msgpack_rpc/helpers.h", "src/nvim/msgpack_rpc/unpacker.h", "src/nvim/option.h", - "src/nvim/os/input.h", "src/nvim/os/pty_conpty_win.h", "src/nvim/os/pty_process_unix.h", "src/nvim/os/pty_process_win.h", "src/nvim/tui/input.h", - "src/nvim/ui.h", "src/nvim/viml/parser/expressions.h", "src/nvim/viml/parser/parser.h", ] diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index a21a87ad5e..e03a53669b 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -923,6 +923,8 @@ set(GEN_EVAL_FILES ${NVIM_RUNTIME_DIR}/doc/builtin.txt ${NVIM_RUNTIME_DIR}/lua/vim/_meta/options.lua ${NVIM_RUNTIME_DIR}/doc/options.txt + ${NVIM_RUNTIME_DIR}/lua/vim/_meta/vvars.lua + ${NVIM_RUNTIME_DIR}/doc/vvars.txt ) add_custom_command( @@ -933,6 +935,7 @@ add_custom_command( ${PROJECT_SOURCE_DIR}/scripts/gen_eval_files.lua ${PROJECT_SOURCE_DIR}/src/nvim/eval.lua ${PROJECT_SOURCE_DIR}/src/nvim/options.lua + ${PROJECT_SOURCE_DIR}/src/nvim/vvars.lua ${NVIM_RUNTIME_DIR}/doc/api.mpack WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) diff --git a/src/nvim/api/private/converter.h b/src/nvim/api/private/converter.h index fc82abf332..a5acc56c7c 100644 --- a/src/nvim/api/private/converter.h +++ b/src/nvim/api/private/converter.h @@ -1,6 +1,6 @@ #pragma once -#include "nvim/api/private/defs.h" // IWYU pragma: keep +#include "nvim/api/private/defs.h" // IWYU pragma: export #include "nvim/eval/typval_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS diff --git a/src/nvim/api/private/dispatch.h b/src/nvim/api/private/dispatch.h index b627db6b00..9b167a7b9e 100644 --- a/src/nvim/api/private/dispatch.h +++ b/src/nvim/api/private/dispatch.h @@ -3,7 +3,7 @@ #include <stdbool.h> #include <stdint.h> -#include "nvim/api/private/defs.h" +#include "nvim/api/private/defs.h" // IWYU pragma: export #include "nvim/memory_defs.h" #include "nvim/types_defs.h" @@ -26,6 +26,6 @@ extern const MsgpackRpcRequestHandler method_handlers[]; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "api/private/dispatch.h.generated.h" -# include "api/private/dispatch_wrappers.h.generated.h" // IWYU pragma: export -# include "keysets_defs.generated.h" // IWYU pragma: export +# include "api/private/dispatch_wrappers.h.generated.h" +# include "keysets_defs.generated.h" #endif diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h index 701ce91257..1ee66f906b 100644 --- a/src/nvim/api/private/helpers.h +++ b/src/nvim/api/private/helpers.h @@ -4,7 +4,7 @@ #include <stddef.h> #include "klib/kvec.h" -#include "nvim/api/private/defs.h" +#include "nvim/api/private/defs.h" // IWYU pragma: export #include "nvim/buffer_defs.h" // IWYU pragma: keep #include "nvim/eval/typval_defs.h" // IWYU pragma: keep #include "nvim/ex_eval_defs.h" diff --git a/src/nvim/api/private/validate.h b/src/nvim/api/private/validate.h index d1c977cd6e..692ea46176 100644 --- a/src/nvim/api/private/validate.h +++ b/src/nvim/api/private/validate.h @@ -3,7 +3,7 @@ #include <stdbool.h> #include <stddef.h> -#include "nvim/api/private/defs.h" +#include "nvim/api/private/defs.h" // IWYU pragma: export #include "nvim/api/private/helpers.h" #include "nvim/assert_defs.h" #include "nvim/macros_defs.h" diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 678d23fbeb..82d42d652d 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -15,7 +15,8 @@ #include "nvim/autocmd.h" #include "nvim/channel.h" #include "nvim/eval.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/event/wstream.h" #include "nvim/globals.h" #include "nvim/grid.h" diff --git a/src/nvim/api/ui.h b/src/nvim/api/ui.h index b1f4ff97d9..9147f1d870 100644 --- a/src/nvim/api/ui.h +++ b/src/nvim/api/ui.h @@ -9,5 +9,5 @@ #ifdef INCLUDE_GENERATED_DECLARATIONS # include "api/ui.h.generated.h" -# include "ui_events_remote.h.generated.h" // IWYU pragma: export +# include "ui_events_remote.h.generated.h" #endif diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 9ae5244fa1..aed286165a 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -64,6 +64,7 @@ #include "nvim/statusline.h" #include "nvim/strings.h" #include "nvim/terminal.h" +#include "nvim/types_defs.h" #include "nvim/ui.h" #include "nvim/vim_defs.h" #include "nvim/window.h" diff --git a/src/nvim/ascii_defs.h b/src/nvim/ascii_defs.h index 3de04cd9fa..4215157654 100644 --- a/src/nvim/ascii_defs.h +++ b/src/nvim/ascii_defs.h @@ -86,35 +86,6 @@ static inline bool ascii_iswhite(int c) REAL_FATTR_CONST REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_iswhite_or_nul(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isdigit(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isxdigit(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isident(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isbdigit(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isodigit(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - -static inline bool ascii_isspace(int c) - REAL_FATTR_CONST - REAL_FATTR_ALWAYS_INLINE; - /// Checks if `c` is a space or tab character. /// /// @see {ascii_isdigit} @@ -123,6 +94,9 @@ static inline bool ascii_iswhite(int c) return c == ' ' || c == '\t'; } +static inline bool ascii_iswhite_or_nul(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is a space or tab character or NUL. /// /// @see {ascii_isdigit} @@ -131,6 +105,9 @@ static inline bool ascii_iswhite_or_nul(int c) return ascii_iswhite(c) || c == NUL; } +static inline bool ascii_isdigit(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Check whether character is a decimal digit. /// /// Library isdigit() function is officially locale-dependent and, for @@ -145,6 +122,9 @@ static inline bool ascii_isdigit(int c) return c >= '0' && c <= '9'; } +static inline bool ascii_isxdigit(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is a hexadecimal digit, that is, one of 0-9, a-f, A-F. /// /// @see {ascii_isdigit} @@ -155,6 +135,9 @@ static inline bool ascii_isxdigit(int c) || (c >= 'A' && c <= 'F'); } +static inline bool ascii_isident(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is an “identifier” character /// /// That is, whether it is alphanumeric character or underscore. @@ -163,6 +146,9 @@ static inline bool ascii_isident(int c) return ASCII_ISALNUM(c) || c == '_'; } +static inline bool ascii_isbdigit(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is a binary digit, that is, 0-1. /// /// @see {ascii_isdigit} @@ -171,6 +157,9 @@ static inline bool ascii_isbdigit(int c) return (c == '0' || c == '1'); } +static inline bool ascii_isodigit(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is an octal digit, that is, 0-7. /// /// @see {ascii_isdigit} @@ -179,6 +168,9 @@ static inline bool ascii_isodigit(int c) return (c >= '0' && c <= '7'); } +static inline bool ascii_isspace(int c) + REAL_FATTR_CONST + REAL_FATTR_ALWAYS_INLINE; /// Checks if `c` is a white-space character, that is, /// one of \f, \n, \r, \t, \v. /// diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index 9605e3b4db..a7fe6667e8 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -19,7 +19,8 @@ #include "nvim/eval/typval.h" #include "nvim/eval/userfunc.h" #include "nvim/eval/vars.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/ex_docmd.h" #include "nvim/ex_eval.h" #include "nvim/fileio.h" diff --git a/src/nvim/autocmd_defs.h b/src/nvim/autocmd_defs.h index 4639ec2731..ec81c2f1ed 100644 --- a/src/nvim/autocmd_defs.h +++ b/src/nvim/autocmd_defs.h @@ -12,7 +12,6 @@ #include "nvim/regexp_defs.h" #include "nvim/types_defs.h" -// event_T definition #ifdef INCLUDE_GENERATED_DECLARATIONS # include "auevents_enum.generated.h" #endif diff --git a/src/nvim/base64.c b/src/nvim/base64.c index 7f7d121442..d461b7e3ff 100644 --- a/src/nvim/base64.c +++ b/src/nvim/base64.c @@ -3,7 +3,7 @@ #include <stdint.h> #include <string.h> -#include "auto/config.h" +#include "auto/config.h" // IWYU pragma: keep #include "nvim/base64.h" #include "nvim/memory.h" diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index d62e73a191..24eab644a1 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -43,11 +43,9 @@ #include "nvim/digraph.h" #include "nvim/drawscreen.h" #include "nvim/eval.h" -#include "nvim/eval/typval_defs.h" #include "nvim/eval/vars.h" #include "nvim/ex_cmds.h" #include "nvim/ex_cmds2.h" -#include "nvim/ex_cmds_defs.h" #include "nvim/ex_docmd.h" #include "nvim/ex_eval.h" #include "nvim/ex_getln.h" @@ -69,7 +67,6 @@ #include "nvim/mark.h" #include "nvim/mbyte.h" #include "nvim/memfile_defs.h" -#include "nvim/memline_defs.h" #include "nvim/memory.h" #include "nvim/message.h" #include "nvim/move.h" diff --git a/src/nvim/buffer.h b/src/nvim/buffer.h index 36e70d1927..af30870776 100644 --- a/src/nvim/buffer.h +++ b/src/nvim/buffer.h @@ -6,13 +6,10 @@ #include "nvim/buffer_defs.h" // IWYU pragma: export #include "nvim/eval/typval.h" -#include "nvim/eval/typval_defs.h" -#include "nvim/ex_cmds_defs.h" #include "nvim/func_attr.h" #include "nvim/macros_defs.h" #include "nvim/memline.h" -#include "nvim/memline_defs.h" -#include "nvim/pos_defs.h" +#include "nvim/types_defs.h" /// Values for buflist_getfile() enum getf_values { diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index 3a6b5e2c6b..ca6e874c1f 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -18,7 +18,7 @@ #include "nvim/mark_defs.h" #include "nvim/marktree_defs.h" #include "nvim/memline_defs.h" -#include "nvim/option_vars.h" +#include "nvim/option_defs.h" #include "nvim/os/fs_defs.h" #include "nvim/pos_defs.h" #include "nvim/regexp_defs.h" diff --git a/src/nvim/buffer_updates.c b/src/nvim/buffer_updates.c index a91a890d0e..7985d6931f 100644 --- a/src/nvim/buffer_updates.c +++ b/src/nvim/buffer_updates.c @@ -5,7 +5,6 @@ #include "klib/kvec.h" #include "nvim/api/buffer.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/assert_defs.h" #include "nvim/buffer.h" diff --git a/src/nvim/bufwrite.c b/src/nvim/bufwrite.c index c506cfdfa3..7f44cdfb2c 100644 --- a/src/nvim/bufwrite.c +++ b/src/nvim/bufwrite.c @@ -17,6 +17,7 @@ #include "nvim/change.h" #include "nvim/drawscreen.h" #include "nvim/eval.h" +#include "nvim/eval/typval_defs.h" #include "nvim/ex_cmds.h" #include "nvim/ex_cmds_defs.h" #include "nvim/ex_eval.h" diff --git a/src/nvim/channel.c b/src/nvim/channel.c index e62c240636..d2b064ef3c 100644 --- a/src/nvim/channel.c +++ b/src/nvim/channel.c @@ -7,7 +7,6 @@ #include "klib/kvec.h" #include "nvim/api/private/converter.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/autocmd.h" #include "nvim/buffer_defs.h" @@ -15,6 +14,7 @@ #include "nvim/eval.h" #include "nvim/eval/encode.h" #include "nvim/eval/typval.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/rstream.h" #include "nvim/event/socket.h" diff --git a/src/nvim/channel.h b/src/nvim/channel.h index 7e3e84d918..e77f17d3e0 100644 --- a/src/nvim/channel.h +++ b/src/nvim/channel.h @@ -7,13 +7,9 @@ #include "nvim/channel_defs.h" // IWYU pragma: export #include "nvim/eval/typval_defs.h" #include "nvim/event/libuv_process.h" -#include "nvim/event/multiqueue.h" #include "nvim/event/process.h" -#include "nvim/event/socket.h" -#include "nvim/event/stream.h" -#include "nvim/garray_defs.h" +#include "nvim/func_attr.h" #include "nvim/macros_defs.h" -#include "nvim/main.h" #include "nvim/map_defs.h" #include "nvim/msgpack_rpc/channel_defs.h" #include "nvim/os/pty_process.h" diff --git a/src/nvim/charset.c b/src/nvim/charset.c index 60a0c77cfa..fc900fd3a7 100644 --- a/src/nvim/charset.c +++ b/src/nvim/charset.c @@ -8,7 +8,7 @@ #include <limits.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "auto/config.h" #include "klib/kvec.h" diff --git a/src/nvim/charset.h b/src/nvim/charset.h index cfab0f8517..62a38660a8 100644 --- a/src/nvim/charset.h +++ b/src/nvim/charset.h @@ -3,12 +3,9 @@ #include <stdbool.h> #include <stdint.h> -#include "nvim/buffer_defs.h" -#include "nvim/eval/typval_defs.h" -#include "nvim/option_defs.h" +#include "nvim/func_attr.h" #include "nvim/option_vars.h" -#include "nvim/pos_defs.h" -#include "nvim/strings.h" +#include "nvim/strings.h" // IWYU pragma: keep /// Return the folded-case equivalent of the given character /// diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c index 31b385c466..3198156409 100644 --- a/src/nvim/cmdexpand.c +++ b/src/nvim/cmdexpand.c @@ -6,9 +6,8 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/arglist.h" #include "nvim/ascii_defs.h" diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c index bcb2810095..d25566213c 100644 --- a/src/nvim/cursor.c +++ b/src/nvim/cursor.c @@ -11,7 +11,6 @@ #include "nvim/drawscreen.h" #include "nvim/fold.h" #include "nvim/globals.h" -#include "nvim/macros_defs.h" #include "nvim/mark.h" #include "nvim/mbyte.h" #include "nvim/memline.h" diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index bddc48b8c7..6f1416711a 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -4,7 +4,6 @@ #include <stdlib.h> #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" diff --git a/src/nvim/decoration_provider.c b/src/nvim/decoration_provider.c index 39516ff541..e160a563f3 100644 --- a/src/nvim/decoration_provider.c +++ b/src/nvim/decoration_provider.c @@ -5,7 +5,6 @@ #include "klib/kvec.h" #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/buffer_defs.h" #include "nvim/decoration.h" diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index 8a441901d9..a6e483ab54 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -105,6 +105,7 @@ #include "nvim/strings.h" #include "nvim/syntax.h" #include "nvim/terminal.h" +#include "nvim/types_defs.h" #include "nvim/ui.h" #include "nvim/ui_compositor.h" #include "nvim/version.h" @@ -1211,7 +1212,7 @@ static bool win_redraw_signcols(win_T *wp) } else if (wp->w_maxscwidth <= 1 && buf->b_signs_with_text >= (size_t)wp->w_maxscwidth) { width = wp->w_maxscwidth; } else { - width = buf_signcols_validate(wp, buf, false); + width = MIN(wp->w_maxscwidth, buf_signcols_validate(wp, buf, false)); } int scwidth = wp->w_scwidth; diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 613aa2a591..8984a959d3 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -5,7 +5,7 @@ #include <inttypes.h> #include <stdbool.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/ascii_defs.h" #include "nvim/autocmd.h" @@ -18,6 +18,7 @@ #include "nvim/drawscreen.h" #include "nvim/edit.h" #include "nvim/eval.h" +#include "nvim/eval/typval_defs.h" #include "nvim/ex_cmds_defs.h" #include "nvim/ex_docmd.h" #include "nvim/extmark.h" diff --git a/src/nvim/eval.c b/src/nvim/eval.c index d12a49e7d4..3818944fc9 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7,11 +7,10 @@ #include <stdlib.h> #include <string.h> #include <sys/stat.h> -#include <sys/types.h> +#include <uv.h> #include "auto/config.h" #include "nvim/api/private/converter.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/autocmd.h" @@ -29,6 +28,7 @@ #include "nvim/eval/typval.h" #include "nvim/eval/userfunc.h" #include "nvim/eval/vars.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/process.h" #include "nvim/event/time.h" @@ -89,8 +89,6 @@ #define DICT_MAXNEST 100 // maximum nesting of lists and dicts -#define MAX_CALLBACK_DEPTH 20 - static const char *e_missbrac = N_("E111: Missing ']'"); static const char *e_list_end = N_("E697: Missing end of List ']': %s"); static const char e_cannot_slice_dictionary[] @@ -6061,7 +6059,7 @@ bool callback_call(Callback *const callback, const int argcount_in, typval_T *co typval_T *const rettv) FUNC_ATTR_NONNULL_ALL { - if (callback_depth > MAX_CALLBACK_DEPTH) { + if (callback_depth > p_mfd) { emsg(_(e_command_too_recursive)); return false; } diff --git a/src/nvim/eval.h b/src/nvim/eval.h index b350b9a8d1..9ee5d99806 100644 --- a/src/nvim/eval.h +++ b/src/nvim/eval.h @@ -4,7 +4,7 @@ #include <stddef.h> #include <stdint.h> -#include "nvim/channel.h" +#include "nvim/channel_defs.h" // IWYU pragma: keep #include "nvim/cmdexpand_defs.h" // IWYU pragma: keep #include "nvim/eval/typval_defs.h" #include "nvim/event/time.h" @@ -13,6 +13,7 @@ #include "nvim/hashtab_defs.h" #include "nvim/macros_defs.h" #include "nvim/mbyte_defs.h" // IWYU pragma: keep +#include "nvim/msgpack_rpc/channel_defs.h" // IWYU pragma: keep #include "nvim/option_defs.h" // IWYU pragma: keep #include "nvim/os/fileio_defs.h" // IWYU pragma: keep #include "nvim/os/stdpaths_defs.h" // IWYU pragma: keep diff --git a/src/nvim/eval/encode.h b/src/nvim/eval/encode.h index 11a0ce3932..fe1b951e3c 100644 --- a/src/nvim/eval/encode.h +++ b/src/nvim/eval/encode.h @@ -1,12 +1,10 @@ #pragma once -#include <msgpack.h> #include <msgpack/pack.h> -#include <stddef.h> #include <string.h> #include "nvim/eval/typval.h" -#include "nvim/eval/typval_defs.h" +#include "nvim/func_attr.h" #include "nvim/garray_defs.h" /// Convert Vimscript value to msgpack string diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 5b6904269d..30a86b1917 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -14,13 +14,11 @@ #include <stdlib.h> #include <string.h> #include <sys/stat.h> -#include <sys/types.h> #include <time.h> #include <uv.h> #include "auto/config.h" #include "nvim/api/private/converter.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/dispatch.h" #include "nvim/api/private/helpers.h" #include "nvim/api/vim.h" @@ -47,7 +45,6 @@ #include "nvim/eval/userfunc.h" #include "nvim/eval/vars.h" #include "nvim/eval/window.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/process.h" diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 069cdced34..42b105b2a2 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -5,7 +5,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/ascii_defs.h" #include "nvim/assert_defs.h" @@ -19,7 +19,6 @@ #include "nvim/eval/userfunc.h" #include "nvim/eval/vars.h" #include "nvim/garray.h" -#include "nvim/garray_defs.h" #include "nvim/gettext.h" #include "nvim/globals.h" #include "nvim/hashtab.h" diff --git a/src/nvim/eval/typval.h b/src/nvim/eval/typval.h index efa6017f4b..0013c8ffe5 100644 --- a/src/nvim/eval/typval.h +++ b/src/nvim/eval/typval.h @@ -8,12 +8,11 @@ #include "nvim/eval/typval_defs.h" // IWYU pragma: export #include "nvim/func_attr.h" -#include "nvim/garray_defs.h" #include "nvim/gettext.h" #include "nvim/hashtab.h" #include "nvim/lib/queue.h" #include "nvim/macros_defs.h" -#include "nvim/mbyte_defs.h" +#include "nvim/mbyte_defs.h" // IWYU pragma: keep #include "nvim/message.h" #include "nvim/types_defs.h" diff --git a/src/nvim/eval/userfunc.h b/src/nvim/eval/userfunc.h index 8050caab2b..270ca7db4e 100644 --- a/src/nvim/eval/userfunc.h +++ b/src/nvim/eval/userfunc.h @@ -4,15 +4,13 @@ #include <stddef.h> #include "nvim/cmdexpand_defs.h" // IWYU pragma: keep -#include "nvim/eval.h" +#include "nvim/eval.h" // IWYU pragma: keep #include "nvim/eval/typval_defs.h" #include "nvim/ex_cmds_defs.h" // IWYU pragma: keep #include "nvim/hashtab_defs.h" // IWYU pragma: keep #include "nvim/pos_defs.h" #include "nvim/types_defs.h" // IWYU pragma: keep -struct funccal_entry; - // From user function to hashitem and back. #define UF2HIKEY(fp) ((fp)->uf_name) #define HIKEY2UF(p) ((ufunc_T *)((p) - offsetof(ufunc_T, uf_name))) diff --git a/src/nvim/eval/vars.c b/src/nvim/eval/vars.c index de2fddb083..8ed76341b0 100644 --- a/src/nvim/eval/vars.c +++ b/src/nvim/eval/vars.c @@ -7,7 +7,7 @@ #include <stdint.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/ascii_defs.h" #include "nvim/autocmd.h" diff --git a/src/nvim/event/defs.h b/src/nvim/event/defs.h index ffea388b9b..e19ad4c970 100644 --- a/src/nvim/event/defs.h +++ b/src/nvim/event/defs.h @@ -20,52 +20,6 @@ typedef struct { typedef struct multiqueue MultiQueue; typedef void (*PutCallback)(MultiQueue *multiq, void *data); -#define multiqueue_put(q, h, ...) \ - do { \ - multiqueue_put_event(q, event_create(h, __VA_ARGS__)); \ - } while (0) - -#define CREATE_EVENT(multiqueue, handler, ...) \ - do { \ - if (multiqueue) { \ - multiqueue_put((multiqueue), (handler), __VA_ARGS__); \ - } else { \ - void *argv[] = { __VA_ARGS__ }; \ - (handler)(argv); \ - } \ - } while (0) - -// Poll for events until a condition or timeout -#define LOOP_PROCESS_EVENTS_UNTIL(loop, multiqueue, timeout, condition) \ - do { \ - int64_t remaining = timeout; \ - uint64_t before = (remaining > 0) ? os_hrtime() : 0; \ - while (!(condition)) { \ - LOOP_PROCESS_EVENTS(loop, multiqueue, remaining); \ - if (remaining == 0) { \ - break; \ - } else if (remaining > 0) { \ - uint64_t now = os_hrtime(); \ - remaining -= (int64_t)((now - before) / 1000000); \ - before = now; \ - if (remaining <= 0) { \ - break; \ - } \ - } \ - } \ - } while (0) - -#define LOOP_PROCESS_EVENTS(loop, multiqueue, timeout) \ - do { \ - if (multiqueue && !multiqueue_empty(multiqueue)) { \ - multiqueue_process_events(multiqueue); \ - } else { \ - loop_poll_events(loop, timeout); \ - } \ - } while (0) - -struct signal_watcher; - typedef struct signal_watcher SignalWatcher; typedef void (*signal_cb)(SignalWatcher *watcher, int signum, void *data); typedef void (*signal_close_cb)(SignalWatcher *watcher, void *data); @@ -78,8 +32,6 @@ struct signal_watcher { MultiQueue *events; }; -struct time_watcher; - typedef struct time_watcher TimeWatcher; typedef void (*time_cb)(TimeWatcher *watcher, void *data); @@ -91,8 +43,6 @@ struct time_watcher { bool blockable; }; -struct wbuffer; - typedef struct wbuffer WBuffer; typedef void (*wbuffer_data_finalizer)(void *data); @@ -102,8 +52,6 @@ struct wbuffer { wbuffer_data_finalizer cb; }; -struct stream; - typedef struct stream Stream; /// Type of function called when the Stream buffer is filled with data /// @@ -151,8 +99,6 @@ struct stream { MultiQueue *events; }; -struct socket_watcher; - #define ADDRESS_MAX_SIZE 256 typedef struct socket_watcher SocketWatcher; diff --git a/src/nvim/event/libuv_process.c b/src/nvim/event/libuv_process.c index 07c059423a..65132ec2b1 100644 --- a/src/nvim/event/libuv_process.c +++ b/src/nvim/event/libuv_process.c @@ -4,8 +4,8 @@ #include <uv.h> #include "nvim/eval/typval.h" -#include "nvim/event/defs.h" #include "nvim/event/libuv_process.h" +#include "nvim/event/loop.h" #include "nvim/event/process.h" #include "nvim/log.h" #include "nvim/os/os.h" diff --git a/src/nvim/event/libuv_process.h b/src/nvim/event/libuv_process.h index e3e2bfeb76..3951bb6802 100644 --- a/src/nvim/event/libuv_process.h +++ b/src/nvim/event/libuv_process.h @@ -2,8 +2,8 @@ #include <uv.h> -#include "nvim/event/loop.h" #include "nvim/event/process.h" +#include "nvim/types_defs.h" typedef struct libuv_process { Process process; diff --git a/src/nvim/event/loop.c b/src/nvim/event/loop.c index a2cb72771c..93948d3eaa 100644 --- a/src/nvim/event/loop.c +++ b/src/nvim/event/loop.c @@ -3,12 +3,12 @@ #include <stdlib.h> #include <uv.h> -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/log.h" #include "nvim/memory.h" #include "nvim/os/time.h" +#include "nvim/types_defs.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/loop.c.generated.h" diff --git a/src/nvim/event/loop.h b/src/nvim/event/loop.h index b567df5456..adcde4c909 100644 --- a/src/nvim/event/loop.h +++ b/src/nvim/event/loop.h @@ -1,19 +1,18 @@ #pragma once #include <stdbool.h> -#include <stdint.h> #include <uv.h> #include "klib/klist.h" -#include "nvim/event/multiqueue.h" -#include "nvim/os/time.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep typedef void *WatcherPtr; #define _NOOP(x) KLIST_INIT(WatcherPtr, WatcherPtr, _NOOP) -typedef struct loop { +struct loop { uv_loop_t uv; MultiQueue *events; MultiQueue *thread_events; @@ -42,7 +41,7 @@ typedef struct loop { uv_mutex_t mutex; int recursive; bool closing; ///< Set to true if loop_close() has been called -} Loop; +}; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/loop.h.generated.h" diff --git a/src/nvim/event/multiqueue.h b/src/nvim/event/multiqueue.h index 26e3bc1c30..a0cebcea1d 100644 --- a/src/nvim/event/multiqueue.h +++ b/src/nvim/event/multiqueue.h @@ -2,8 +2,53 @@ #include <stddef.h> // IWYU pragma: keep -#include "nvim/event/defs.h" // IWYU pragma: keep +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/os/time.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/multiqueue.h.generated.h" #endif + +#define multiqueue_put(q, h, ...) \ + do { \ + multiqueue_put_event(q, event_create(h, __VA_ARGS__)); \ + } while (0) + +#define CREATE_EVENT(multiqueue, handler, ...) \ + do { \ + if (multiqueue) { \ + multiqueue_put((multiqueue), (handler), __VA_ARGS__); \ + } else { \ + void *argv[] = { __VA_ARGS__ }; \ + (handler)(argv); \ + } \ + } while (0) + +// Poll for events until a condition or timeout +#define LOOP_PROCESS_EVENTS_UNTIL(loop, multiqueue, timeout, condition) \ + do { \ + int64_t remaining = timeout; \ + uint64_t before = (remaining > 0) ? os_hrtime() : 0; \ + while (!(condition)) { \ + LOOP_PROCESS_EVENTS(loop, multiqueue, remaining); \ + if (remaining == 0) { \ + break; \ + } else if (remaining > 0) { \ + uint64_t now = os_hrtime(); \ + remaining -= (int64_t)((now - before) / 1000000); \ + before = now; \ + if (remaining <= 0) { \ + break; \ + } \ + } \ + } \ + } while (0) + +#define LOOP_PROCESS_EVENTS(loop, multiqueue, timeout) \ + do { \ + if (multiqueue && !multiqueue_empty(multiqueue)) { \ + multiqueue_process_events(multiqueue); \ + } else { \ + loop_poll_events(loop, timeout); \ + } \ + } while (0) diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h index 234fc815af..a18414a86a 100644 --- a/src/nvim/event/process.h +++ b/src/nvim/event/process.h @@ -5,13 +5,8 @@ #include <stdint.h> #include "nvim/eval/typval_defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/multiqueue.h" -#include "nvim/event/rstream.h" -#include "nvim/event/stream.h" -#include "nvim/event/wstream.h" - -struct process; +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" typedef enum { kProcessTypeUv, diff --git a/src/nvim/event/rstream.c b/src/nvim/event/rstream.c index df97b592e4..c70ddeefb0 100644 --- a/src/nvim/event/rstream.c +++ b/src/nvim/event/rstream.c @@ -2,11 +2,9 @@ #include <stdbool.h> #include <stddef.h> #include <stdint.h> -#include <sys/types.h> #include <uv.h> -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/event/rstream.h" #include "nvim/event/stream.h" #include "nvim/log.h" @@ -14,6 +12,7 @@ #include "nvim/main.h" #include "nvim/os/os_defs.h" #include "nvim/rbuffer.h" +#include "nvim/types_defs.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/rstream.c.generated.h" diff --git a/src/nvim/event/rstream.h b/src/nvim/event/rstream.h index b2a62acf83..3b04e5d435 100644 --- a/src/nvim/event/rstream.h +++ b/src/nvim/event/rstream.h @@ -1,11 +1,7 @@ #pragma once -#include <stdbool.h> -#include <stddef.h> -#include <uv.h> - -#include "nvim/event/loop.h" -#include "nvim/event/stream.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/rstream.h.generated.h" diff --git a/src/nvim/event/signal.c b/src/nvim/event/signal.c index 3a100812cf..57241e79b2 100644 --- a/src/nvim/event/signal.c +++ b/src/nvim/event/signal.c @@ -3,7 +3,9 @@ #include "nvim/event/defs.h" #include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/event/signal.h" +#include "nvim/types_defs.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/signal.c.generated.h" diff --git a/src/nvim/event/signal.h b/src/nvim/event/signal.h index 711797ca71..79784f1226 100644 --- a/src/nvim/event/signal.h +++ b/src/nvim/event/signal.h @@ -1,10 +1,7 @@ #pragma once -#include <uv.h> - -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/multiqueue.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/signal.h.generated.h" diff --git a/src/nvim/event/socket.c b/src/nvim/event/socket.c index 3c7b98bfe7..35db9150b3 100644 --- a/src/nvim/event/socket.c +++ b/src/nvim/event/socket.c @@ -9,6 +9,7 @@ #include "nvim/charset.h" #include "nvim/event/defs.h" #include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/event/socket.h" #include "nvim/event/stream.h" #include "nvim/gettext.h" @@ -18,6 +19,7 @@ #include "nvim/os/fs.h" #include "nvim/os/os.h" #include "nvim/path.h" +#include "nvim/types_defs.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/socket.c.generated.h" diff --git a/src/nvim/event/socket.h b/src/nvim/event/socket.h index 24ba361efa..8dd72234d2 100644 --- a/src/nvim/event/socket.h +++ b/src/nvim/event/socket.h @@ -1,12 +1,7 @@ #pragma once -#include <uv.h> - -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/multiqueue.h" -#include "nvim/event/rstream.h" -#include "nvim/event/wstream.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/socket.h.generated.h" diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c index 886e93931b..0b9ed4f25b 100644 --- a/src/nvim/event/stream.c +++ b/src/nvim/event/stream.c @@ -9,6 +9,7 @@ #include "nvim/event/stream.h" #include "nvim/log.h" #include "nvim/rbuffer.h" +#include "nvim/types_defs.h" #ifdef MSWIN # include "nvim/os/os_win_console.h" #endif diff --git a/src/nvim/event/stream.h b/src/nvim/event/stream.h index 588aab12b0..f79c0ebaa3 100644 --- a/src/nvim/event/stream.h +++ b/src/nvim/event/stream.h @@ -1,13 +1,7 @@ #pragma once -#include <stdbool.h> -#include <stddef.h> -#include <uv.h> - -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/multiqueue.h" -#include "nvim/rbuffer_defs.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/stream.h.generated.h" diff --git a/src/nvim/event/time.c b/src/nvim/event/time.c index de837fd278..861b15f6dd 100644 --- a/src/nvim/event/time.c +++ b/src/nvim/event/time.c @@ -6,6 +6,7 @@ #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/time.h" +#include "nvim/types_defs.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/time.c.generated.h" diff --git a/src/nvim/event/time.h b/src/nvim/event/time.h index 85171f315a..0b684db897 100644 --- a/src/nvim/event/time.h +++ b/src/nvim/event/time.h @@ -1,11 +1,7 @@ #pragma once -#include <stdbool.h> -#include <uv.h> - -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/multiqueue.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/time.h.generated.h" diff --git a/src/nvim/event/wstream.c b/src/nvim/event/wstream.c index 70cc5b6547..406ff1620d 100644 --- a/src/nvim/event/wstream.c +++ b/src/nvim/event/wstream.c @@ -4,11 +4,11 @@ #include <uv.h> #include "nvim/event/defs.h" -#include "nvim/event/loop.h" #include "nvim/event/stream.h" #include "nvim/event/wstream.h" #include "nvim/macros_defs.h" #include "nvim/memory.h" +#include "nvim/types_defs.h" #define DEFAULT_MAXMEM 1024 * 1024 * 2000 diff --git a/src/nvim/event/wstream.h b/src/nvim/event/wstream.h index d61ab644f4..5994e6d700 100644 --- a/src/nvim/event/wstream.h +++ b/src/nvim/event/wstream.h @@ -1,13 +1,7 @@ #pragma once -#include <stdbool.h> -#include <stddef.h> -#include <stdint.h> -#include <uv.h> - -#include "nvim/event/defs.h" -#include "nvim/event/loop.h" -#include "nvim/event/stream.h" +#include "nvim/event/defs.h" // IWYU pragma: export +#include "nvim/types_defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "event/wstream.h.generated.h" diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index c268f47323..70c8dc9019 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "auto/config.h" #include "nvim/arglist.h" @@ -29,7 +29,8 @@ #include "nvim/eval.h" #include "nvim/eval/typval.h" #include "nvim/eval/userfunc.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/ex_cmds.h" #include "nvim/ex_cmds2.h" #include "nvim/ex_cmds_defs.h" diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 974115d803..61e11636ae 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -11,7 +11,6 @@ #include "klib/kvec.h" #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/api/vim.h" #include "nvim/arabic.h" diff --git a/src/nvim/ex_session.c b/src/nvim/ex_session.c index 47f92920eb..82e3fe09d2 100644 --- a/src/nvim/ex_session.c +++ b/src/nvim/ex_session.c @@ -25,6 +25,7 @@ #include "nvim/globals.h" #include "nvim/macros_defs.h" #include "nvim/mapping.h" +#include "nvim/mbyte.h" #include "nvim/memory.h" #include "nvim/message.h" #include "nvim/option.h" diff --git a/src/nvim/fold.c b/src/nvim/fold.c index a268070dec..3b7662e62d 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -11,7 +11,6 @@ #include "klib/kvec.h" #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" @@ -39,6 +38,7 @@ #include "nvim/message.h" #include "nvim/move.h" #include "nvim/ops.h" +#include "nvim/option_defs.h" #include "nvim/option_vars.h" #include "nvim/os/input.h" #include "nvim/plines.h" diff --git a/src/nvim/garray.h b/src/nvim/garray.h index a96deda759..dd355984b3 100644 --- a/src/nvim/garray.h +++ b/src/nvim/garray.h @@ -6,7 +6,6 @@ #include "nvim/garray_defs.h" // IWYU pragma: export #include "nvim/log.h" #include "nvim/memory.h" -#include "nvim/types_defs.h" #define GA_EMPTY(ga_ptr) ((ga_ptr)->ga_len <= 0) diff --git a/src/nvim/generators/gen_api_dispatch.lua b/src/nvim/generators/gen_api_dispatch.lua index 5928999967..791edfff96 100644 --- a/src/nvim/generators/gen_api_dispatch.lua +++ b/src/nvim/generators/gen_api_dispatch.lua @@ -106,7 +106,7 @@ for i = 6, #arg do end headers[#headers + 1] = parts[#parts - 1] .. '/' .. parts[#parts] - local input = io.open(full_path, 'rb') + local input = assert(io.open(full_path, 'rb')) local tmp = c_grammar.grammar:match(input:read('*all')) for j = 1, #tmp do @@ -216,16 +216,16 @@ end -- serialize the API metadata using msgpack and embed into the resulting -- binary for easy querying by clients -local funcs_metadata_output = io.open(funcs_metadata_outputf, 'wb') +local funcs_metadata_output = assert(io.open(funcs_metadata_outputf, 'wb')) local packed = mpack.encode(exported_functions) local dump_bin_array = require('generators.dump_bin_array') dump_bin_array(funcs_metadata_output, 'funcs_metadata', packed) funcs_metadata_output:close() -- start building the dispatch wrapper output -local output = io.open(dispatch_outputf, 'wb') +local output = assert(io.open(dispatch_outputf, 'wb')) -local keysets_defs = io.open(keysets_outputf, 'wb') +local keysets_defs = assert(io.open(keysets_outputf, 'wb')) -- =========================================================================== -- NEW API FILES MUST GO HERE. @@ -257,6 +257,8 @@ output:write([[ ]]) +keysets_defs:write('// IWYU pragma: private, include "nvim/api/private/dispatch.h"\n\n') + for _, k in ipairs(keysets) do local c_name = {} @@ -633,7 +635,7 @@ output:write(hashfun) output:close() functions.keysets = keysets -local mpack_output = io.open(mpack_outputf, 'wb') +local mpack_output = assert(io.open(mpack_outputf, 'wb')) mpack_output:write(mpack.encode(functions)) mpack_output:close() @@ -653,7 +655,7 @@ local function write_shifted_output(_, str) end -- start building lua output -output = io.open(lua_c_bindings_outputf, 'wb') +output = assert(io.open(lua_c_bindings_outputf, 'wb')) output:write([[ #include <lua.h> diff --git a/src/nvim/generators/gen_declarations.lua b/src/nvim/generators/gen_declarations.lua index 9fd2750f52..5d1e586fe6 100644 --- a/src/nvim/generators/gen_declarations.lua +++ b/src/nvim/generators/gen_declarations.lua @@ -207,6 +207,22 @@ if fname:find('.*/src/nvim/.*%.c$') then // IWYU pragma: private, include "%s" ]]):format(header_fname:gsub('.*/src/nvim/', 'nvim/')) .. non_static end +elseif non_static_fname:find('/include/api/private/dispatch_wrappers%.h%.generated%.h$') then + non_static = [[ +// IWYU pragma: private, include "nvim/api/private/dispatch.h" +]] .. non_static +elseif non_static_fname:find('/include/ui_events_call%.h%.generated%.h$') then + non_static = [[ +// IWYU pragma: private, include "nvim/ui.h" +]] .. non_static +elseif non_static_fname:find('/include/ui_events_client%.h%.generated%.h$') then + non_static = [[ +// IWYU pragma: private, include "nvim/ui_client.h" +]] .. non_static +elseif non_static_fname:find('/include/ui_events_remote%.h%.generated%.h$') then + non_static = [[ +// IWYU pragma: private, include "nvim/api/ui.h" +]] .. non_static end local filepattern = '^#%a* (%d+) "([^"]-)/?([^"/]+)"' diff --git a/src/nvim/generators/gen_options_enum.lua b/src/nvim/generators/gen_options_enum.lua index c3fe9baae6..9a3953fcbc 100644 --- a/src/nvim/generators/gen_options_enum.lua +++ b/src/nvim/generators/gen_options_enum.lua @@ -1,5 +1,6 @@ -- Generates option index enum and map of option name to option index. -- Handles option full name, short name and aliases. +-- Also generates BV_ and WV_ enum constants. local options_enum_file = arg[1] local options_map_file = arg[2] @@ -16,6 +17,9 @@ local function map_w(s) options_map_fd:write(s .. '\n') end +enum_w('// IWYU pragma: private, include "nvim/option_defs.h"') +enum_w('') + --- @param s string --- @return string local lowercase_to_titlecase = function(s) @@ -24,6 +28,55 @@ end --- @type vim.option_meta[] local options = require('options').options + +-- Generate BV_ enum constants. +enum_w('/// "indir" values for buffer-local options.') +enum_w('/// These need to be defined globally, so that the BV_COUNT can be used with') +enum_w('/// b_p_script_stx[].') +enum_w('enum {') + +local bv_val = 0 + +for _, o in ipairs(options) do + assert(#o.scope == 1 or #o.scope == 2) + assert(#o.scope == 1 or o.scope[1] == 'global') + local min_scope = o.scope[#o.scope] + if min_scope == 'buffer' then + local varname = o.pv_name or o.varname or ('p_' .. (o.abbreviation or o.full_name)) + local bv_name = 'BV_' .. varname:sub(3):upper() + enum_w((' %s = %u,'):format(bv_name, bv_val)) + bv_val = bv_val + 1 + end +end + +enum_w((' BV_COUNT = %u, ///< must be the last one'):format(bv_val)) +enum_w('};') +enum_w('') + +-- Generate WV_ enum constants. +enum_w('/// "indir" values for window-local options.') +enum_w('/// These need to be defined globally, so that the WV_COUNT can be used in the') +enum_w('/// window structure.') +enum_w('enum {') + +local wv_val = 0 + +for _, o in ipairs(options) do + assert(#o.scope == 1 or #o.scope == 2) + assert(#o.scope == 1 or o.scope[1] == 'global') + local min_scope = o.scope[#o.scope] + if min_scope == 'window' then + local varname = o.pv_name or o.varname or ('p_' .. (o.abbreviation or o.full_name)) + local wv_name = 'WV_' .. varname:sub(3):upper() + enum_w((' %s = %u,'):format(wv_name, wv_val)) + wv_val = wv_val + 1 + end +end + +enum_w((' WV_COUNT = %u, ///< must be the last one'):format(wv_val)) +enum_w('};') +enum_w('') + --- @type { [string]: string } local option_index = {} diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 305b18fc28..5d6a220ec7 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -11,7 +11,6 @@ #include <stdlib.h> #include <string.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" @@ -22,6 +21,7 @@ #include "nvim/eval.h" #include "nvim/eval/typval.h" #include "nvim/eval/typval_defs.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/ex_cmds.h" #include "nvim/ex_docmd.h" @@ -34,7 +34,6 @@ #include "nvim/insexpand.h" #include "nvim/keycodes.h" #include "nvim/lua/executor.h" -#include "nvim/macros_defs.h" #include "nvim/main.h" #include "nvim/mapping.h" #include "nvim/mbyte.h" diff --git a/src/nvim/globals.h b/src/nvim/globals.h index e153b03bc1..3097853bea 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -11,10 +11,9 @@ #include "nvim/getchar_defs.h" #include "nvim/iconv_defs.h" #include "nvim/macros_defs.h" -#include "nvim/mbyte.h" #include "nvim/menu_defs.h" #include "nvim/os/os_defs.h" -#include "nvim/runtime.h" +#include "nvim/runtime_defs.h" #include "nvim/state_defs.h" #include "nvim/syntax_defs.h" #include "nvim/types_defs.h" diff --git a/src/nvim/grid.h b/src/nvim/grid.h index 9d8e395dae..7398ae7847 100644 --- a/src/nvim/grid.h +++ b/src/nvim/grid.h @@ -2,13 +2,12 @@ #include <stdbool.h> #include <stddef.h> // IWYU pragma: keep -#include <string.h> -#include "nvim/buffer_defs.h" #include "nvim/grid_defs.h" // IWYU pragma: export #include "nvim/macros_defs.h" #include "nvim/mbyte.h" #include "nvim/pos_defs.h" +#include "nvim/types_defs.h" /// By default, all windows are drawn on a single rectangular grid, represented by /// this ScreenGrid instance. In multigrid mode each window will have its own diff --git a/src/nvim/highlight.h b/src/nvim/highlight.h index ea8a663a9f..228d96ceb2 100644 --- a/src/nvim/highlight.h +++ b/src/nvim/highlight.h @@ -2,7 +2,7 @@ #include <stdbool.h> -#include "nvim/api/keysets_defs.h" +#include "nvim/api/keysets_defs.h" // IWYU pragma: keep #include "nvim/api/private/defs.h" // IWYU pragma: keep #include "nvim/buffer_defs.h" // IWYU pragma: keep #include "nvim/highlight_defs.h" // IWYU pragma: export diff --git a/src/nvim/input.c b/src/nvim/input.c index a2a9692cb4..af66cfdcba 100644 --- a/src/nvim/input.c +++ b/src/nvim/input.c @@ -7,7 +7,6 @@ #include <string.h> #include "nvim/ascii_defs.h" -#include "nvim/event/defs.h" #include "nvim/getchar.h" #include "nvim/gettext.h" #include "nvim/globals.h" diff --git a/src/nvim/input.h b/src/nvim/input.h index 3d948fa4ca..8741dafba4 100644 --- a/src/nvim/input.h +++ b/src/nvim/input.h @@ -1,6 +1,6 @@ #pragma once -#include "nvim/event/multiqueue.h" // IWYU pragma: keep +#include "nvim/event/defs.h" // IWYU pragma: keep #ifdef INCLUDE_GENERATED_DECLARATIONS # include "input.h.generated.h" diff --git a/src/nvim/keycodes.c b/src/nvim/keycodes.c index f8475b3e22..301c3846e7 100644 --- a/src/nvim/keycodes.c +++ b/src/nvim/keycodes.c @@ -4,7 +4,7 @@ #include <stdbool.h> #include <stdio.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/ascii_defs.h" #include "nvim/charset.h" diff --git a/src/nvim/keycodes.h b/src/nvim/keycodes.h index db9ef38cc3..fafe205f4d 100644 --- a/src/nvim/keycodes.h +++ b/src/nvim/keycodes.h @@ -3,9 +3,8 @@ #include <stddef.h> #include "nvim/ascii_defs.h" -#include "nvim/option_defs.h" +#include "nvim/eval/typval_defs.h" // IWYU pragma: keep #include "nvim/option_vars.h" -#include "nvim/strings.h" // Keycode definitions for special keys. // diff --git a/src/nvim/log.h b/src/nvim/log.h index c6a033c634..1fb15e3503 100644 --- a/src/nvim/log.h +++ b/src/nvim/log.h @@ -1,7 +1,9 @@ #pragma once +#include <stdbool.h> +#include <stdio.h> + #include "auto/config.h" -#include "nvim/log_defs.h" // IWYU pragma: export #include "nvim/macros_defs.h" // USDT probes. Example invocation: @@ -20,6 +22,35 @@ #endif // uncrustify:on +#define LOGLVL_DBG 1 +#define LOGLVL_INF 2 +#define LOGLVL_WRN 3 +#define LOGLVL_ERR 4 + +#define LOG(level, ...) logmsg((level), NULL, __func__, __LINE__, true, __VA_ARGS__) + +#ifdef NVIM_LOG_DEBUG +# define DLOG(...) logmsg(LOGLVL_DBG, NULL, __func__, __LINE__, true, __VA_ARGS__) +# define DLOGN(...) logmsg(LOGLVL_DBG, NULL, __func__, __LINE__, false, __VA_ARGS__) +# define ILOG(...) logmsg(LOGLVL_INF, NULL, __func__, __LINE__, true, __VA_ARGS__) +# define ILOGN(...) logmsg(LOGLVL_INF, NULL, __func__, __LINE__, false, __VA_ARGS__) +#else +# define DLOG(...) +# define DLOGN(...) +# define ILOG(...) +# define ILOGN(...) +#endif + +#define WLOG(...) logmsg(LOGLVL_WRN, NULL, __func__, __LINE__, true, __VA_ARGS__) +#define WLOGN(...) logmsg(LOGLVL_WRN, NULL, __func__, __LINE__, false, __VA_ARGS__) +#define ELOG(...) logmsg(LOGLVL_ERR, NULL, __func__, __LINE__, true, __VA_ARGS__) +#define ELOGN(...) logmsg(LOGLVL_ERR, NULL, __func__, __LINE__, false, __VA_ARGS__) + +#ifdef HAVE_EXECINFO_BACKTRACE +# define LOG_CALLSTACK() log_callstack(__func__, __LINE__) +# define LOG_CALLSTACK_TO_FILE(fp) log_callstack_to_file(fp, __func__, __LINE__) +#endif + #ifdef INCLUDE_GENERATED_DECLARATIONS # include "log.h.generated.h" #endif diff --git a/src/nvim/log_defs.h b/src/nvim/log_defs.h deleted file mode 100644 index 1b666720fc..0000000000 --- a/src/nvim/log_defs.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include <stdio.h> - -#include "auto/config.h" -#include "nvim/macros_defs.h" - -#define LOGLVL_DBG 1 -#define LOGLVL_INF 2 -#define LOGLVL_WRN 3 -#define LOGLVL_ERR 4 - -#define LOG(level, ...) logmsg((level), NULL, __func__, __LINE__, true, __VA_ARGS__) - -#ifdef NVIM_LOG_DEBUG -# define DLOG(...) logmsg(LOGLVL_DBG, NULL, __func__, __LINE__, true, __VA_ARGS__) -# define DLOGN(...) logmsg(LOGLVL_DBG, NULL, __func__, __LINE__, false, __VA_ARGS__) -# define ILOG(...) logmsg(LOGLVL_INF, NULL, __func__, __LINE__, true, __VA_ARGS__) -# define ILOGN(...) logmsg(LOGLVL_INF, NULL, __func__, __LINE__, false, __VA_ARGS__) -#else -# define DLOG(...) -# define DLOGN(...) -# define ILOG(...) -# define ILOGN(...) -#endif - -#define WLOG(...) logmsg(LOGLVL_WRN, NULL, __func__, __LINE__, true, __VA_ARGS__) -#define WLOGN(...) logmsg(LOGLVL_WRN, NULL, __func__, __LINE__, false, __VA_ARGS__) -#define ELOG(...) logmsg(LOGLVL_ERR, NULL, __func__, __LINE__, true, __VA_ARGS__) -#define ELOGN(...) logmsg(LOGLVL_ERR, NULL, __func__, __LINE__, false, __VA_ARGS__) - -#ifdef HAVE_EXECINFO_BACKTRACE -# define LOG_CALLSTACK() log_callstack(__func__, __LINE__) -# define LOG_CALLSTACK_TO_FILE(fp) log_callstack_to_file(fp, __func__, __LINE__) -#endif diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index 43a6a12fda..3e7cdd002e 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -13,7 +13,6 @@ #include "klib/kvec.h" #include "luv/luv.h" #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" @@ -24,10 +23,9 @@ #include "nvim/eval.h" #include "nvim/eval/funcs.h" #include "nvim/eval/typval.h" -#include "nvim/eval/typval_defs.h" #include "nvim/eval/userfunc.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/event/time.h" #include "nvim/ex_cmds.h" #include "nvim/ex_cmds_defs.h" diff --git a/src/nvim/lua/executor.h b/src/nvim/lua/executor.h index b38faddbb3..16fa5f8bc0 100644 --- a/src/nvim/lua/executor.h +++ b/src/nvim/lua/executor.h @@ -4,18 +4,14 @@ #include <lua.h> #include <stdbool.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" -#include "nvim/assert_defs.h" -#include "nvim/cmdexpand_defs.h" -#include "nvim/eval/typval_defs.h" -#include "nvim/ex_cmds_defs.h" +#include "nvim/cmdexpand_defs.h" // IWYU pragma: keep +#include "nvim/ex_cmds_defs.h" // IWYU pragma: keep #include "nvim/func_attr.h" -#include "nvim/lua/converter.h" #include "nvim/macros_defs.h" #include "nvim/map_defs.h" #include "nvim/types_defs.h" -#include "nvim/usercmd.h" +#include "nvim/usercmd.h" // IWYU pragma: keep // Generated by msgpack-gen.lua void nlua_add_api_functions(lua_State *lstate) REAL_FATTR_NONNULL_ALL; diff --git a/src/nvim/lua/stdlib.c b/src/nvim/lua/stdlib.c index 4b7d2dab21..db710457c3 100644 --- a/src/nvim/lua/stdlib.c +++ b/src/nvim/lua/stdlib.c @@ -6,7 +6,7 @@ #include <stddef.h> #include <stdint.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #ifdef NVIM_VENDOR_BIT # include "bit.h" @@ -14,7 +14,6 @@ #include "cjson/lua_cjson.h" #include "mpack/lmpack.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" diff --git a/src/nvim/lua/xdiff.c b/src/nvim/lua/xdiff.c index 5285c1187d..e21bca170f 100644 --- a/src/nvim/lua/xdiff.c +++ b/src/nvim/lua/xdiff.c @@ -5,7 +5,6 @@ #include <string.h> #include "luaconf.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/linematch.h" #include "nvim/lua/converter.h" diff --git a/src/nvim/macros_defs.h b/src/nvim/macros_defs.h index a7af2f91c3..a0dcafab95 100644 --- a/src/nvim/macros_defs.h +++ b/src/nvim/macros_defs.h @@ -29,9 +29,6 @@ /// @return `s, sizeof(s) - 1` #define S_LEN(s) (s), (sizeof(s) - 1) -/// LINEEMPTY() - return true if the line is empty -#define LINEEMPTY(p) (*ml_get(p) == NUL) - // toupper() and tolower() that use the current locale. // Careful: Only call TOUPPER_LOC() and TOLOWER_LOC() with a character in the // range 0 - 255. toupper()/tolower() on some systems can't handle others. @@ -54,48 +51,12 @@ // Returns empty string if it is NULL. #define EMPTY_IF_NULL(x) ((x) ? (x) : "") -/// Adjust chars in a language according to 'langmap' option. -/// NOTE that there is no noticeable overhead if 'langmap' is not set. -/// When set the overhead for characters < 256 is small. -/// Don't apply 'langmap' if the character comes from the Stuff buffer or from a -/// mapping and the langnoremap option was set. -/// The do-while is just to ignore a ';' after the macro. -#define LANGMAP_ADJUST(c, condition) \ - do { \ - if (*p_langmap \ - && (condition) \ - && (p_lrm || (vgetc_busy ? typebuf_maplen() == 0 : KeyTyped)) \ - && !KeyStuffed \ - && (c) >= 0) \ - { \ - if ((c) < 256) \ - c = langmap_mapchar[c]; \ - else \ - c = langmap_adjust_mb(c); \ - } \ - } while (0) - #define WRITEBIN "wb" // no CR-LF translation #define READBIN "rb" #define APPENDBIN "ab" #define REPLACE_NORMAL(s) (((s)& REPLACE_FLAG) && !((s)& VREPLACE_FLAG)) -// MB_PTR_ADV(): advance a pointer to the next character, taking care of -// multi-byte characters if needed. Skip over composing chars. -#define MB_PTR_ADV(p) (p += utfc_ptr2len((char *)p)) - -// Advance multi-byte pointer, do not skip over composing chars. -#define MB_CPTR_ADV(p) (p += utf_ptr2len((char *)p)) - -// MB_PTR_BACK(): backup a pointer to the previous character, taking care of -// multi-byte characters if needed. Only use with "p" > "s" ! -#define MB_PTR_BACK(s, p) \ - (p -= utf_head_off((char *)(s), (char *)(p) - 1) + 1) - -// MB_CHAR2BYTES(): convert character to bytes and advance pointer to bytes -#define MB_CHAR2BYTES(c, b) ((b) += utf_char2bytes((c), ((char *)b))) - #define RESET_BINDING(wp) \ do { \ (wp)->w_p_scb = false; \ diff --git a/src/nvim/main.c b/src/nvim/main.c index bf0b8d33b2..dfa7c685a0 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -19,7 +19,6 @@ #include "auto/config.h" // IWYU pragma: keep #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/api/ui.h" #include "nvim/arglist.h" diff --git a/src/nvim/main.h b/src/nvim/main.h index 6aeb62712a..dedfadf270 100644 --- a/src/nvim/main.h +++ b/src/nvim/main.h @@ -3,6 +3,7 @@ #include <stdbool.h> #include "nvim/event/loop.h" +#include "nvim/types_defs.h" // Maximum number of commands from + or -c arguments. #define MAX_ARG_CMDS 10 diff --git a/src/nvim/map_glyph_cache.c b/src/nvim/map_glyph_cache.c index 5efa87b960..091b4f7990 100644 --- a/src/nvim/map_glyph_cache.c +++ b/src/nvim/map_glyph_cache.c @@ -11,7 +11,6 @@ #include <stdlib.h> #include <string.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/macros_defs.h" diff --git a/src/nvim/mapping.h b/src/nvim/mapping.h index ffe7ab4290..3baa52ee77 100644 --- a/src/nvim/mapping.h +++ b/src/nvim/mapping.h @@ -13,6 +13,10 @@ #include "nvim/regexp_defs.h" // IWYU pragma: keep #include "nvim/types_defs.h" // IWYU pragma: keep +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "mapping.h.generated.h" +#endif + /// Used for the first argument of do_map() enum { MAPTYPE_MAP = 0, @@ -20,6 +24,23 @@ enum { MAPTYPE_NOREMAP = 2, }; -#ifdef INCLUDE_GENERATED_DECLARATIONS -# include "mapping.h.generated.h" -#endif +/// Adjust chars in a language according to 'langmap' option. +/// NOTE that there is no noticeable overhead if 'langmap' is not set. +/// When set the overhead for characters < 256 is small. +/// Don't apply 'langmap' if the character comes from the Stuff buffer or from a +/// mapping and the langnoremap option was set. +/// The do-while is just to ignore a ';' after the macro. +#define LANGMAP_ADJUST(c, condition) \ + do { \ + if (*p_langmap \ + && (condition) \ + && (p_lrm || (vgetc_busy ? typebuf_maplen() == 0 : KeyTyped)) \ + && !KeyStuffed \ + && (c) >= 0) \ + { \ + if ((c) < 256) \ + c = langmap_mapchar[c]; \ + else \ + c = langmap_adjust_mb(c); \ + } \ + } while (0) diff --git a/src/nvim/mark.h b/src/nvim/mark.h index ec6862b38f..2c1bf7c73c 100644 --- a/src/nvim/mark.h +++ b/src/nvim/mark.h @@ -1,15 +1,21 @@ #pragma once +#include <locale.h> + #include "nvim/ascii_defs.h" #include "nvim/ex_cmds_defs.h" // IWYU pragma: keep #include "nvim/extmark_defs.h" // IWYU pragma: keep #include "nvim/func_attr.h" #include "nvim/macros_defs.h" #include "nvim/mark_defs.h" // IWYU pragma: export +#include "nvim/os/time.h" + +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "mark.h.generated.h" +#endif static inline int mark_global_index(char name) REAL_FATTR_CONST; - /// Convert mark name to the offset static inline int mark_global_index(const char name) { @@ -22,7 +28,6 @@ static inline int mark_global_index(const char name) static inline int mark_local_index(char name) REAL_FATTR_CONST; - /// Convert local mark name to the offset static inline int mark_local_index(const char name) { @@ -40,6 +45,37 @@ static inline int mark_local_index(const char name) /// Global marks (marks with file number or name) EXTERN xfmark_T namedfm[NGLOBALMARKS] INIT( = { 0 }); -#ifdef INCLUDE_GENERATED_DECLARATIONS -# include "mark.h.generated.h" -#endif +#define SET_FMARK(fmarkp_, mark_, fnum_, view_) \ + do { \ + fmark_T *const fmarkp__ = fmarkp_; \ + fmarkp__->mark = mark_; \ + fmarkp__->fnum = fnum_; \ + fmarkp__->timestamp = os_time(); \ + fmarkp__->view = view_; \ + fmarkp__->additional_data = NULL; \ + } while (0) + +/// Free and set fmark using given value +#define RESET_FMARK(fmarkp_, mark_, fnum_, view_) \ + do { \ + fmark_T *const fmarkp___ = fmarkp_; \ + free_fmark(*fmarkp___); \ + SET_FMARK(fmarkp___, mark_, fnum_, view_); \ + } while (0) + +/// Set given extended mark (regular mark + file name) +#define SET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ + do { \ + xfmark_T *const xfmarkp__ = xfmarkp_; \ + xfmarkp__->fname = fname_; \ + SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ + } while (0) + +/// Free and set given extended mark (regular mark + file name) +#define RESET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ + do { \ + xfmark_T *const xfmarkp__ = xfmarkp_; \ + free_xfmark(*xfmarkp__); \ + xfmarkp__->fname = fname_; \ + SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ + } while (0) diff --git a/src/nvim/mark_defs.h b/src/nvim/mark_defs.h index a98a741363..5028781827 100644 --- a/src/nvim/mark_defs.h +++ b/src/nvim/mark_defs.h @@ -86,41 +86,6 @@ typedef struct xfilemark { #define INIT_XFMARK { INIT_FMARK, NULL } /// Set fmark using given value -#define SET_FMARK(fmarkp_, mark_, fnum_, view_) \ - do { \ - fmark_T *const fmarkp__ = fmarkp_; \ - fmarkp__->mark = mark_; \ - fmarkp__->fnum = fnum_; \ - fmarkp__->timestamp = os_time(); \ - fmarkp__->view = view_; \ - fmarkp__->additional_data = NULL; \ - } while (0) - -/// Free and set fmark using given value -#define RESET_FMARK(fmarkp_, mark_, fnum_, view_) \ - do { \ - fmark_T *const fmarkp___ = fmarkp_; \ - free_fmark(*fmarkp___); \ - SET_FMARK(fmarkp___, mark_, fnum_, view_); \ - } while (0) - -/// Set given extended mark (regular mark + file name) -#define SET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ - do { \ - xfmark_T *const xfmarkp__ = xfmarkp_; \ - xfmarkp__->fname = fname_; \ - SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ - } while (0) - -/// Free and set given extended mark (regular mark + file name) -#define RESET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ - do { \ - xfmark_T *const xfmarkp__ = xfmarkp_; \ - free_xfmark(*xfmarkp__); \ - xfmarkp__->fname = fname_; \ - SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ - } while (0) - static inline bool lt(pos_T a, pos_T b) REAL_FATTR_CONST REAL_FATTR_ALWAYS_INLINE; /// Return true if position a is before (less than) position b. diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c index 958970bba1..fb0d0502ee 100644 --- a/src/nvim/marktree.c +++ b/src/nvim/marktree.c @@ -47,7 +47,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "klib/kvec.h" #include "nvim/macros_defs.h" diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index a992bf3cd8..b788d7aa6f 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -32,7 +32,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include <wctype.h> #include "auto/config.h" diff --git a/src/nvim/mbyte.h b/src/nvim/mbyte.h index bae60185e2..96f8b24983 100644 --- a/src/nvim/mbyte.h +++ b/src/nvim/mbyte.h @@ -4,6 +4,7 @@ #include <stdint.h> #include <string.h> #include <sys/types.h> // IWYU pragma: keep +#include <uv.h> // IWYU pragma: keep #include "nvim/cmdexpand_defs.h" // IWYU pragma: keep #include "nvim/eval/typval_defs.h" // IWYU pragma: keep @@ -11,6 +12,10 @@ #include "nvim/mbyte_defs.h" // IWYU pragma: export #include "nvim/types_defs.h" // IWYU pragma: keep +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "mbyte.h.generated.h" +#endif + // Return byte length of character that starts with byte "b". // Returns 1 for a single-byte character. // MB_BYTE2LEN_CHECK() can be used to count a special key as one byte. @@ -22,13 +27,8 @@ extern const uint8_t utf8len_tab_zero[256]; extern const uint8_t utf8len_tab[256]; -#ifdef INCLUDE_GENERATED_DECLARATIONS -# include "mbyte.h.generated.h" -#endif - static inline int mb_strcmp_ic(bool ic, const char *s1, const char *s2) REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE REAL_FATTR_WARN_UNUSED_RESULT; - /// Compare strings /// /// @param[in] ic True if case is to be ignored. @@ -38,3 +38,24 @@ static inline int mb_strcmp_ic(bool ic, const char *s1, const char *s2) { return (ic ? mb_stricmp(s1, s2) : strcmp(s1, s2)); } + +// Use our own character-case definitions, because the current locale may +// differ from what the .spl file uses. +// These must not be called with negative number! +// Multi-byte implementation. For Unicode we can call utf_*(), but don't do +// that for ASCII, because we don't want to use 'casemap' here. Otherwise use +// the "w" library function for characters above 255. +#define SPELL_TOFOLD(c) ((c) >= 128 ? utf_fold(c) : (int)spelltab.st_fold[c]) + +#define SPELL_TOUPPER(c) ((c) >= 128 ? mb_toupper(c) : (int)spelltab.st_upper[c]) + +#define SPELL_ISUPPER(c) ((c) >= 128 ? mb_isupper(c) : spelltab.st_isu[c]) + +// MB_PTR_ADV(): advance a pointer to the next character, taking care of +// multi-byte characters if needed. Skip over composing chars. +#define MB_PTR_ADV(p) (p += utfc_ptr2len((char *)p)) + +// MB_PTR_BACK(): backup a pointer to the previous character, taking care of +// multi-byte characters if needed. Only use with "p" > "s" ! +#define MB_PTR_BACK(s, p) \ + (p -= utf_head_off((char *)(s), (char *)(p) - 1) + 1) diff --git a/src/nvim/memline.c b/src/nvim/memline.c index 63f3541b3c..8f6b78d2d5 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -39,7 +39,6 @@ #include <stddef.h> #include <stdio.h> #include <string.h> -#include <sys/types.h> #include <time.h> #include <uv.h> diff --git a/src/nvim/memline.h b/src/nvim/memline.h index 808d97783e..8e7f3a565c 100644 --- a/src/nvim/memline.h +++ b/src/nvim/memline.h @@ -1,5 +1,6 @@ #pragma once +#include "nvim/ascii_defs.h" #include "nvim/eval/typval_defs.h" // IWYU pragma: keep #include "nvim/memline_defs.h" // IWYU pragma: export #include "nvim/pos_defs.h" // IWYU pragma: keep @@ -8,3 +9,6 @@ #ifdef INCLUDE_GENERATED_DECLARATIONS # include "memline.h.generated.h" #endif + +/// LINEEMPTY() - return true if the line is empty +#define LINEEMPTY(p) (*ml_get(p) == NUL) diff --git a/src/nvim/message.c b/src/nvim/message.c index 38952d2cf6..895fba1372 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -8,10 +8,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "klib/kvec.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" @@ -20,7 +19,6 @@ #include "nvim/drawscreen.h" #include "nvim/eval.h" #include "nvim/eval/typval.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/ex_cmds_defs.h" diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index c9139f5f93..f1b7f8026e 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -15,6 +15,7 @@ #include "nvim/api/ui.h" #include "nvim/channel.h" #include "nvim/event/defs.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/process.h" #include "nvim/event/rstream.h" diff --git a/src/nvim/msgpack_rpc/helpers.h b/src/nvim/msgpack_rpc/helpers.h index dd2096f305..6344d8c567 100644 --- a/src/nvim/msgpack_rpc/helpers.h +++ b/src/nvim/msgpack_rpc/helpers.h @@ -1,11 +1,8 @@ #pragma once -#include <msgpack.h> -#include <stdbool.h> -#include <stdint.h> +#include <msgpack.h> // IWYU pragma: keep #include "nvim/api/private/defs.h" -#include "nvim/event/wstream.h" /// Value by which objects represented as EXT type are shifted /// diff --git a/src/nvim/msgpack_rpc/server.c b/src/nvim/msgpack_rpc/server.c index 0cc249b2b8..e60c1b88a5 100644 --- a/src/nvim/msgpack_rpc/server.c +++ b/src/nvim/msgpack_rpc/server.c @@ -6,7 +6,6 @@ #include "nvim/channel.h" #include "nvim/eval.h" -#include "nvim/event/defs.h" #include "nvim/event/socket.h" #include "nvim/garray.h" #include "nvim/log.h" diff --git a/src/nvim/msgpack_rpc/unpacker.h b/src/nvim/msgpack_rpc/unpacker.h index 53af29761e..d43dc2e997 100644 --- a/src/nvim/msgpack_rpc/unpacker.h +++ b/src/nvim/msgpack_rpc/unpacker.h @@ -1,17 +1,14 @@ #pragma once #include <inttypes.h> -#include <stdbool.h> #include <string.h> #include "mpack/mpack_core.h" #include "mpack/object.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/dispatch.h" -#include "nvim/api/private/helpers.h" #include "nvim/grid_defs.h" #include "nvim/memory_defs.h" -#include "nvim/msgpack_rpc/channel_defs.h" +#include "nvim/msgpack_rpc/channel_defs.h" // IWYU pragma: keep #include "nvim/types_defs.h" #include "nvim/ui_client.h" diff --git a/src/nvim/ops.c b/src/nvim/ops.c index ece7ccc960..d0a6b2c074 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/api/private/defs.h" #include "nvim/ascii_defs.h" diff --git a/src/nvim/option.c b/src/nvim/option.c index 49a8c468d6..4969ac7f1d 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -2,7 +2,6 @@ // - Put it in options.lua // - For a global option: Add a variable for it in option_vars.h. // - For a buffer or window local option: -// - Add a BV_XX or WV_XX entry to option_vars.h // - Add a variable to the window or buffer struct in buffer_defs.h. // - For a window option, add some code to copy_winopt(). // - For a window string option, add code to check_winopt() diff --git a/src/nvim/option.h b/src/nvim/option.h index 2e4186fe7f..9dbb176c94 100644 --- a/src/nvim/option.h +++ b/src/nvim/option.h @@ -1,14 +1,17 @@ #pragma once #include <assert.h> +#include <stdbool.h> #include <stdint.h> #include <stdio.h> // IWYU pragma: keep #include "nvim/api/private/defs.h" // IWYU pragma: keep #include "nvim/api/private/helpers.h" +#include "nvim/assert_defs.h" #include "nvim/cmdexpand_defs.h" // IWYU pragma: keep #include "nvim/eval/typval_defs.h" #include "nvim/ex_cmds_defs.h" // IWYU pragma: keep +#include "nvim/macros_defs.h" #include "nvim/math.h" #include "nvim/option_defs.h" // IWYU pragma: export #include "nvim/types_defs.h" // IWYU pragma: keep diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 62c02989a2..72fb5a92fc 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -131,5 +131,5 @@ typedef enum { } OptReqScope; #ifdef INCLUDE_GENERATED_DECLARATIONS -# include "options_enum.generated.h" // IWYU pragma: export +# include "options_enum.generated.h" #endif diff --git a/src/nvim/option_vars.h b/src/nvim/option_vars.h index cbdec2e0db..c3ab034c4c 100644 --- a/src/nvim/option_vars.h +++ b/src/nvim/option_vars.h @@ -779,156 +779,6 @@ EXTERN int p_wb; ///< 'writebackup' EXTERN OptInt p_wd; ///< 'writedelay' EXTERN int p_cdh; ///< 'cdhome' -/// "indir" values for buffer-local options. -/// These need to be defined globally, so that the BV_COUNT can be used with -/// b_p_script_stx[]. -enum { - BV_AI = 0, - BV_AR, - BV_BH, - BV_BKC, - BV_BT, - BV_EFM, - BV_GP, - BV_MP, - BV_BIN, - BV_BL, - BV_BOMB, - BV_CHANNEL, - BV_CI, - BV_CIN, - BV_CINK, - BV_CINO, - BV_CINW, - BV_CINSD, - BV_CM, - BV_CMS, - BV_COM, - BV_CPT, - BV_DICT, - BV_TSR, - BV_CSL, - BV_CFU, - BV_DEF, - BV_INC, - BV_EOF, - BV_EOL, - BV_FIXEOL, - BV_EP, - BV_ET, - BV_FENC, - BV_FP, - BV_BEXPR, - BV_FEX, - BV_FF, - BV_FLP, - BV_FO, - BV_FT, - BV_IMI, - BV_IMS, - BV_INDE, - BV_INDK, - BV_INEX, - BV_INF, - BV_ISK, - BV_KMAP, - BV_KP, - BV_LISP, - BV_LOP, - BV_LW, - BV_MENC, - BV_MA, - BV_ML, - BV_MOD, - BV_MPS, - BV_NF, - BV_OFU, - BV_PATH, - BV_PI, - BV_QE, - BV_RO, - BV_SCBK, - BV_SI, - BV_SMC, - BV_SYN, - BV_SPC, - BV_SPF, - BV_SPL, - BV_SPO, - BV_STS, - BV_SUA, - BV_SW, - BV_SWF, - BV_TFU, - BV_TSRFU, - BV_TAGS, - BV_TC, - BV_TS, - BV_TW, - BV_TX, - BV_UDF, - BV_UL, - BV_WM, - BV_VSTS, - BV_VTS, - BV_COUNT, // must be the last one -}; - -/// "indir" values for window-local options. -/// These need to be defined globally, so that the WV_COUNT can be used in the -/// window structure. -enum { - WV_LIST = 0, - WV_ARAB, - WV_COCU, - WV_COLE, - WV_CRBIND, - WV_BRI, - WV_BRIOPT, - WV_DIFF, - WV_FDC, - WV_FEN, - WV_FDI, - WV_FDL, - WV_FDM, - WV_FML, - WV_FDN, - WV_FDE, - WV_FDT, - WV_FMR, - WV_LBR, - WV_NU, - WV_RNU, - WV_VE, - WV_NUW, - WV_PVW, - WV_RL, - WV_RLC, - WV_SCBIND, - WV_SCROLL, - WV_SMS, - WV_SISO, - WV_SO, - WV_SPELL, - WV_CUC, - WV_CUL, - WV_CULOPT, - WV_CC, - WV_SBR, - WV_STC, - WV_STL, - WV_WFH, - WV_WFW, - WV_WRAP, - WV_SCL, - WV_WINHL, - WV_LCS, - WV_FCS, - WV_WINBL, - WV_WBR, - WV_COUNT, // must be the last one -}; - // Value for b_p_ul indicating the global value must be used. #define NO_LOCAL_UNDOLEVEL (-123456) diff --git a/src/nvim/options.lua b/src/nvim/options.lua index cb25d481ec..d599e0452d 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -254,8 +254,8 @@ return { from before it was deleted. When it appears again then it is read. |timestamp| If this option has a local value, use this command to switch back to - using the global value: > - :set autoread< + using the global value: >vim + set autoread< < ]=], full_name = 'autoread', @@ -324,10 +324,10 @@ return { be undone. First delete the "g:colors_name" variable when needed. Normally this option would be set in the vimrc file. Possibly - depending on the terminal name. Example: > - :if $TERM ==# "xterm" - : set background=dark - :endif + depending on the terminal name. Example: >vim + if $TERM ==# "xterm" + set background=dark + endif < When this option is changed, the default settings for the highlight groups will change. To use other settings, place ":highlight" commands AFTER the setting of the 'background' option. @@ -496,12 +496,12 @@ return { use '//', instead of '\\'. - Environment variables are expanded |:set_env|. - Careful with '\' characters, type one before a space, type two to - get one in the option (see |option-backslash|), for example: > - :set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces + get one in the option (see |option-backslash|), for example: >vim + set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces < See also 'backup' and 'writebackup' options. - If you want to hide your backup files on Unix, consider this value: > - :set backupdir=./.backup,~/.backup,.,/tmp + If you want to hide your backup files on Unix, consider this value: >vim + set backupdir=./.backup,~/.backup,.,/tmp < You must create a ".backup" directory in each directory and in your home directory for this to work properly. The use of |:set+=| and |:set-=| is preferred when adding or removing @@ -533,8 +533,8 @@ return { If you like to keep a lot of backups, you could use a BufWritePre autocommand to change 'backupext' just before writing the file to - include a timestamp. > - :au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~' + include a timestamp. >vim + au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~' < Use 'backupdir' to put the backup in a different directory. ]=], full_name = 'backupext', @@ -571,7 +571,7 @@ return { Note that environment variables are not expanded. If you want to use $HOME you must expand it explicitly, e.g.: >vim - :let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*' + let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*' < Note that the default also makes sure that "crontab -e" works (when a backup would be made by renaming the original file crontab won't see @@ -969,8 +969,8 @@ return { in the current directory first. If the default value taken from $CDPATH is not what you want, include a modified version of the following command in your vimrc file to - override it: > - :let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g') + override it: >vim + let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g') < This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. (parts of 'cdpath' can be passed to the shell to expand file names). @@ -995,9 +995,9 @@ return { The key used in Command-line Mode to open the command-line window. Only non-printable keys are allowed. The key can be specified as a single character, but it is difficult to - type. The preferred way is to use the <> notation. Examples: > - :exe "set cedit=\\<C-Y>" - :exe "set cedit=\\<Esc>" + type. The preferred way is to use the <> notation. Examples: >vim + exe "set cedit=\\<C-Y>" + exe "set cedit=\\<Esc>" < |Nvi| also has this option, but it only uses the first character. See |cmdwin|. ]=], @@ -1043,7 +1043,7 @@ return { Conversion between "latin1", "unicode", "ucs-2", "ucs-4" and "utf-8" is done internally by Vim, 'charconvert' is not used for this. Also used for Unicode conversion. - Example: > + Example: >vim set charconvert=CharConvert() fun CharConvert() system("recode " @@ -1134,7 +1134,7 @@ return { desc = [=[ Keywords that are interpreted as a C++ scope declaration by |cino-g|. Useful e.g. for working with the Qt framework that defines additional - scope declarations "signals", "public slots" and "private slots": > + scope declarations "signals", "public slots" and "private slots": >vim set cinscopedecls+=signals,public\ slots,private\ slots < ]=], @@ -1251,11 +1251,11 @@ return { highlighted with ColorColumn |hl-ColorColumn|. Useful to align text. Will make screen redrawing slower. The screen column can be an absolute number, or a number preceded with - '+' or '-', which is added to or subtracted from 'textwidth'. > + '+' or '-', which is added to or subtracted from 'textwidth'. >vim - :set cc=+1 " highlight column after 'textwidth' - :set cc=+1,+2,+3 " highlight three columns after 'textwidth' - :hi ColorColumn ctermbg=lightgrey guibg=lightgrey + set cc=+1 " highlight column after 'textwidth' + set cc=+1,+2,+3 " highlight three columns after 'textwidth' + hi ColorColumn ctermbg=lightgrey guibg=lightgrey < When 'textwidth' is zero then the items with '-' and '+' are not used. A maximum of 256 columns are highlighted. @@ -1283,8 +1283,8 @@ return { number of columns of the display, the display may be messed up. For the GUI it is always possible and Vim limits the number of columns to what fits on the screen. You can use this command to get the widest - window possible: > - :set columns=9999 + window possible: >vim + set columns=9999 < Minimum value is 12, maximum value is 10000. ]=], full_name = 'columns', @@ -1361,8 +1361,8 @@ return { k scan the files given with the 'dictionary' option kspell use the currently active spell checking |spell| k{dict} scan the file {dict}. Several "k" flags can be given, - patterns are valid too. For example: > - :set cpt=k/usr/dict/*,k~/spanish + patterns are valid too. For example: >vim + set cpt=k/usr/dict/*,k~/spanish < s scan the files given with the 'thesaurus' option s{tsr} scan the file {tsr}. Several "s" flags can be given, patterns are valid too. @@ -1855,7 +1855,7 @@ return { |hl-CursorColumn|. Useful to align text. Will make screen redrawing slower. If you only want the highlighting in the current window you can use - these autocommands: > + these autocommands: >vim au WinLeave * set nocursorline nocursorcolumn au WinEnter * set cursorline cursorcolumn < @@ -1952,7 +1952,7 @@ return { < If the function is defined with `func_name : function() {...`: > ^\s*\ze\i\+\s*[:]\s*(*function\s*( < When using the ":set" command, you need to double the backslashes! - To avoid that use `:let` with a single quote string: > + To avoid that use `:let` with a single quote string: >vim let &l:define = '^\s*\ze\k\+\s*=\s*function(' < ]=], @@ -2159,11 +2159,11 @@ return { patience patience diff algorithm histogram histogram diff algorithm - Examples: > - :set diffopt=internal,filler,context:4 - :set diffopt= - :set diffopt=internal,filler,foldcolumn:3 - :set diffopt-=internal " do NOT use the internal diff parser + Examples: >vim + set diffopt=internal,filler,context:4 + set diffopt= + set diffopt=internal,filler,foldcolumn:3 + set diffopt-=internal " do NOT use the internal diff parser < ]=], expand_cb = 'expand_set_diffopt', @@ -2224,8 +2224,8 @@ return { - A directory name may end in an ':' or '/'. - Environment variables are expanded |:set_env|. - Careful with '\' characters, type one before a space, type two to - get one in the option (see |option-backslash|), for example: > - :set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces + get one in the option (see |option-backslash|), for example: >vim + set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces < Editing the same file twice will result in a warning. Using "/tmp" on is discouraged: if the system crashes you lose the swap file. And @@ -2495,8 +2495,8 @@ return { A list of autocommand event names, which are to be ignored. When set to "all" or when "all" is one of the items, all autocommand events are ignored, autocommands will not be executed. - Otherwise this is a comma-separated list of event names. Example: > - :set ei=WinEnter,WinLeave + Otherwise this is a comma-separated list of event names. Example: >vim + set ei=WinEnter,WinLeave < ]=], expand_cb = 'expand_set_eventignore', @@ -2616,7 +2616,7 @@ return { will work and the first entry of 'fileencodings' will be used (except "ucs-bom", which requires the BOM to be present). If you prefer another encoding use an BufReadPost autocommand event to test if your - preferred encoding is to be used. Example: > + preferred encoding is to be used. Example: >vim au BufReadPost * if search('\S', 'w') == 0 | \ set fenc=iso-2022-jp | endif < This sets 'fileencoding' to "iso-2022-jp" if the file does not contain @@ -2624,8 +2624,8 @@ return { When the |++enc| argument is used then the value of 'fileencodings' is not used. Note that 'fileencodings' is not used for a new file, the global value - of 'fileencoding' is used instead. You can set it with: > - :setglobal fenc=iso-8859-2 + of 'fileencoding' is used instead. You can set it with: >vim + setglobal fenc=iso-8859-2 < This means that a non-existing file may get a different encoding than an empty file. The special value "ucs-bom" can be used to check for a Unicode BOM @@ -2789,11 +2789,11 @@ return { this use the ":filetype on" command. |:filetype| Setting this option to a different value is most useful in a modeline, for a file for which the file type is not automatically recognized. - Example, for in an IDL file: > + Example, for in an IDL file: >c /* vim: set filetype=idl : */ < |FileType| |filetypes| When a dot appears in the value then this separates two filetype - names. Example: > + names. Example: >c /* vim: set filetype=c.doxygen : */ < This will use the "c" filetype first, then the "doxygen" filetype. This works both for filetype plugins and for syntax files. More than @@ -2853,8 +2853,8 @@ return { "vert", "vertleft", "vertright", "verthoriz", "foldsep" and "fold" default to single-byte alternatives. - Example: > - :set fillchars=stl:\ ,stlnc:\ ,vert:│,fold:·,diff:- + Example: >vim + set fillchars=stl:\ ,stlnc:\ ,vert:│,fold:·,diff:- < For the "stl", "stlnc", "foldopen", "foldclose" and "foldsep" items single-byte and multibyte characters are supported. But double-width @@ -3208,8 +3208,8 @@ return { automatic formatting. This can be empty. Don't insert it yet! - Example: > - :set formatexpr=mylang#Format() + Example: >vim + set formatexpr=mylang#Format() < This will invoke the mylang#Format() function in the autoload/mylang.vim file in 'runtimepath'. |autoload| @@ -3223,7 +3223,7 @@ return { the internal format mechanism. If the expression starts with s: or |<SID>|, then it is replaced with - the script ID (|local-function|). Example: > + the script ID (|local-function|). Example: >vim set formatexpr=s:MyFormatExpr() set formatexpr=<SID>SomeFormatExpr() < Otherwise, the expression is evaluated in the context of the script @@ -3390,8 +3390,8 @@ return { will be included. Environment variables are expanded |:set_env|. See |option-backslash| about including spaces and backslashes. When your "grep" accepts the "-H" argument, use this to make ":grep" - also work well with a single file: > - :set grepprg=grep\ -nH + also work well with a single file: >vim + set grepprg=grep\ -nH < Special value: When 'grepprg' is set to "internal" the |:grep| command works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like |:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|. @@ -3417,11 +3417,11 @@ return { Configures the cursor style for each mode. Works in the GUI and many terminals. See |tui-cursor-shape|. - To disable cursor-styling, reset the option: > - :set guicursor= + To disable cursor-styling, reset the option: >vim + set guicursor= - < To enable mode shapes, "Cursor" highlight, and blinking: > - :set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50 + < To enable mode shapes, "Cursor" highlight, and blinking: >vim + set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50 \,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor \,sm:block-blinkwait175-blinkoff150-blinkon175 @@ -3454,8 +3454,8 @@ return { the cursor starts blinking, blinkon is the time that the cursor is shown and blinkoff is the time that the cursor is not shown. Times are in msec. When one of - the numbers is zero, there is no blinking. E.g.: > - :set guicursor=n:blinkon0 + the numbers is zero, there is no blinking. E.g.: >vim + set guicursor=n:blinkon0 < - Default is "blinkon0" for each mode. {group-name} Highlight group that decides the color and font of the @@ -3493,9 +3493,9 @@ return { to do a common setting for all modes. For example, to switch off blinking: "a:blinkon0" - Examples of cursor highlighting: > - :highlight Cursor gui=reverse guifg=NONE guibg=NONE - :highlight Cursor gui=NONE guifg=bg guibg=fg + Examples of cursor highlighting: >vim + highlight Cursor gui=reverse guifg=NONE guibg=NONE + highlight Cursor gui=NONE guifg=bg guibg=fg < ]=], full_name = 'guicursor', @@ -3519,8 +3519,8 @@ return { Spaces after a comma are ignored. To include a comma in a font name precede it with a backslash. Setting an option requires an extra backslash before a space and a backslash. See also - |option-backslash|. For example: > - :set guifont=Screen15,\ 7x13,font\\,with\\,commas + |option-backslash|. For example: >vim + set guifont=Screen15,\ 7x13,font\\,with\\,commas < will make Vim try to use the font "Screen15" first, and if it fails it will try to use "7x13" and then "font,with,commas" instead. @@ -3531,14 +3531,14 @@ return { the case of X). The font names given should be "normal" fonts. Vim will try to find the related bold and italic fonts. - For Win32 and Mac OS: > - :set guifont=* + For Win32 and Mac OS: >vim + set guifont=* < will bring up a font requester, where you can pick the font you want. The font name depends on the GUI used. - For Mac OSX you can use something like this: > - :set guifont=Monaco:h10 + For Mac OSX you can use something like this: >vim + set guifont=Monaco:h10 < *E236* Note that the fonts must be mono-spaced (all characters have the same width). @@ -3563,9 +3563,9 @@ return { Use a ':' to separate the options. - A '_' can be used in the place of a space, so you don't need to use backslashes to escape the spaces. - - Examples: > - :set guifont=courier_new:h12:w5:b:cRUSSIAN - :set guifont=Andale_Mono:h7.5:w4.5 + - Examples: >vim + set guifont=courier_new:h12:w5:b:cRUSSIAN + set guifont=Andale_Mono:h7.5:w4.5 < ]=], deny_duplicates = true, @@ -3745,8 +3745,8 @@ return { When non-empty describes the text to use in a tooltip for the GUI tab pages line. When empty Vim will use a default tooltip. This option is otherwise just like 'guitablabel' above. - You can include a line break. Simplest method is to use |:let|: > - :let &guitabtooltip = "line one\nline two" + You can include a line break. Simplest method is to use |:let|: >vim + let &guitabtooltip = "line one\nline two" < ]=], enable_if = false, @@ -3814,8 +3814,8 @@ return { be used as a last resort. You can add "en" to prefer English over another language, but that will only find tags that exist in that language and not in the English help. - Example: > - :set helplang=de,it + Example: >vim + set helplang=de,it < This will first search German, then Italian and finally English help files. When using |CTRL-]| and ":help!" in a non-English help file Vim will @@ -4031,8 +4031,8 @@ return { 1 :lmap is ON and IM is off 2 :lmap is off and IM is ON To always reset the option to zero when leaving Insert mode with <Esc> - this can be used: > - :inoremap <ESC> <ESC>:set iminsert=0<CR> + this can be used: >vim + inoremap <ESC> <ESC>:set iminsert=0<CR> < This makes :lmap and IM turn off automatically when leaving Insert mode. Note that this option changes when using CTRL-^ in Insert mode @@ -4125,20 +4125,20 @@ return { defaults = { if_true = '' }, desc = [=[ Expression to be used to transform the string found with the 'include' - option to a file name. Mostly useful to change "." to "/" for Java: > - :setlocal includeexpr=substitute(v:fname,'\\.','/','g') + option to a file name. Mostly useful to change "." to "/" for Java: >vim + setlocal includeexpr=substitute(v:fname,'\\.','/','g') < The "v:fname" variable will be set to the file name that was detected. Note the double backslash: the `:set` command first halves them, then one remains in the value, where "\." matches a dot literally. For - simple character replacements `tr()` avoids the need for escaping: > - :setlocal includeexpr=tr(v:fname,'.','/') + simple character replacements `tr()` avoids the need for escaping: >vim + setlocal includeexpr=tr(v:fname,'.','/') < Also used for the |gf| command if an unmodified file name can't be found. Allows doing "gf" on the name after an 'include' statement. Also used for |<cfile>|. If the expression starts with s: or |<SID>|, then it is replaced with - the script ID (|local-function|). Example: > + the script ID (|local-function|). Example: >vim setlocal includeexpr=s:MyIncludeExpr(v:fname) setlocal includeexpr=<SID>SomeIncludeExpr(v:fname) < Otherwise, the expression is evaluated in the context of the script @@ -4180,7 +4180,7 @@ return { typing a search command. See also: 'hlsearch'. If you don't want to turn 'hlsearch' on, but want to highlight all matches while searching, you can turn on and off 'hlsearch' with - autocmd. Example: > + autocmd. Example: >vim augroup vimrc-incsearch-highlight autocmd! autocmd CmdlineEnter /,\? :set hlsearch @@ -4217,7 +4217,7 @@ return { when the expression is evaluated (but it may be moved around). If the expression starts with s: or |<SID>|, then it is replaced with - the script ID (|local-function|). Example: > + the script ID (|local-function|). Example: >vim set indentexpr=s:MyIndentExpr() set indentexpr=<SID>SomeIndentExpr() < Otherwise, the expression is evaluated in the context of the script @@ -4231,8 +4231,8 @@ return { The evaluation of the expression must not have side effects! It must not change the text, jump to another window, etc. Afterwards the cursor position is always restored, thus the cursor may be moved. - Normally this option would be set to call a function: > - :set indentexpr=GetMyIndent() + Normally this option would be set to call a function: >vim + set indentexpr=GetMyIndent() < Error messages will be suppressed, unless the 'debug' option contains "msg". See |indent-expression|. @@ -4560,9 +4560,9 @@ return { When "man" or "man -s" is used, Vim will automatically translate a [count] for the "K" command to a section number. See |option-backslash| about including spaces and backslashes. - Example: > - :set keywordprg=man\ -s - :set keywordprg=:Man + Example: >vim + set keywordprg=man\ -s + set keywordprg=:Man < This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. ]=], @@ -4593,10 +4593,10 @@ return { This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. - Example (for Greek, in UTF-8): *greek* > - :set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz - < Example (exchanges meaning of z and y for commands): > - :set langmap=zy,yz,ZY,YZ + Example (for Greek, in UTF-8): *greek* >vim + set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz + < Example (exchanges meaning of z and y for commands): >vim + set langmap=zy,yz,ZY,YZ < The 'langmap' option is a list of parts, separated with commas. Each part can be in one of two forms: @@ -4634,22 +4634,22 @@ return { defaults = { if_true = '' }, desc = [=[ Language to use for menu translation. Tells which file is loaded - from the "lang" directory in 'runtimepath': > + from the "lang" directory in 'runtimepath': >vim "lang/menu_" .. &langmenu .. ".vim" < (without the spaces). For example, to always use the Dutch menus, no - matter what $LANG is set to: > - :set langmenu=nl_NL.ISO_8859-1 + matter what $LANG is set to: >vim + set langmenu=nl_NL.ISO_8859-1 < When 'langmenu' is empty, |v:lang| is used. Only normal file name characters can be used, `/\*?[|<>` are illegal. If your $LANG is set to a non-English language but you do want to use - the English menus: > - :set langmenu=none + the English menus: >vim + set langmenu=none < This option must be set before loading menus, switching on filetype detection or syntax highlighting. Once the menus are defined setting - this option has no effect. But you could do this: > - :source $VIMRUNTIME/delmenu.vim - :set langmenu=de_DE.ISO_8859-1 - :source $VIMRUNTIME/menu.vim + this option has no effect. But you could do this: >vim + source $VIMRUNTIME/delmenu.vim + set langmenu=de_DE.ISO_8859-1 + source $VIMRUNTIME/menu.vim < Warning: This deletes all menus that you defined yourself! ]=], full_name = 'langmenu', @@ -4756,8 +4756,8 @@ return { option will cause the window size to be changed. When you only want to use the size for the GUI, put the command in your |gvimrc| file. Vim limits the number of lines to what fits on the screen. You can - use this command to get the tallest window possible: > - :set lines=999 + use this command to get the tallest window possible: >vim + set lines=999 < Minimum value is 2, maximum value is 1000. ]=], full_name = 'lines', @@ -4859,8 +4859,8 @@ return { The cursor is displayed at the start of the space a Tab character occupies, not at the end as usual in Normal mode. To get this cursor - position while displaying Tabs with spaces, use: > - :set list lcs=tab:\ \ + position while displaying Tabs with spaces, use: >vim + set list lcs=tab:\ \ < Note that list mode will also affect formatting (set with 'textwidth' or 'wrapmargin') when 'cpoptions' includes 'L'. See 'listchars' for @@ -4924,8 +4924,8 @@ return { lead:c Character to show for leading spaces. When omitted, leading spaces are blank. Overrides the "space" and "multispace" settings for leading spaces. You can - combine it with "tab:", for example: > - :set listchars+=tab:>-,lead:. + combine it with "tab:", for example: >vim + set listchars+=tab:>-,lead:. < *lcs-leadmultispace* leadmultispace:c... @@ -4961,17 +4961,17 @@ return { The characters ':' and ',' should not be used. UTF-8 characters can be used. All characters must be single width. - Each character can be specified as hex: > + Each character can be specified as hex: >vim set listchars=eol:\\x24 set listchars=eol:\\u21b5 set listchars=eol:\\U000021b5 < Note that a double backslash is used. The number of hex characters must be exactly 2 for \\x, 4 for \\u and 8 for \\U. - Examples: > - :set lcs=tab:>-,trail:- - :set lcs=tab:>-,eol:<,nbsp:% - :set lcs=extends:>,precedes:< + Examples: >vim + set lcs=tab:>-,trail:- + set lcs=tab:>-,eol:<,nbsp:% + set lcs=extends:>,precedes:< < |hl-NonText| highlighting will be used for "eol", "extends" and "precedes". |hl-Whitespace| for "nbsp", "space", "tab", "multispace", "lead" and "trail". @@ -5055,8 +5055,8 @@ return { This would be mostly useful when you use MS-Windows. If iconv is enabled, setting 'makeencoding' to "char" has the same effect as - setting to the system locale encoding. Example: > - :set makeencoding=char " system locale is used + setting to the system locale encoding. Example: >vim + set makeencoding=char " system locale is used < ]=], expand_cb = 'expand_set_encoding', @@ -5078,11 +5078,11 @@ return { about including spaces and backslashes. Note that a '|' must be escaped twice: once for ":set" and once for the interpretation of a command. When you use a filter called - "myfilter" do it like this: > - :set makeprg=gmake\ \\\|\ myfilter + "myfilter" do it like this: >vim + set makeprg=gmake\ \\\|\ myfilter < The placeholder "$*" can be given (even multiple times) to specify - where the arguments will be included, for example: > - :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} + where the arguments will be included, for example: >vim + set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} < This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. ]=], @@ -5107,12 +5107,12 @@ return { jump between two double quotes. The characters must be separated by a colon. The pairs must be separated by a comma. Example for including '<' and - '>' (for HTML): > - :set mps+=<:> + '>' (for HTML): >vim + set mps+=<:> < A more exotic example, to jump between the '=' and ';' in an - assignment, useful for languages like C and Java: > - :au FileType c,cpp,java set mps+==:; + assignment, useful for languages like C and Java: >vim + au FileType c,cpp,java set mps+==:; < For a more advanced way of using "%", see the matchit.vim plugin in the $VIMRUNTIME/plugin directory. |add-local-help| @@ -5158,6 +5158,7 @@ return { Increasing this limit above 200 also changes the maximum for Ex command recursion, see |E169|. See also |:function|. + Also used for maximum depth of callback functions. ]=], full_name = 'maxfuncdepth', scope = { 'global' }, @@ -5252,8 +5253,8 @@ return { The languages for which these numbers are important are Italian and Hungarian. The default works for when you have about 512 Mbyte. If - you have 1 Gbyte you could use: > - :set mkspellmem=900000,3000,800 + you have 1 Gbyte you could use: >vim + set mkspellmem=900000,3000,800 < If you have less than 512 Mbyte |:mkspell| may fail for some languages, no matter what you set 'mkspellmem' to. @@ -5387,8 +5388,8 @@ return { defaults = { if_true = 'nvi' }, desc = [=[ Enables mouse support. For example, to enable the mouse in Normal mode - and Visual mode: > - :set mouse=nv + and Visual mode: >vim + set mouse=nv < To temporarily disable mouse support, hold the shift key while using the mouse. @@ -5498,19 +5499,19 @@ return { Note that you can further refine the meaning of buttons with mappings. See |mouse-overview|. But mappings are NOT used for modeless selection. - Example: > - :map <S-LeftMouse> <RightMouse> - :map <S-LeftDrag> <RightDrag> - :map <S-LeftRelease> <RightRelease> - :map <2-S-LeftMouse> <2-RightMouse> - :map <2-S-LeftDrag> <2-RightDrag> - :map <2-S-LeftRelease> <2-RightRelease> - :map <3-S-LeftMouse> <3-RightMouse> - :map <3-S-LeftDrag> <3-RightDrag> - :map <3-S-LeftRelease> <3-RightRelease> - :map <4-S-LeftMouse> <4-RightMouse> - :map <4-S-LeftDrag> <4-RightDrag> - :map <4-S-LeftRelease> <4-RightRelease> + Example: >vim + map <S-LeftMouse> <RightMouse> + map <S-LeftDrag> <RightDrag> + map <S-LeftRelease> <RightRelease> + map <2-S-LeftMouse> <2-RightMouse> + map <2-S-LeftDrag> <2-RightDrag> + map <2-S-LeftRelease> <2-RightRelease> + map <3-S-LeftMouse> <3-RightMouse> + map <3-S-LeftDrag> <3-RightDrag> + map <3-S-LeftRelease> <3-RightRelease> + map <4-S-LeftMouse> <4-RightMouse> + map <4-S-LeftDrag> <4-RightDrag> + map <4-S-LeftRelease> <4-RightRelease> < Mouse commands requiring the CTRL modifier can be simulated by typing the "g" key before using the mouse: @@ -5558,8 +5559,8 @@ return { for vertical scrolling). You can disable mouse scrolling by using a count of 0. - Example: > - :set mousescroll=ver:5,hor:2 + Example: >vim + set mousescroll=ver:5,hor:2 < Will make Nvim scroll 5 lines at a time when scrolling vertically, and scroll 2 columns at a time when scrolling horizontally. ]=], @@ -5635,8 +5636,8 @@ return { Any modes not specified or shapes not available use the normal mouse pointer. - Example: > - :set mouseshape=s:udsizing,m:no + Example: >vim + set mouseshape=s:udsizing,m:no < will make the mouse turn to a sizing arrow over the status lines and indicate no input when the hit-enter prompt is displayed (since clicking the mouse has no effect in this state.) @@ -5934,30 +5935,30 @@ return { provided that the file being searched for has a relative path (not starting with "/", "./" or "../"). The directories in the 'path' option may be relative or absolute. - - Use commas to separate directory names: > - :set path=.,/usr/local/include,/usr/include + - Use commas to separate directory names: >vim + set path=.,/usr/local/include,/usr/include < - Spaces can also be used to separate directory names. To have a space in a directory name, precede it with an extra backslash, and - escape the space: > - :set path=.,/dir/with\\\ space + escape the space: >vim + set path=.,/dir/with\\\ space < - To include a comma in a directory name precede it with an extra - backslash: > - :set path=.,/dir/with\\,comma - < - To search relative to the directory of the current file, use: > - :set path=. + backslash: >vim + set path=.,/dir/with\\,comma + < - To search relative to the directory of the current file, use: >vim + set path=. < - To search in the current directory use an empty string between two - commas: > - :set path=,, + commas: >vim + set path=,, < - A directory name may end in a ':' or '/'. - Environment variables are expanded |:set_env|. - When using |netrw.vim| URLs can be used. For example, adding "https://www.vim.org" will make ":find index.html" work. - Search upwards and downwards in a directory tree using "*", "**" and ";". See |file-searching| for info and syntax. - - Careful with '\' characters, type two to get one in the option: > - :set path=.,c:\\include - < Or just use '/' instead: > - :set path=.,c:/include + - Careful with '\' characters, type two to get one in the option: >vim + set path=.,c:\\include + < Or just use '/' instead: >vim + set path=.,c:/include < Don't forget "." or files won't even be found in the same directory as the file! The maximum length is limited. How much depends on the system, mostly @@ -5966,14 +5967,14 @@ return { 'path', see |:checkpath|. The use of |:set+=| and |:set-=| is preferred when adding or removing directories from the list. This avoids problems when a future version - uses another default. To remove the current directory use: > - :set path-= - < To add the current directory use: > - :set path+= + uses another default. To remove the current directory use: >vim + set path-= + < To add the current directory use: >vim + set path+= < To use an environment variable, you probably need to replace the separator. Here is an example to append $INCL, in which directory - names are separated with a semi-colon: > - :let &path = &path .. "," .. substitute($INCL, ';', ',', 'g') + names are separated with a semi-colon: >vim + let &path = &path .. "," .. substitute($INCL, ';', ',', 'g') < Replace the ';' with a ':' or whatever separator is used. Note that this doesn't work when $INCL contains a comma or white space. ]=], @@ -6058,10 +6059,10 @@ return { It is possible to override the level for individual highlights within the popupmenu using |highlight-blend|. For instance, to enable - transparency but force the current selected element to be fully opaque: > + transparency but force the current selected element to be fully opaque: >vim - :set pumblend=15 - :hi PmenuSel blend=0 + set pumblend=15 + hi PmenuSel blend=0 < UI-dependent. Works best with RGB colors. 'termguicolors' ]=], @@ -6421,8 +6422,8 @@ return { The default ruler width is 17 characters. To make the ruler 15 characters wide, put "%15(" at the start and "%)" at the end. - Example: > - :set rulerformat=%15(%c%V\ %p%%%) + Example: >vim + set rulerformat=%15(%c%V\ %p%%%) < ]=], full_name = 'rulerformat', @@ -6515,8 +6516,8 @@ return { runtime files. For speed, use as few items as possible and avoid wildcards. See |:runtime|. - Example: > - :set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME + Example: >vim + set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME < This will use the directory "~/vimruntime" first (containing your personal Nvim runtime files), then "/mygroup/vim", and finally "$VIMRUNTIME" (the default runtime files). @@ -6629,7 +6630,7 @@ return { in the middle of the window (except at the start or end of the file or when long lines wrap). After using the local value, go back the global value with one of - these two: > + these two: >vim setlocal scrolloff< setlocal scrolloff=-1 < For scrolling horizontally see 'sidescrolloff'. @@ -6909,8 +6910,8 @@ return { 2^8 < 10240 < 2^16) + 10240 bytes (requested maximum item contents size) = 10253 bytes. - Example: > - :set shada='50,<1000,s100,:0,n~/nvim/shada + Example: >vim + set shada='50,<1000,s100,:0,n~/nvim/shada < '50 Marks will be remembered for the last 50 files you edited. @@ -6981,12 +6982,12 @@ return { Environment variables are expanded |:set_env|. If the name of the shell contains a space, you need to enclose it in - quotes. Example with quotes: > - :set shell=\"c:\program\ files\unix\sh.exe\"\ -f + quotes. Example with quotes: >vim + set shell=\"c:\program\ files\unix\sh.exe\"\ -f < Note the backslash before each quote (to avoid starting a comment) and each space (to avoid ending the option value), so better use |:let-&| - like this: > - :let &shell='"C:\Program Files\unix\sh.exe" -f' + like this: >vim + let &shell='"C:\Program Files\unix\sh.exe" -f' < Also note that the "-f" is not inside the quotes, because it is not part of the command name. *shell-unquoting* @@ -7009,7 +7010,7 @@ return { Note that such processing is done after |:set| did its own round of unescaping, so to keep yourself sane use |:let-&| like shown above. *shell-powershell* - To use PowerShell: > + To use PowerShell: >vim let &shell = executable('pwsh') ? 'pwsh' : 'powershell' let &shellcmdflag = '-NoLogo -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();$PSDefaultParameterValues[''Out-File:Encoding'']=''utf8'';Remove-Alias -Force -ErrorAction SilentlyContinue tee;' let &shellredir = '2>&1 | %%{ "$_" } | Out-File %s; exit $LastExitCode' @@ -7180,7 +7181,7 @@ return { existing file names, thus this option needs to be set before opening any file for best results. This might change in the future. 'shellslash' only works when a backslash can be used as a path - separator. To test if this is so use: > + separator. To test if this is so use: >vim if exists('+shellslash') < Also see 'completeslash'. ]=], @@ -7356,9 +7357,9 @@ return { defaults = { if_true = '' }, desc = [=[ String to put at the start of lines that have been wrapped. Useful - values are "> " or "+++ ": > - :let &showbreak = "> " - :let &showbreak = '+++ ' + values are "> " or "+++ ": >vim + let &showbreak = "> " + let &showbreak = '+++ ' < Only printable single-cell characters are allowed, excluding <Tab> and comma (in a future version the comma might be used to separate the part that is shown at the end and at the start of a line). @@ -7367,8 +7368,8 @@ return { If you want the 'showbreak' to appear in between line numbers, add the "n" flag to 'cpoptions'. A window-local value overrules a global value. If the global value is - set and you want no value in the current window use NONE: > - :setlocal showbreak=NONE + set and you want no value in the current window use NONE: >vim + setlocal showbreak=NONE < ]=], full_name = 'showbreak', @@ -7534,16 +7535,16 @@ return { horizontally centered in the window, as long as one does not come too close to the beginning of the line. After using the local value, go back the global value with one of - these two: > + these two: >vim setlocal sidescrolloff< setlocal sidescrolloff=-1 < Example: Try this together with 'sidescroll' and 'listchars' as in the following example to never allow the cursor to move - onto the "extends" character: > + onto the "extends" character: >vim - :set nowrap sidescroll=1 listchars=extends:>,precedes:< - :set sidescrolloff=1 + set nowrap sidescroll=1 listchars=extends:>,precedes:< + set sidescrolloff=1 < ]=], full_name = 'sidescrolloff', @@ -7779,7 +7780,7 @@ return { deny_duplicates = true, desc = [=[ A comma-separated list of word list names. When the 'spell' option is - on spellchecking will be done for these languages. Example: > + on spellchecking will be done for these languages. Example: >vim set spelllang=en_us,nl,medical < This means US English, Dutch and medical words are recognized. Words that are not recognized will be highlighted. @@ -7913,8 +7914,8 @@ return { 'verbose' option to a non-zero value. Only one of "best", "double" or "fast" may be used. The others may - appear several times in any order. Example: > - :set sps=file:~/.config/nvim/sugg,best,expr:MySuggest() + appear several times in any order. Example: >vim + set sps=file:~/.config/nvim/sugg,best,expr:MySuggest() < This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -8038,21 +8039,21 @@ return { Examples: >vim " Relative number with bar separator and click handlers: - :set statuscolumn=%@SignCb@%s%=%T%@NumCb@%r│%T + set statuscolumn=%@SignCb@%s%=%T%@NumCb@%r│%T " Right aligned relative cursor line number: - :let &stc='%=%{v:relnum?v:relnum:v:lnum} ' + let &stc='%=%{v:relnum?v:relnum:v:lnum} ' " Line numbers in hexadecimal for non wrapped part of lines: - :let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} ' + let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} ' " Human readable line numbers with thousands separator: - :let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\' + let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\' . '%(\\d\\d\\d\\)\\+$",",","g")}' " Both relative and absolute line numbers with different " highlighting for odd and even relative numbers: - :let &stc='%#NonText#%{&nu?v:lnum:""}' . + let &stc='%#NonText#%{&nu?v:lnum:""}' . '%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}' . '%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}' @@ -8082,8 +8083,8 @@ return { be given as "%%". When the option starts with "%!" then it is used as an expression, - evaluated and the result is used as the option value. Example: > - :set statusline=%!MyStatusLine() + evaluated and the result is used as the option value. Example: >vim + set statusline=%!MyStatusLine() < The *g:statusline_winid* variable will be set to the |window-ID| of the window that the status line belongs to. The result can contain %{} items that will be evaluated too. @@ -8164,7 +8165,7 @@ return { return value of expr contains "%" items they will get expanded. The expression can contain the "}" character, the end of expression is denoted by "%}". - For example: > + For example: >vim func! Stl_filename() abort return "%t" endfunc @@ -8231,8 +8232,8 @@ return { When all items in a group becomes an empty string (i.e. flags that are not set) and a minwid is not set for the group, the whole group will become empty. This will make a group like the following disappear - completely from the statusline when none of the flags are set. > - :set statusline=...%(\ [%M%R%H]%)... + completely from the statusline when none of the flags are set. >vim + set statusline=...%(\ [%M%R%H]%)... < Beware that an expression is evaluated each and every time the status line is displayed. *stl-%{* *g:actual_curbuf* *g:actual_curwin* @@ -8263,23 +8264,23 @@ return { edit your vimrc or whatever with "vim --clean" to get it right. Examples: - Emulate standard status line with 'ruler' set > - :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P - < Similar, but add ASCII value of char under the cursor (like "ga") > - :set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P - < Display byte count and byte value, modified flag in red. > - :set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b' - :hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red - < Display a ,GZ flag if a compressed file is loaded > - :set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h... - < In the |:autocmd|'s: > - :let b:gzflag = 1 - < And: > - :unlet b:gzflag - < And define this function: > - :function VarExists(var, val) - : if exists(a:var) | return a:val | else | return '' | endif - :endfunction + Emulate standard status line with 'ruler' set >vim + set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P + < Similar, but add ASCII value of char under the cursor (like "ga") >vim + set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P + < Display byte count and byte value, modified flag in red. >vim + set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b' + hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red + < Display a ,GZ flag if a compressed file is loaded >vim + set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h... + < In the |:autocmd|'s: >vim + let b:gzflag = 1 + < And: >vim + unlet b:gzflag + < And define this function: >vim + function VarExists(var, val) + if exists(a:var) | return a:val | else | return '' | endif + endfunction < ]=], full_name = 'statusline', @@ -8321,8 +8322,8 @@ return { deny_duplicates = true, desc = [=[ Comma-separated list of suffixes, which are used when searching for a - file for the "gf", "[I", etc. commands. Example: > - :set suffixesadd=.java + file for the "gf", "[I", etc. commands. Example: >vim + set suffixesadd=.java < ]=], full_name = 'suffixesadd', @@ -8432,19 +8433,19 @@ return { Otherwise this option does not always reflect the current syntax (the b:current_syntax variable does). This option is most useful in a modeline, for a file which syntax is - not automatically recognized. Example, in an IDL file: > + not automatically recognized. Example, in an IDL file: >c /* vim: set syntax=idl : */ < When a dot appears in the value then this separates two filetype - names. Example: > + names. Example: >c /* vim: set syntax=c.doxygen : */ < This will use the "c" syntax first, then the "doxygen" syntax. Note that the second one must be prepared to be loaded as an addition, otherwise it will be skipped. More than one dot may appear. - To switch off syntax highlighting for the current file, use: > - :set syntax=OFF + To switch off syntax highlighting for the current file, use: >vim + set syntax=OFF < To switch syntax highlighting on according to the current value of the - 'filetype' option: > - :set syntax=ON + 'filetype' option: >vim + set syntax=ON < What actually happens when setting the 'syntax' option is that the Syntax autocommand event is triggered with the value as argument. This option is not copied to another buffer, independent of the 's' or @@ -9013,13 +9014,13 @@ return { expanded according to the rules used for 'statusline'. This option cannot be set in a modeline when 'modelineexpr' is off. - Example: > - :auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p") - :set title titlestring=%<%F%=%l/%L-%P titlelen=70 + Example: >vim + auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p") + set title titlestring=%<%F%=%l/%L-%P titlelen=70 < The value of 'titlelen' is used to align items in the middle or right of the available space. - Some people prefer to have the file name first: > - :set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%) + Some people prefer to have the file name first: >vim + set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%) < Note the use of "%{ }" and an expression to get the path of the file, without the file name. The "%( %)" constructs are used to add a separating space only when needed. @@ -9145,13 +9146,13 @@ return { is kept in memory, higher numbers will cause more memory to be used. Nevertheless, a single change can already use a large amount of memory. Set to 0 for Vi compatibility: One level of undo and "u" undoes - itself: > + itself: >vim set ul=0 < But you can also get Vi compatibility by including the 'u' flag in 'cpoptions', and still be able to use CTRL-R to repeat undo. Also see |undo-two-ways|. Set to -1 for no undo at all. You might want to do this only for the - current buffer: > + current buffer: >vim setlocal ul=-1 < This helps when you run out of memory for a single change. @@ -9237,8 +9238,8 @@ return { For example, when editing assembly language files where statements start in the 9th column and comments in the 41st, it may be useful - to use the following: > - :set varsofttabstop=8,32,8 + to use the following: >vim + set varsofttabstop=8,32,8 < This will set soft tabstops with 8 and 8 + 32 spaces, and 8 more for every column thereafter. @@ -9259,8 +9260,8 @@ return { desc = [=[ A list of the number of spaces that a <Tab> in the file counts for, separated by commas. Each value corresponds to one tab, with the - final value applying to all subsequent tabs. For example: > - :set vartabstop=4,20,10,8 + final value applying to all subsequent tabs. For example: >vim + set vartabstop=4,20,10,8 < This will make the first tab 4 spaces wide, the second 20 spaces, the third 10 spaces, and all following tabs 8 spaces. @@ -9462,8 +9463,8 @@ return { ~ "~" Normal [ <Left> Insert and Replace ] <Right> Insert and Replace - For example: > - :set ww=<,>,[,] + For example: >vim + set ww=<,>,[,] < allows wrap only when cursor keys are used. When the movement keys are used in combination with a delete or change operator, the <EOL> also counts for a character. This makes "3h" @@ -9500,8 +9501,8 @@ return { Some keys will not work, such as CTRL-C, <CR> and Enter. <Esc> can be used, but hitting it twice in a row will still exit command-line as a failsafe measure. - Although 'wc' is a number option, you can set it to a special key: > - :set wc=<Tab> + Although 'wc' is a number option, you can set it to a special key: >vim + set wc=<Tab> < ]=], full_name = 'wildchar', @@ -9519,9 +9520,9 @@ return { recognized when used inside a macro. You can find "spare" command-line keys suitable for this option by looking at |ex-edit-index|. Normally you'll never actually type 'wildcharm', just use it in mappings that - automatically invoke completion mode, e.g.: > - :set wcm=<C-Z> - :cnoremap ss so $vim/sessions/*.vim<C-Z> + automatically invoke completion mode, e.g.: >vim + set wcm=<C-Z> + cnoremap ss so $vim/sessions/*.vim<C-Z> < Then after typing :ss you can use CTRL-P & CTRL-N. ]=], full_name = 'wildcharm', @@ -9541,8 +9542,8 @@ return { |globpath()| unless a flag is passed to disable this. The pattern is used like with |:autocmd|, see |autocmd-pattern|. Also see 'suffixes'. - Example: > - :set wildignore=*.o,*.obj + Example: >vim + set wildignore=*.o,*.obj < The use of |:set+=| and |:set-=| is preferred when adding or removing a pattern from the list. This avoids problems when a future version uses another default. @@ -9605,9 +9606,9 @@ return { completion. If you want <Left> and <Right> to move the cursor instead of selecting - a different match, use this: > - :cnoremap <Left> <Space><BS><Left> - :cnoremap <Right> <Space><BS><Right> + a different match, use this: >vim + cnoremap <Left> <Space><BS><Left> + cnoremap <Right> <Space><BS><Right> < |hl-WildMenu| highlights the current match. ]=], @@ -9654,16 +9655,16 @@ return { and sort buffers by time last used (other than the current buffer). - Examples: > - :set wildmode=full - < Complete first full match, next match, etc. (the default) > - :set wildmode=longest,full - < Complete longest common string, then each full match > - :set wildmode=list:full - < List all matches and complete each full match > - :set wildmode=list,full - < List all matches without completing, then each full match > - :set wildmode=longest,list + Examples: >vim + set wildmode=full + < Complete first full match, next match, etc. (the default) >vim + set wildmode=longest,full + < Complete longest common string, then each full match >vim + set wildmode=list:full + < List all matches and complete each full match >vim + set wildmode=list,full + < List all matches without completing, then each full match >vim + set wildmode=longest,list < Complete longest common string, then list alternatives. More info here: |cmdline-completion|. ]=], @@ -9847,7 +9848,7 @@ return { Other windows will be only 'winminheight' high. This has the drawback that ":all" will create only two windows. To avoid "vim -o 1 2 3 4" to create only two windows, set the option after startup is done, - using the |VimEnter| event: > + using the |VimEnter| event: >vim au VimEnter * set winheight=999 < Minimum value is 1. The height is not adjusted after one of the commands that change the @@ -9883,7 +9884,7 @@ return { the popupmenu are determined by the current window. Highlights in the message area cannot be overridden. - Example: show a different color for non-current windows: > + Example: show a different color for non-current windows: >vim set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC < ]=], @@ -9973,9 +9974,9 @@ return { horizontally. The line will be broken in the middle of a word if necessary. See 'linebreak' to get the break at a word boundary. - To make scrolling horizontally a bit more useful, try this: > - :set sidescroll=5 - :set listchars+=precedes:<,extends:> + To make scrolling horizontally a bit more useful, try this: >vim + set sidescroll=5 + set listchars+=precedes:<,extends:> < See 'sidescroll', 'listchars' and |wrap-off|. This option can't be set from a |modeline| when the 'diff' option is on. diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index 8765fdea4f..0aa11beb6d 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -9,7 +9,6 @@ #include "nvim/ascii_defs.h" #include "nvim/autocmd.h" #include "nvim/buffer_defs.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/rstream.h" diff --git a/src/nvim/os/input.h b/src/nvim/os/input.h index 4b104b0b50..abef46072b 100644 --- a/src/nvim/os/input.h +++ b/src/nvim/os/input.h @@ -4,7 +4,7 @@ #include <stdint.h> // IWYU pragma: keep #include "nvim/api/private/defs.h" // IWYU pragma: keep -#include "nvim/event/multiqueue.h" +#include "nvim/event/defs.h" // IWYU pragma: keep #include "nvim/macros_defs.h" EXTERN bool used_stdin INIT( = false); diff --git a/src/nvim/os/pty_process_unix.c b/src/nvim/os/pty_process_unix.c index 4478d9d7bd..1bdbb094bd 100644 --- a/src/nvim/os/pty_process_unix.c +++ b/src/nvim/os/pty_process_unix.c @@ -32,7 +32,6 @@ #include "auto/config.h" #include "klib/klist.h" #include "nvim/eval/typval.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/process.h" #include "nvim/log.h" diff --git a/src/nvim/os/pty_process_unix.h b/src/nvim/os/pty_process_unix.h index 92cc582832..c04e4c7a20 100644 --- a/src/nvim/os/pty_process_unix.h +++ b/src/nvim/os/pty_process_unix.h @@ -4,8 +4,8 @@ #include <stdint.h> #include <sys/ioctl.h> -#include "nvim/event/loop.h" #include "nvim/event/process.h" +#include "nvim/types_defs.h" typedef struct pty_process { Process process; diff --git a/src/nvim/os/pty_process_win.c b/src/nvim/os/pty_process_win.c index 563a79358c..e898879729 100644 --- a/src/nvim/os/pty_process_win.c +++ b/src/nvim/os/pty_process_win.c @@ -4,6 +4,7 @@ #include "nvim/ascii_defs.h" #include "nvim/eval/typval.h" +#include "nvim/event/loop.h" #include "nvim/log.h" #include "nvim/mbyte.h" #include "nvim/memory.h" diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c index 26c202741a..aa5075a79b 100644 --- a/src/nvim/os/shell.c +++ b/src/nvim/os/shell.c @@ -12,7 +12,6 @@ #include "nvim/charset.h" #include "nvim/eval.h" #include "nvim/eval/typval_defs.h" -#include "nvim/event/defs.h" #include "nvim/event/libuv_process.h" #include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c index 0b0e59946c..0cbedc7330 100644 --- a/src/nvim/os/signal.c +++ b/src/nvim/os/signal.c @@ -9,7 +9,6 @@ #include "nvim/autocmd.h" #include "nvim/buffer_defs.h" #include "nvim/eval.h" -#include "nvim/event/defs.h" #include "nvim/event/signal.h" #include "nvim/globals.h" #include "nvim/log.h" diff --git a/src/nvim/os/time.c b/src/nvim/os/time.c index f842bb0ab8..b2a402f559 100644 --- a/src/nvim/os/time.c +++ b/src/nvim/os/time.c @@ -7,7 +7,8 @@ #include <uv.h> #include "auto/config.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" +#include "nvim/event/multiqueue.h" #include "nvim/gettext.h" #include "nvim/globals.h" #include "nvim/log.h" diff --git a/src/nvim/popupmenu.c b/src/nvim/popupmenu.c index df82cb259e..bb4cad0b54 100644 --- a/src/nvim/popupmenu.c +++ b/src/nvim/popupmenu.c @@ -6,7 +6,6 @@ #include <stdbool.h> #include <string.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/api/vim.h" #include "nvim/ascii_defs.h" diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index 20c06340be..87f28a4379 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -13,7 +13,7 @@ #include <stdbool.h> #include <stddef.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" @@ -6379,7 +6379,7 @@ static bool regmatch(uint8_t *scan, const proftime_T *tm, int *timed_out) case RE_COMPOSING: // Skip composing characters. while (utf_iscomposing(utf_ptr2char((char *)rex.input))) { - MB_CPTR_ADV(rex.input); + rex.input += utf_ptr2len((char *)rex.input); } break; @@ -9840,7 +9840,7 @@ static int nfa_regatom(void) emsg(_(e_nopresub)); return FAIL; } - for (lp = (uint8_t *)reg_prev_sub; *lp != NUL; MB_CPTR_ADV(lp)) { + for (lp = (uint8_t *)reg_prev_sub; *lp != NUL; lp += utf_ptr2len((char *)lp)) { EMIT(utf_ptr2char((char *)lp)); if (lp != (uint8_t *)reg_prev_sub) { EMIT(NFA_CONCAT); diff --git a/src/nvim/shada.c b/src/nvim/shada.c index 5c479bb1c6..09142e55e0 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -13,7 +13,6 @@ #include <uv.h> #include "auto/config.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer.h" diff --git a/src/nvim/sign.c b/src/nvim/sign.c index 41ec4572ee..690da8999e 100644 --- a/src/nvim/sign.c +++ b/src/nvim/sign.c @@ -9,7 +9,6 @@ #include "klib/kvec.h" #include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer.h" diff --git a/src/nvim/spell_defs.h b/src/nvim/spell_defs.h index 6293bc314b..37048451a2 100644 --- a/src/nvim/spell_defs.h +++ b/src/nvim/spell_defs.h @@ -216,18 +216,6 @@ typedef struct { uint8_t st_upper[256]; ///< chars: upper case } spelltab_T; -// Use our own character-case definitions, because the current locale may -// differ from what the .spl file uses. -// These must not be called with negative number! -// Multi-byte implementation. For Unicode we can call utf_*(), but don't do -// that for ASCII, because we don't want to use 'casemap' here. Otherwise use -// the "w" library function for characters above 255. -#define SPELL_TOFOLD(c) ((c) >= 128 ? utf_fold(c) : (int)spelltab.st_fold[c]) - -#define SPELL_TOUPPER(c) ((c) >= 128 ? mb_toupper(c) : (int)spelltab.st_upper[c]) - -#define SPELL_ISUPPER(c) ((c) >= 128 ? mb_isupper(c) : spelltab.st_isu[c]) - /// Values for "what" argument of spell_add_word() typedef enum { SPELL_ADD_GOOD = 0, diff --git a/src/nvim/spellfile.c b/src/nvim/spellfile.c index 979495e810..0cffd5741e 100644 --- a/src/nvim/spellfile.c +++ b/src/nvim/spellfile.c @@ -1536,7 +1536,7 @@ static int set_sofo(slang_T *lp, const char *from, const char *to) // sl_sal_first[] for this. for (p = from, s = to; *p != NUL && *s != NUL;) { const int c = mb_cptr2char_adv(&p); - MB_CPTR_ADV(s); + s += utf_ptr2len(s); if (c >= 256) { lp->sl_sal_first[c & 0xff]++; } diff --git a/src/nvim/state.c b/src/nvim/state.c index 518ceb8c88..d04c131226 100644 --- a/src/nvim/state.c +++ b/src/nvim/state.c @@ -7,7 +7,7 @@ #include "nvim/drawscreen.h" #include "nvim/eval.h" #include "nvim/eval/typval.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/ex_getln.h" #include "nvim/getchar.h" diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index b0d3988ce6..e249317bd3 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -6,7 +6,6 @@ #include <stdlib.h> #include <string.h> -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer.h" @@ -1178,7 +1177,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op out_p = out_p - n + 1; // Fill up space left over by half a double-wide char. while (++group_len < stl_items[stl_groupitems[groupdepth]].minwid) { - MB_CHAR2BYTES(fillchar, out_p); + out_p += utf_char2bytes(fillchar, out_p); } // } @@ -1201,7 +1200,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op if (min_group_width < 0) { min_group_width = 0 - min_group_width; while (group_len++ < min_group_width && out_p < out_end_p) { - MB_CHAR2BYTES(fillchar, out_p); + out_p += utf_char2bytes(fillchar, out_p); } // If the group is right-aligned, shift everything to the right and // prepend with filler characters. @@ -1222,7 +1221,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op // Prepend the fill characters for (; group_len > 0; group_len--) { - MB_CHAR2BYTES(fillchar, t); + t += utf_char2bytes(fillchar, t); } } } @@ -1815,7 +1814,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op if (l + 1 == minwid && fillchar == '-' && ascii_isdigit(*t)) { *out_p++ = ' '; } else { - MB_CHAR2BYTES(fillchar, out_p); + out_p += utf_char2bytes(fillchar, out_p); } } minwid = 0; @@ -1838,7 +1837,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op // digit follows. if (fillable && *t == ' ' && (!ascii_isdigit(*(t + 1)) || fillchar != '-')) { - MB_CHAR2BYTES(fillchar, out_p); + out_p += utf_char2bytes(fillchar, out_p); } else { *out_p++ = *t; } @@ -1855,7 +1854,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op // For left-aligned items, fill any remaining space with the fillchar for (; l < minwid && out_p < out_end_p; l++) { - MB_CHAR2BYTES(fillchar, out_p); + out_p += utf_char2bytes(fillchar, out_p); } // Otherwise if the item is a number, copy that to the output buffer. @@ -2076,7 +2075,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op // Fill up for half a double-wide character. while (++width < maxwidth) { - MB_CHAR2BYTES(fillchar, trunc_p); + trunc_p += utf_char2bytes(fillchar, trunc_p); *trunc_p = NUL; } } @@ -2111,7 +2110,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op char *seploc = start + dislocation; STRMOVE(seploc, start); for (char *s = start; s < seploc;) { - MB_CHAR2BYTES(fillchar, s); + s += utf_char2bytes(fillchar, s); } for (int item_idx = stl_separator_locations[l] + 1; diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index 1586dd3d8e..80e5d5b126 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -44,7 +44,6 @@ #include <vterm_keycodes.h> #include "klib/kvec.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/autocmd.h" @@ -56,7 +55,7 @@ #include "nvim/drawscreen.h" #include "nvim/eval.h" #include "nvim/eval/typval.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" #include "nvim/event/time.h" #include "nvim/ex_docmd.h" diff --git a/src/nvim/textformat.c b/src/nvim/textformat.c index 1b9732c5b2..7803322439 100644 --- a/src/nvim/textformat.c +++ b/src/nvim/textformat.c @@ -18,7 +18,6 @@ #include "nvim/globals.h" #include "nvim/indent.h" #include "nvim/indent_c.h" -#include "nvim/macros_defs.h" #include "nvim/mark.h" #include "nvim/mbyte.h" #include "nvim/memline.h" diff --git a/src/nvim/textobject.c b/src/nvim/textobject.c index 9c601769c0..0cfbb50684 100644 --- a/src/nvim/textobject.c +++ b/src/nvim/textobject.c @@ -14,7 +14,6 @@ #include "nvim/fold.h" #include "nvim/globals.h" #include "nvim/indent.h" -#include "nvim/macros_defs.h" #include "nvim/mark.h" #include "nvim/mbyte.h" #include "nvim/memline.h" diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c index 9ba21a6afd..c7880b591d 100644 --- a/src/nvim/tui/input.c +++ b/src/nvim/tui/input.c @@ -4,9 +4,8 @@ #include <string.h> #include "klib/kvec.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" -#include "nvim/event/defs.h" +#include "nvim/event/loop.h" #include "nvim/event/stream.h" #include "nvim/macros_defs.h" #include "nvim/main.h" diff --git a/src/nvim/tui/input.h b/src/nvim/tui/input.h index bc490754be..2da7f95338 100644 --- a/src/nvim/tui/input.h +++ b/src/nvim/tui/input.h @@ -4,7 +4,6 @@ #include <stdint.h> #include <uv.h> -#include "nvim/event/loop.h" #include "nvim/event/stream.h" #include "nvim/rbuffer_defs.h" #include "nvim/tui/input_defs.h" // IWYU pragma: export diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 6c0b00f010..934b498df9 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -15,7 +15,6 @@ #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/cursor_shape.h" -#include "nvim/event/defs.h" #include "nvim/event/loop.h" #include "nvim/event/signal.h" #include "nvim/event/stream.h" diff --git a/src/nvim/types_defs.h b/src/nvim/types_defs.h index 81845eecdb..0573439b73 100644 --- a/src/nvim/types_defs.h +++ b/src/nvim/types_defs.h @@ -59,7 +59,8 @@ typedef struct { enum { SIGN_WIDTH = 2, }; ///< Number of display cells for a sign in the signcolumn typedef struct file_buffer buf_T; +typedef struct loop Loop; +typedef struct regprog regprog_T; typedef struct syn_state synstate_T; typedef struct terminal Terminal; typedef struct window_S win_T; -typedef struct regprog regprog_T; diff --git a/src/nvim/ui.h b/src/nvim/ui.h index f61398a7a0..b783e4b6d3 100644 --- a/src/nvim/ui.h +++ b/src/nvim/ui.h @@ -3,7 +3,7 @@ #include <stdint.h> // IWYU pragma: keep #include "nvim/api/private/defs.h" // IWYU pragma: keep -#include "nvim/event/multiqueue.h" +#include "nvim/event/defs.h" #include "nvim/grid_defs.h" // IWYU pragma: keep #include "nvim/highlight_defs.h" // IWYU pragma: keep #include "nvim/macros_defs.h" @@ -27,7 +27,7 @@ EXTERN const char *ui_ext_names[] INIT( = { // uncrustify:off #ifdef INCLUDE_GENERATED_DECLARATIONS # include "ui.h.generated.h" -# include "ui_events_call.h.generated.h" // IWYU pragma: export +# include "ui_events_call.h.generated.h" #endif // uncrustify:on diff --git a/src/nvim/ui_client.c b/src/nvim/ui_client.c index fdd859ba29..c7c0457fcd 100644 --- a/src/nvim/ui_client.c +++ b/src/nvim/ui_client.c @@ -10,7 +10,7 @@ #include "nvim/channel.h" #include "nvim/eval.h" #include "nvim/eval/typval_defs.h" -#include "nvim/event/defs.h" +#include "nvim/event/multiqueue.h" #include "nvim/globals.h" #include "nvim/highlight.h" #include "nvim/log.h" diff --git a/src/nvim/ui_client.h b/src/nvim/ui_client.h index 93170ed86d..8603ae9ca1 100644 --- a/src/nvim/ui_client.h +++ b/src/nvim/ui_client.h @@ -39,6 +39,6 @@ EXTERN bool ui_client_forward_stdin INIT( = false); // uncrustify:off #ifdef INCLUDE_GENERATED_DECLARATIONS # include "ui_client.h.generated.h" -# include "ui_events_client.h.generated.h" // IWYU pragma: export +# include "ui_events_client.h.generated.h" #endif // uncrustify:on diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index d8969b0061..4cd11f3ccf 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -9,7 +9,7 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> +#include <uv.h> #include "klib/kvec.h" #include "nvim/api/private/defs.h" diff --git a/src/nvim/undo.c b/src/nvim/undo.c index 7c44f0de62..2d631f237f 100644 --- a/src/nvim/undo.c +++ b/src/nvim/undo.c @@ -77,7 +77,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/types.h> #include <time.h> #include <uv.h> @@ -106,6 +105,7 @@ #include "nvim/highlight.h" #include "nvim/macros_defs.h" #include "nvim/mark.h" +#include "nvim/mbyte.h" #include "nvim/memline.h" #include "nvim/memory.h" #include "nvim/message.h" diff --git a/src/nvim/usercmd.c b/src/nvim/usercmd.c index 9872468ba9..86c0dc8367 100644 --- a/src/nvim/usercmd.c +++ b/src/nvim/usercmd.c @@ -8,7 +8,6 @@ #include <string.h> #include "auto/config.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" diff --git a/src/nvim/usercmd.h b/src/nvim/usercmd.h index 4d6d154b79..4ad9767e1f 100644 --- a/src/nvim/usercmd.h +++ b/src/nvim/usercmd.h @@ -10,7 +10,7 @@ #include "nvim/garray_defs.h" #include "nvim/types_defs.h" // IWYU pragma: keep -typedef struct ucmd { +typedef struct { char *uc_name; ///< The command name uint32_t uc_argt; ///< The argument type char *uc_rep; ///< The command's replacement string diff --git a/src/nvim/version.c b/src/nvim/version.c index 2caf2c0cb8..814c8f5169 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -13,7 +13,6 @@ #include "auto/versiondef.h" // version info generated by the build system #include "auto/versiondef_git.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" #include "nvim/buffer.h" diff --git a/src/nvim/viml/parser/expressions.h b/src/nvim/viml/parser/expressions.h index 94287ea4e1..ff33b9ead1 100644 --- a/src/nvim/viml/parser/expressions.h +++ b/src/nvim/viml/parser/expressions.h @@ -8,8 +8,6 @@ #include "nvim/types_defs.h" #include "nvim/viml/parser/parser.h" -struct expr_ast_node; - // Defines whether to ignore case: // == kCCStrategyUseOption // ==# kCCStrategyMatchCase diff --git a/src/nvim/viml/parser/parser.h b/src/nvim/viml/parser/parser.h index cd5a493643..b29a77b5ef 100644 --- a/src/nvim/viml/parser/parser.h +++ b/src/nvim/viml/parser/parser.h @@ -7,7 +7,6 @@ #include "klib/kvec.h" #include "nvim/func_attr.h" #include "nvim/mbyte.h" -#include "nvim/mbyte_defs.h" #include "nvim/memory.h" /// One parsed line diff --git a/src/nvim/vvars.lua b/src/nvim/vvars.lua new file mode 100644 index 0000000000..d1b5e13401 --- /dev/null +++ b/src/nvim/vvars.lua @@ -0,0 +1,869 @@ +local M = {} + +M.vars = { + argv = { + type = 'string[]', + desc = [=[ + The command line arguments Vim was invoked with. This is a + list of strings. The first item is the Vim command. + See |v:progpath| for the command with full path. + ]=], + }, + char = { + desc = [=[ + Argument for evaluating 'formatexpr' and used for the typed + character when using <expr> in an abbreviation |:map-<expr>|. + It is also used by the |InsertCharPre| and |InsertEnter| events. + ]=], + }, + charconvert_from = { + type = 'string', + desc = [=[ + The name of the character encoding of a file to be converted. + Only valid while evaluating the 'charconvert' option. + ]=], + }, + charconvert_to = { + type = 'string', + desc = [=[ + The name of the character encoding of a file after conversion. + Only valid while evaluating the 'charconvert' option. + ]=], + }, + cmdarg = { + type = 'string[]', + desc = [=[ + The extra arguments ("++p", "++enc=", "++ff=") given to a file + read/write command. This is set before an autocommand event + for a file read/write command is triggered. There is a + leading space to make it possible to append this variable + directly after the read/write command. Note: "+cmd" isn't + included here, because it will be executed anyway. + ]=], + }, + collate = { + type = 'string', + desc = [=[ + The current locale setting for collation order of the runtime + environment. This allows Vim scripts to be aware of the + current locale encoding. Technical: it's the value of + LC_COLLATE. When not using a locale the value is "C". + This variable can not be set directly, use the |:language| + command. + See |multi-lang|. + ]=], + }, + cmdbang = { + desc = [=[ + Set like v:cmdarg for a file read/write command. When a "!" + was used the value is 1, otherwise it is 0. Note that this + can only be used in autocommands. For user commands |<bang>| + can be used. + ]=], + }, + completed_item = { + desc = [=[ + Dictionary containing the most recent |complete-items| after + |CompleteDone|. Empty if the completion failed, or after + leaving and re-entering insert mode. + Note: Plugins can modify the value to emulate the builtin + |CompleteDone| event behavior. + ]=], + }, + count = { + type = 'integer', + desc = [=[ + The count given for the last Normal mode command. Can be used + to get the count before a mapping. Read-only. Example: >vim + :map _x :<C-U>echo "the count is " .. v:count<CR> + < + Note: The <C-U> is required to remove the line range that you + get when typing ':' after a count. + When there are two counts, as in "3d2w", they are multiplied, + just like what happens in the command, "d6w" for the example. + Also used for evaluating the 'formatexpr' option. + ]=], + }, + count1 = { + type = 'integer', + desc = [=[ + Just like "v:count", but defaults to one when no count is + used. + ]=], + }, + ctype = { + desc = [=[ + The current locale setting for characters of the runtime + environment. This allows Vim scripts to be aware of the + current locale encoding. Technical: it's the value of + LC_CTYPE. When not using a locale the value is "C". + This variable can not be set directly, use the |:language| + command. + See |multi-lang|. + ]=], + }, + dying = { + type = 'integer', + desc = [=[ + Normally zero. When a deadly signal is caught it's set to + one. When multiple signals are caught the number increases. + Can be used in an autocommand to check if Vim didn't + terminate normally. + Example: >vim + :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif + < + Note: if another deadly signal is caught when v:dying is one, + VimLeave autocommands will not be executed. + ]=], + }, + exiting = { + desc = [=[ + Exit code, or |v:null| before invoking the |VimLeavePre| + and |VimLeave| autocmds. See |:q|, |:x| and |:cquit|. + Example: >vim + :au VimLeave * echo "Exit value is " .. v:exiting + < + ]=], + }, + echospace = { + type = 'integer', + desc = [=[ + Number of screen cells that can be used for an `:echo` message + in the last screen line before causing the |hit-enter-prompt|. + Depends on 'showcmd', 'ruler' and 'columns'. You need to + check 'cmdheight' for whether there are full-width lines + available above the last line. + ]=], + }, + errmsg = { + type = 'string', + desc = [=[ + Last given error message. + Modifiable (can be set). + Example: >vim + let v:errmsg = "" + silent! next + if v:errmsg != "" + " ... handle error + < + ]=], + }, + errors = { + tags = { 'assert-return' }, + desc = [=[ + Errors found by assert functions, such as |assert_true()|. + This is a list of strings. + The assert functions append an item when an assert fails. + The return value indicates this: a one is returned if an item + was added to v:errors, otherwise zero is returned. + To remove old results make it empty: >vim + let v:errors = [] + < + If v:errors is set to anything but a list it is made an empty + list by the assert function. + ]=], + }, + event = { + desc = [=[ + Dictionary of event data for the current |autocommand|. Valid + only during the event lifetime; storing or passing v:event is + invalid! Copy it instead: >vim + au TextYankPost * let g:foo = deepcopy(v:event) + < + Keys vary by event; see the documentation for the specific + event, e.g. |DirChanged| or |TextYankPost|. + KEY DESCRIPTION ~ + abort Whether the event triggered during + an aborting condition (e.g. |c_Esc| or + |c_CTRL-C| for |CmdlineLeave|). + chan |channel-id| + cmdlevel Level of cmdline. + cmdtype Type of cmdline, |cmdline-char|. + cwd Current working directory. + inclusive Motion is |inclusive|, else exclusive. + scope Event-specific scope name. + operator Current |operator|. Also set for Ex + commands (unlike |v:operator|). For + example if |TextYankPost| is triggered + by the |:yank| Ex command then + `v:event.operator` is "y". + regcontents Text stored in the register as a + |readfile()|-style list of lines. + regname Requested register (e.g "x" for "xyy) + or the empty string for an unnamed + operation. + regtype Type of register as returned by + |getregtype()|. + visual Selection is visual (as opposed to, + e.g., via motion). + completed_item Current selected complete item on + |CompleteChanged|, Is `{}` when no complete + item selected. + height Height of popup menu on |CompleteChanged| + width Width of popup menu on |CompleteChanged| + row Row count of popup menu on |CompleteChanged|, + relative to screen. + col Col count of popup menu on |CompleteChanged|, + relative to screen. + size Total number of completion items on + |CompleteChanged|. + scrollbar Is |v:true| if popup menu have scrollbar, or + |v:false| if not. + changed_window Is |v:true| if the event fired while + changing window (or tab) on |DirChanged|. + status Job status or exit code, -1 means "unknown". |TermClose| + ]=], + }, + exception = { + desc = [=[ + The value of the exception most recently caught and not + finished. See also |v:throwpoint| and |throw-variables|. + Example: >vim + try + throw "oops" + catch /.*/ + echo "caught " .. v:exception + endtry + < + Output: "caught oops". + ]=], + }, + ['false'] = { + desc = [=[ + Special value used to put "false" in JSON and msgpack. See + |json_encode()|. This value is converted to "v:false" when used + as a String (e.g. in |expr5| with string concatenation + operator) and to zero when used as a Number (e.g. in |expr5| + or |expr7| when used with numeric operators). Read-only. + ]=], + }, + fcs_reason = { + type = 'string', + desc = [=[ + The reason why the |FileChangedShell| event was triggered. + Can be used in an autocommand to decide what to do and/or what + to set v:fcs_choice to. Possible values: + deleted file no longer exists + conflict file contents, mode or timestamp was + changed and buffer is modified + changed file contents has changed + mode mode of file changed + time only file timestamp changed + ]=], + }, + fcs_choice = { + type = 'string', + desc = [=[ + What should happen after a |FileChangedShell| event was + triggered. Can be used in an autocommand to tell Vim what to + do with the affected buffer: + reload Reload the buffer (does not work if + the file was deleted). + edit Reload the buffer and detect the + values for options such as + 'fileformat', 'fileencoding', 'binary' + (does not work if the file was + deleted). + ask Ask the user what to do, as if there + was no autocommand. Except that when + only the timestamp changed nothing + will happen. + <empty> Nothing, the autocommand should do + everything that needs to be done. + The default is empty. If another (invalid) value is used then + Vim behaves like it is empty, there is no warning message. + ]=], + }, + fname = { + type = 'string', + desc = [=[ + When evaluating 'includeexpr': the file name that was + detected. Empty otherwise. + ]=], + }, + fname_in = { + type = 'string', + desc = [=[ + The name of the input file. Valid while evaluating: + option used for ~ + 'charconvert' file to be converted + 'diffexpr' original file + 'patchexpr' original file + And set to the swap file name for |SwapExists|. + ]=], + }, + fname_out = { + type = 'string', + desc = [=[ + The name of the output file. Only valid while + evaluating: + option used for ~ + 'charconvert' resulting converted file [1] + 'diffexpr' output of diff + 'patchexpr' resulting patched file + [1] When doing conversion for a write command (e.g., ":w + file") it will be equal to v:fname_in. When doing conversion + for a read command (e.g., ":e file") it will be a temporary + file and different from v:fname_in. + ]=], + }, + fname_new = { + type = 'string', + desc = [=[ + The name of the new version of the file. Only valid while + evaluating 'diffexpr'. + ]=], + }, + fname_diff = { + type = 'string', + desc = [=[ + The name of the diff (patch) file. Only valid while + evaluating 'patchexpr'. + ]=], + }, + folddashes = { + type = 'string', + desc = [=[ + Used for 'foldtext': dashes representing foldlevel of a closed + fold. + Read-only in the |sandbox|. |fold-foldtext| + ]=], + }, + foldlevel = { + type = 'integer', + desc = [=[ + Used for 'foldtext': foldlevel of closed fold. + Read-only in the |sandbox|. |fold-foldtext| + ]=], + }, + foldend = { + type = 'integer', + desc = [=[ + Used for 'foldtext': last line of closed fold. + Read-only in the |sandbox|. |fold-foldtext| + ]=], + }, + foldstart = { + type = 'integer', + desc = [=[ + Used for 'foldtext': first line of closed fold. + Read-only in the |sandbox|. |fold-foldtext| + ]=], + }, + hlsearch = { + type = 'integer', + desc = [=[ + Variable that indicates whether search highlighting is on. + Setting it makes sense only if 'hlsearch' is enabled. Setting + this variable to zero acts like the |:nohlsearch| command, + setting it to one acts like >vim + let &hlsearch = &hlsearch + < + Note that the value is restored when returning from a + function. |function-search-undo|. + ]=], + }, + insertmode = { + type = 'string', + desc = [=[ + Used for the |InsertEnter| and |InsertChange| autocommand + events. Values: + i Insert mode + r Replace mode + v Virtual Replace mode + ]=], + }, + key = { + type = 'string', + desc = [=[ + Key of the current item of a |Dictionary|. Only valid while + evaluating the expression used with |map()| and |filter()|. + Read-only. + ]=], + }, + lang = { + type = 'string', + desc = [=[ + The current locale setting for messages of the runtime + environment. This allows Vim scripts to be aware of the + current language. Technical: it's the value of LC_MESSAGES. + The value is system dependent. + This variable can not be set directly, use the |:language| + command. + It can be different from |v:ctype| when messages are desired + in a different language than what is used for character + encoding. See |multi-lang|. + ]=], + }, + lc_time = { + type = 'string', + desc = [=[ + The current locale setting for time messages of the runtime + environment. This allows Vim scripts to be aware of the + current language. Technical: it's the value of LC_TIME. + This variable can not be set directly, use the |:language| + command. See |multi-lang|. + ]=], + }, + lnum = { + type = 'integer', + desc = [=[ + Line number for the 'foldexpr' |fold-expr|, 'formatexpr', + 'indentexpr' and 'statuscolumn' expressions, tab page number + for 'guitablabel' and 'guitabtooltip'. Only valid while one of + these expressions is being evaluated. Read-only when in the + |sandbox|. + ]=], + }, + lua = { + desc = [=[ + Prefix for calling Lua functions from expressions. + See |v:lua-call| for more information. + ]=], + }, + maxcol = { + type = 'integer', + desc = [=[ + Maximum line length. Depending on where it is used it can be + screen columns, characters or bytes. The value currently is + 2147483647 on all systems. + ]=], + }, + mouse_win = { + type = 'integer', + desc = [=[ + Window number for a mouse click obtained with |getchar()|. + First window has number 1, like with |winnr()|. The value is + zero when there was no mouse button click. + ]=], + }, + mouse_winid = { + type = 'integer', + desc = [=[ + |window-ID| for a mouse click obtained with |getchar()|. + The value is zero when there was no mouse button click. + ]=], + }, + mouse_lnum = { + type = 'integer', + desc = [=[ + Line number for a mouse click obtained with |getchar()|. + This is the text line number, not the screen line number. The + value is zero when there was no mouse button click. + ]=], + }, + mouse_col = { + type = 'integer', + desc = [=[ + Column number for a mouse click obtained with |getchar()|. + This is the screen column number, like with |virtcol()|. The + value is zero when there was no mouse button click. + ]=], + }, + msgpack_types = { + desc = [=[ + Dictionary containing msgpack types used by |msgpackparse()| + and |msgpackdump()|. All types inside dictionary are fixed + (not editable) empty lists. To check whether some list is one + of msgpack types, use |is| operator. + ]=], + }, + null = { + desc = [=[ + Special value used to put "null" in JSON and NIL in msgpack. + See |json_encode()|. This value is converted to "v:null" when + used as a String (e.g. in |expr5| with string concatenation + operator) and to zero when used as a Number (e.g. in |expr5| + or |expr7| when used with numeric operators). Read-only. + In some places `v:null` can be used for a List, Dict, etc. + that is not set. That is slightly different than an empty + List, Dict, etc. + ]=], + }, + numbermax = { + type = 'integer', + desc = 'Maximum value of a number.', + }, + numbermin = { + type = 'integer', + desc = 'Minimum value of a number (negative).', + }, + numbersize = { + type = 'integer', + desc = [=[ + Number of bits in a Number. This is normally 64, but on some + systems it may be 32. + ]=], + }, + oldfiles = { + type = 'string[]', + desc = [=[ + List of file names that is loaded from the |shada| file on + startup. These are the files that Vim remembers marks for. + The length of the List is limited by the ' argument of the + 'shada' option (default is 100). + When the |shada| file is not used the List is empty. + Also see |:oldfiles| and |c_#<|. + The List can be modified, but this has no effect on what is + stored in the |shada| file later. If you use values other + than String this will cause trouble. + ]=], + }, + option_new = { + desc = [=[ + New value of the option. Valid while executing an |OptionSet| + autocommand. + ]=], + }, + option_old = { + desc = [=[ + Old value of the option. Valid while executing an |OptionSet| + autocommand. Depending on the command used for setting and the + kind of option this is either the local old value or the + global old value. + ]=], + }, + option_oldlocal = { + desc = [=[ + Old local value of the option. Valid while executing an + |OptionSet| autocommand. + ]=], + }, + option_oldglobal = { + desc = [=[ + Old global value of the option. Valid while executing an + |OptionSet| autocommand. + ]=], + }, + option_type = { + type = 'string', + desc = [=[ + Scope of the set command. Valid while executing an + |OptionSet| autocommand. Can be either "global" or "local" + ]=], + }, + option_command = { + type = 'string', + desc = [=[ + Command used to set the option. Valid while executing an + |OptionSet| autocommand. + value option was set via ~ + "setlocal" |:setlocal| or `:let l:xxx` + "setglobal" |:setglobal| or `:let g:xxx` + "set" |:set| or |:let| + "modeline" |modeline| + ]=], + }, + operator = { + type = 'string', + desc = [=[ + The last operator given in Normal mode. This is a single + character except for commands starting with <g> or <z>, + in which case it is two characters. Best used alongside + |v:prevcount| and |v:register|. Useful if you want to cancel + Operator-pending mode and then use the operator, e.g.: >vim + :omap O <Esc>:call MyMotion(v:operator)<CR> + < + The value remains set until another operator is entered, thus + don't expect it to be empty. + v:operator is not set for |:delete|, |:yank| or other Ex + commands. + Read-only. + ]=], + }, + prevcount = { + type = 'integer', + desc = [=[ + The count given for the last but one Normal mode command. + This is the v:count value of the previous command. Useful if + you want to cancel Visual or Operator-pending mode and then + use the count, e.g.: >vim + :vmap % <Esc>:call MyFilter(v:prevcount)<CR> + < + Read-only. + ]=], + }, + profiling = { + type = 'integer', + desc = [=[ + Normally zero. Set to one after using ":profile start". + See |profiling|. + ]=], + }, + progname = { + type = 'string', + desc = [=[ + The name by which Nvim was invoked (with path removed). + Read-only. + ]=], + }, + progpath = { + type = 'string', + desc = [=[ + Absolute path to the current running Nvim. + Read-only. + ]=], + }, + register = { + type = 'string', + desc = [=[ + The name of the register in effect for the current normal mode + command (regardless of whether that command actually used a + register). Or for the currently executing normal mode mapping + (use this in custom commands that take a register). + If none is supplied it is the default register '"', unless + 'clipboard' contains "unnamed" or "unnamedplus", then it is + "*" or '+'. + Also see |getreg()| and |setreg()| + ]=], + }, + relnum = { + type = 'integer', + desc = [=[ + Relative line number for the 'statuscolumn' expression. + Read-only. + ]=], + }, + scrollstart = { + desc = [=[ + String describing the script or function that caused the + screen to scroll up. It's only set when it is empty, thus the + first reason is remembered. It is set to "Unknown" for a + typed command. + This can be used to find out why your script causes the + hit-enter prompt. + ]=], + }, + servername = { + type = 'string', + desc = [=[ + Primary listen-address of Nvim, the first item returned by + |serverlist()|. Usually this is the named pipe created by Nvim + at |startup| or given by |--listen| (or the deprecated + |$NVIM_LISTEN_ADDRESS| env var). + + See also |serverstart()| |serverstop()|. + Read-only. + + *$NVIM* + $NVIM is set by |terminal| and |jobstart()|, and is thus + a hint that the current environment is a subprocess of Nvim. + Example: >vim + if $NVIM + echo nvim_get_chan_info(v:parent) + endif + < + + Note the contents of $NVIM may change in the future. + ]=], + }, + searchforward = { + type = 'integer', + desc = [=[ + Search direction: 1 after a forward search, 0 after a + backward search. It is reset to forward when directly setting + the last search pattern, see |quote/|. + Note that the value is restored when returning from a + function. |function-search-undo|. + Read-write. + ]=], + }, + shell_error = { + type = 'string', + desc = [=[ + Result of the last shell command. When non-zero, the last + shell command had an error. When zero, there was no problem. + This only works when the shell returns the error code to Vim. + The value -1 is often used when the command could not be + executed. Read-only. + Example: >vim + !mv foo bar + if v:shell_error + echo 'could not rename "foo" to "bar"!' + endif + < + ]=], + }, + statusmsg = { + type = 'string', + desc = [=[ + Last given status message. + Modifiable (can be set). + ]=], + }, + stderr = { + type = 'string', + desc = [=[ + |channel-id| corresponding to stderr. The value is always 2; + use this variable to make your code more descriptive. + Unlike stdin and stdout (see |stdioopen()|), stderr is always + open for writing. Example: >vim + :call chansend(v:stderr, "error: toaster empty\n") + < + ]=], + }, + swapname = { + type = 'string', + desc = [=[ + Name of the swapfile found. + Only valid during |SwapExists| event. + Read-only. + ]=], + }, + swapchoice = { + type = 'string', + desc = [=[ + |SwapExists| autocommands can set this to the selected choice + for handling an existing swapfile: + 'o' Open read-only + 'e' Edit anyway + 'r' Recover + 'd' Delete swapfile + 'q' Quit + 'a' Abort + The value should be a single-character string. An empty value + results in the user being asked, as would happen when there is + no SwapExists autocommand. The default is empty. + ]=], + }, + swapcommand = { + type = 'string', + desc = [=[ + Normal mode command to be executed after a file has been + opened. Can be used for a |SwapExists| autocommand to have + another Vim open the file and jump to the right place. For + example, when jumping to a tag the value is ":tag tagname\r". + For ":edit +cmd file" the value is ":cmd\r". + ]=], + }, + t_blob = { + type = 'integer', + tags = { 'v:t_TYPE' }, + desc = 'Value of |Blob| type. Read-only. See: |type()|', + }, + t_bool = { + type = 'integer', + desc = 'Value of |Boolean| type. Read-only. See: |type()|', + }, + t_dict = { + type = 'integer', + desc = 'Value of |Dictionary| type. Read-only. See: |type()|', + }, + t_float = { + type = 'integer', + desc = 'Value of |Float| type. Read-only. See: |type()|', + }, + t_func = { + type = 'integer', + desc = 'Value of |Funcref| type. Read-only. See: |type()|', + }, + t_list = { + type = 'integer', + desc = 'Value of |List| type. Read-only. See: |type()|', + }, + t_number = { + type = 'integer', + desc = 'Value of |Number| type. Read-only. See: |type()|', + }, + t_string = { + type = 'integer', + desc = 'Value of |String| type. Read-only. See: |type()|', + }, + termresponse = { + desc = [=[ + The value of the most recent OSC or DCS escape sequence + received by Nvim from the terminal. This can be read in a + |TermResponse| event handler after querying the terminal using + another escape sequence. + ]=], + }, + testing = { + desc = [=[ + Must be set before using `test_garbagecollect_now()`. + ]=], + }, + this_session = { + desc = [=[ + Full filename of the last loaded or saved session file. + Empty when no session file has been saved. See |:mksession|. + Modifiable (can be set). + ]=], + }, + throwpoint = { + desc = [=[ + The point where the exception most recently caught and not + finished was thrown. Not set when commands are typed. See + also |v:exception| and |throw-variables|. + Example: >vim + try + throw "oops" + catch /.*/ + echo "Exception from" v:throwpoint + endtry + < + Output: "Exception from test.vim, line 2" + ]=], + }, + ['true'] = { + desc = [=[ + Special value used to put "true" in JSON and msgpack. See + |json_encode()|. This value is converted to "v:true" when used + as a String (e.g. in |expr5| with string concatenation + operator) and to one when used as a Number (e.g. in |expr5| or + |expr7| when used with numeric operators). Read-only. + ]=], + }, + val = { + desc = [=[ + Value of the current item of a |List| or |Dictionary|. Only + valid while evaluating the expression used with |map()| and + |filter()|. Read-only. + ]=], + }, + version = { + type = 'integer', + desc = [=[ + Vim version number: major version times 100 plus minor + version. Vim 5.0 is 500, Vim 5.1 is 501. + Read-only. + Use |has()| to check the Nvim (not Vim) version: >vim + :if has("nvim-0.2.1") + < + ]=], + }, + virtnum = { + type = 'integer', + desc = [=[ + Virtual line number for the 'statuscolumn' expression. + Negative when drawing the status column for virtual lines, zero + when drawing an actual buffer line, and positive when drawing + the wrapped part of a buffer line. + Read-only. + ]=], + }, + vim_did_enter = { + type = 'integer', + desc = [=[ + 0 during startup, 1 just before |VimEnter|. + Read-only. + ]=], + }, + warningmsg = { + type = 'string', + desc = [=[ + Last given warning message. + Modifiable (can be set). + ]=], + }, + windowid = { + type = 'integer', + desc = [=[ + Application-specific window "handle" which may be set by any + attached UI. Defaults to zero. + Note: For Nvim |windows| use |winnr()| or |win_getid()|, see + |window-ID|. + ]=], + }, +} + +return M diff --git a/src/nvim/window.c b/src/nvim/window.c index 929a06350b..b140337fec 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -8,7 +8,6 @@ #include <string.h> #include "klib/kvec.h" -#include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/arglist.h" #include "nvim/ascii_defs.h" |