aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/CMakeLists.txt63
-rw-r--r--src/nvim/api/buffer.c182
-rw-r--r--src/nvim/api/dispatch_deprecated.lua69
-rw-r--r--src/nvim/api/private/defs.h7
-rw-r--r--src/nvim/api/private/dispatch.h23
-rw-r--r--src/nvim/api/private/handle.c16
-rw-r--r--src/nvim/api/private/handle.h3
-rw-r--r--src/nvim/api/private/helpers.c73
-rw-r--r--src/nvim/api/tabpage.c59
-rw-r--r--src/nvim/api/ui.c105
-rw-r--r--src/nvim/api/vim.c136
-rw-r--r--src/nvim/api/window.c73
-rw-r--r--src/nvim/buffer.c22
-rw-r--r--src/nvim/buffer_defs.h51
-rw-r--r--src/nvim/charset.c8
-rw-r--r--src/nvim/cursor.c1
-rw-r--r--src/nvim/cursor.h1
-rw-r--r--src/nvim/cursor_shape.c1
-rw-r--r--src/nvim/diff.c1
-rw-r--r--src/nvim/digraph.c8
-rw-r--r--src/nvim/edit.c33
-rw-r--r--src/nvim/eval.c1485
-rw-r--r--src/nvim/eval.lua331
-rw-r--r--src/nvim/event/process.c15
-rw-r--r--src/nvim/event/rstream.c17
-rw-r--r--src/nvim/event/socket.c4
-rw-r--r--src/nvim/event/stream.c9
-rw-r--r--src/nvim/event/stream.h3
-rw-r--r--src/nvim/event/wstream.c17
-rw-r--r--src/nvim/ex_cmds.c581
-rw-r--r--src/nvim/ex_cmds2.c4
-rw-r--r--src/nvim/ex_cmds_defs.h90
-rw-r--r--src/nvim/ex_docmd.c178
-rw-r--r--src/nvim/ex_eval.c1
-rw-r--r--src/nvim/ex_getln.c1
-rw-r--r--src/nvim/farsi.c1
-rw-r--r--src/nvim/file_search.c113
-rw-r--r--src/nvim/fileio.c191
-rw-r--r--src/nvim/fileio.h2
-rw-r--r--src/nvim/fold.c9
-rw-r--r--src/nvim/func_attr.h1
-rw-r--r--src/nvim/garray.c1
-rw-r--r--src/nvim/getchar.c2
-rw-r--r--src/nvim/globals.h102
-rw-r--r--src/nvim/hardcopy.c1
-rw-r--r--src/nvim/hashtab.c1
-rw-r--r--src/nvim/iconv.h2
-rw-r--r--src/nvim/if_cscope.c36
-rw-r--r--src/nvim/if_cscope_defs.h13
-rw-r--r--src/nvim/indent.c1
-rw-r--r--src/nvim/indent_c.c1
-rw-r--r--src/nvim/main.c10
-rw-r--r--src/nvim/map.c7
-rw-r--r--src/nvim/map.h3
-rw-r--r--src/nvim/mark.c1
-rw-r--r--src/nvim/mbyte.c1
-rw-r--r--src/nvim/memfile.c1
-rw-r--r--src/nvim/memline.c95
-rw-r--r--src/nvim/memory.c10
-rw-r--r--src/nvim/memory.h1
-rw-r--r--src/nvim/menu.c2
-rw-r--r--src/nvim/message.c8
-rw-r--r--src/nvim/misc1.c68
-rw-r--r--src/nvim/misc2.c486
-rw-r--r--src/nvim/misc2.h12
-rw-r--r--src/nvim/mouse.c1
-rw-r--r--src/nvim/move.c1
-rw-r--r--src/nvim/msgpack_rpc/channel.c95
-rw-r--r--src/nvim/msgpack_rpc/channel.h1
-rw-r--r--src/nvim/msgpack_rpc/defs.h28
-rw-r--r--src/nvim/msgpack_rpc/helpers.c6
-rw-r--r--src/nvim/normal.c30
-rw-r--r--src/nvim/ops.c29
-rw-r--r--src/nvim/option.c197
-rw-r--r--src/nvim/option.h25
-rw-r--r--src/nvim/option_defs.h22
-rw-r--r--src/nvim/options.lua10
-rw-r--r--src/nvim/os/env.c1
-rw-r--r--src/nvim/os/fs.c152
-rw-r--r--src/nvim/os/input.c55
-rw-r--r--src/nvim/os/shell.c51
-rw-r--r--src/nvim/os/signal.c14
-rw-r--r--src/nvim/os/stdpaths.c26
-rw-r--r--src/nvim/os/users.c1
-rw-r--r--src/nvim/os_unix.c1
-rw-r--r--src/nvim/path.c42
-rw-r--r--src/nvim/po/af.po4
-rw-r--r--src/nvim/po/ca.po4
-rw-r--r--src/nvim/po/cs.cp1250.po4
-rw-r--r--src/nvim/po/cs.po4
-rw-r--r--src/nvim/po/en_GB.po4
-rw-r--r--src/nvim/po/eo.po4
-rw-r--r--src/nvim/po/es.po6
-rw-r--r--src/nvim/po/fi.po4
-rw-r--r--src/nvim/po/fr.po4
-rw-r--r--src/nvim/po/ga.po5
-rw-r--r--src/nvim/po/it.po4
-rw-r--r--src/nvim/po/ja.euc-jp.po4
-rw-r--r--src/nvim/po/ja.po4
-rw-r--r--src/nvim/po/ja.sjis.po4
-rw-r--r--src/nvim/po/ko.UTF-8.po4
-rw-r--r--src/nvim/po/ko.po4
-rw-r--r--src/nvim/po/nb.po5
-rw-r--r--src/nvim/po/nl.po4
-rw-r--r--src/nvim/po/no.po5
-rw-r--r--src/nvim/po/pl.UTF-8.po4
-rw-r--r--src/nvim/po/pl.cp1250.po4
-rw-r--r--src/nvim/po/pl.po4
-rw-r--r--src/nvim/po/ru.cp1251.po6
-rw-r--r--src/nvim/po/ru.po6
-rw-r--r--src/nvim/po/sk.cp1250.po4
-rw-r--r--src/nvim/po/sk.po4
-rw-r--r--src/nvim/po/uk.cp1251.po3166
-rw-r--r--src/nvim/po/uk.po3166
-rw-r--r--src/nvim/po/vi.po5
-rw-r--r--src/nvim/po/zh_CN.UTF-8.po4
-rw-r--r--src/nvim/po/zh_CN.cp936.po4
-rw-r--r--src/nvim/po/zh_CN.po4
-rw-r--r--src/nvim/po/zh_TW.UTF-8.po6
-rw-r--r--src/nvim/po/zh_TW.po6
-rw-r--r--src/nvim/popupmnu.c110
-rw-r--r--src/nvim/quickfix.c63
-rw-r--r--src/nvim/regexp.c1
-rw-r--r--src/nvim/regexp_nfa.c7
-rw-r--r--src/nvim/screen.c55
-rw-r--r--src/nvim/search.c1
-rw-r--r--src/nvim/shada.c5
-rw-r--r--src/nvim/spell.c1
-rw-r--r--src/nvim/state.c34
-rw-r--r--src/nvim/strings.c1
-rw-r--r--src/nvim/syntax.c36
-rw-r--r--src/nvim/tag.c1
-rw-r--r--src/nvim/terminal.c16
-rw-r--r--src/nvim/testdir/Makefile4
-rw-r--r--src/nvim/testdir/test12.in50
-rw-r--r--src/nvim/testdir/test12.ok10
-rw-r--r--src/nvim/testdir/test_alot.vim3
-rw-r--r--src/nvim/testdir/test_cmdline.vim36
-rw-r--r--src/nvim/testdir/test_cscope.vim15
-rw-r--r--src/nvim/testdir/test_feedkeys.vim10
-rw-r--r--src/nvim/testdir/test_help_tagjump.vim10
-rw-r--r--src/nvim/testdir/test_regexp_utf8.vim41
-rw-r--r--src/nvim/testdir/test_syn_attr.vim24
-rw-r--r--src/nvim/testdir/test_usercommands.vim48
-rw-r--r--src/nvim/testdir/test_window_id.vim79
-rw-r--r--src/nvim/tui/input.c17
-rw-r--r--src/nvim/tui/tui.c8
-rw-r--r--src/nvim/types.h1
-rw-r--r--src/nvim/ui.c17
-rw-r--r--src/nvim/ui.h5
-rw-r--r--src/nvim/ui_bridge.c1
-rw-r--r--src/nvim/undo.c1
-rw-r--r--src/nvim/version.c260
-rw-r--r--src/nvim/window.c121
154 files changed, 3990 insertions, 9217 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index d80add2835..7c2c2feebc 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -11,22 +11,28 @@ endif()
endif()
set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/nvim/auto)
-set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/msgpack-gen.lua)
+set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendispatch.lua)
file(GLOB API_HEADERS api/*.h)
file(GLOB MSGPACK_RPC_HEADERS msgpack_rpc/*.h)
-set(MSGPACK_DISPATCH ${GENERATED_DIR}/msgpack_dispatch.c)
+set(API_METADATA ${PROJECT_BINARY_DIR}/api_metadata.mpack)
+set(FUNCS_DATA ${PROJECT_BINARY_DIR}/funcs_data.mpack)
set(HEADER_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendeclarations.lua)
set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include)
+set(GENERATED_API_DISPATCH ${GENERATED_DIR}/api/private/dispatch.c)
set(GENERATED_EX_CMDS_ENUM ${GENERATED_INCLUDES_DIR}/ex_cmds_enum.generated.h)
set(GENERATED_EX_CMDS_DEFS ${GENERATED_DIR}/ex_cmds_defs.generated.h)
+set(GENERATED_FUNCS_HASH_INPUT ${GENERATED_DIR}/funcs.generated.h.gperf)
+set(GENERATED_FUNCS ${GENERATED_DIR}/funcs.generated.h)
set(GENERATED_EVENTS_ENUM ${GENERATED_INCLUDES_DIR}/auevents_enum.generated.h)
set(GENERATED_EVENTS_NAMES_MAP ${GENERATED_DIR}/auevents_name_map.generated.h)
set(GENERATED_OPTIONS ${GENERATED_DIR}/options.generated.h)
set(EX_CMDS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genex_cmds.lua)
+set(FUNCS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/geneval.lua)
set(EVENTS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gen_events.lua)
set(OPTIONS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genoptions.lua)
set(EVENTS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua)
set(EX_CMDS_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua)
+set(EVAL_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/eval.lua)
set(OPTIONS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/options.lua)
set(UNICODE_TABLES_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genunicodetables.lua)
set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
@@ -36,6 +42,7 @@ set(EASTASIANWIDTH_FILE ${UNICODE_DIR}/EastAsianWidth.txt)
set(GENERATED_UNICODE_TABLES ${GENERATED_DIR}/unicode_tables.generated.h)
include_directories(${GENERATED_DIR})
+include_directories(${CACHED_GENERATED_DIR})
include_directories(${GENERATED_INCLUDES_DIR})
file(MAKE_DIRECTORY ${GENERATED_DIR})
@@ -82,7 +89,7 @@ endforeach()
list(REMOVE_ITEM NEOVIM_SOURCES ${to_remove})
-# Handle legacy files that don't yet pass -Wconversion.
+# Legacy files that do not yet pass -Wconversion.
set(CONV_SOURCES
buffer.c
diff.c
@@ -112,6 +119,15 @@ endforeach()
if(NOT MSVC)
set_source_files_properties(
${CONV_SOURCES} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion")
+ # gperf generates ANSI-C with incorrect linkage, ignore it.
+ check_c_compiler_flag(-Wno-static-in-inline HAS_WNO_STATIC_IN_INLINE_FLAG)
+ if(HAS_WNO_STATIC_IN_INLINE_FLAG)
+ set_source_files_properties(
+ eval.c PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-static-in-inline -Wno-conversion")
+ else()
+ set_source_files_properties(
+ eval.c PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion")
+ endif()
endif()
if(DEFINED MIN_LOG_LEVEL)
@@ -138,9 +154,13 @@ separate_arguments(C_FLAGS_${build_type}_ARRAY UNIX_COMMAND ${CMAKE_C_FLAGS_${bu
set(gen_cflags ${gen_cflags} ${C_FLAGS_${build_type}_ARRAY} ${C_FLAGS_ARRAY})
foreach(sfile ${NEOVIM_SOURCES}
- "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c")
+ "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c"
+ ${GENERATED_API_DISPATCH})
get_filename_component(full_d ${sfile} PATH)
file(RELATIVE_PATH d "${PROJECT_SOURCE_DIR}/src/nvim" "${full_d}")
+ if(${d} MATCHES "^[.][.]")
+ file(RELATIVE_PATH d "${GENERATED_DIR}" "${full_d}")
+ endif()
get_filename_component(f ${sfile} NAME)
get_filename_component(r ${sfile} NAME_WE)
if(NOT ${d} EQUAL ".")
@@ -183,17 +203,18 @@ add_custom_command(OUTPUT ${GENERATED_UNICODE_TABLES}
${EASTASIANWIDTH_FILE}
)
-add_custom_command(OUTPUT ${MSGPACK_DISPATCH}
- COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${API_HEADERS} ${MSGPACK_DISPATCH}
+add_custom_command(OUTPUT ${GENERATED_API_DISPATCH} ${API_METADATA}
+ COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${CMAKE_CURRENT_LIST_DIR} ${API_HEADERS} ${GENERATED_API_DISPATCH} ${API_METADATA}
DEPENDS
${API_HEADERS}
${MSGPACK_RPC_HEADERS}
${DISPATCH_GENERATOR}
+ ${CMAKE_CURRENT_LIST_DIR}/api/dispatch_deprecated.lua
)
list(APPEND NEOVIM_GENERATED_SOURCES
"${PROJECT_BINARY_DIR}/config/auto/pathdef.c"
- "${MSGPACK_DISPATCH}"
+ "${GENERATED_API_DISPATCH}"
"${GENERATED_EX_CMDS_ENUM}"
"${GENERATED_EX_CMDS_DEFS}"
"${GENERATED_EVENTS_ENUM}"
@@ -208,6 +229,19 @@ add_custom_command(OUTPUT ${GENERATED_EX_CMDS_ENUM} ${GENERATED_EX_CMDS_DEFS}
DEPENDS ${EX_CMDS_GENERATOR} ${EX_CMDS_DEFS_FILE}
)
+if(NOT GPERF_PRG)
+ message(FATAL_ERROR "gperf was not found.")
+endif()
+add_custom_command(OUTPUT ${GENERATED_FUNCS} ${FUNCS_DATA}
+ COMMAND ${LUA_PRG} ${FUNCS_GENERATOR}
+ ${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_DIR} ${API_METADATA} ${FUNCS_DATA}
+ COMMAND ${GPERF_PRG}
+ ${GENERATED_FUNCS_HASH_INPUT} --output-file=${GENERATED_FUNCS}
+ DEPENDS ${FUNCS_GENERATOR} ${EVAL_DEFS_FILE} ${API_METADATA}
+)
+list(APPEND NEOVIM_GENERATED_SOURCES
+ "${GENERATED_FUNCS}")
+
add_custom_command(OUTPUT ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
COMMAND ${LUA_PRG} ${EVENTS_GENERATOR}
${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
@@ -259,6 +293,21 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES}
target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES})
install_helper(TARGETS nvim)
+if(WIN32)
+ # Copy DLLs to bin/ and install them along with nvim
+ add_custom_target(nvim_dll_deps ALL DEPENDS nvim
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
+ COMMAND ${CMAKE_COMMAND}
+ "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
+ -DBINARY="${PROJECT_BINARY_DIR}/bin/nvim${CMAKE_EXECUTABLE_SUFFIX}"
+ -DDST=${PROJECT_BINARY_DIR}/windows_runtime_deps
+ -P ${PROJECT_SOURCE_DIR}/cmake/WindowsDllCopy.cmake
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps/
+ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+ install(DIRECTORY ${PROJECT_BINARY_DIR}/windows_runtime_deps/
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
+endif()
+
if(CLANG_ASAN_UBSAN)
message(STATUS "Enabling Clang address sanitizer and undefined behavior sanitizer for nvim.")
check_c_compiler_flag(-fno-sanitize-recover=all SANITIZE_RECOVER_ALL)
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 55b535c78c..c4415ddf94 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -14,7 +14,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/ex_cmds.h"
#include "nvim/mark.h"
#include "nvim/fileio.h"
@@ -32,7 +31,7 @@
/// @param buffer The buffer handle
/// @param[out] err Details of an error that may have occurred
/// @return The line count
-Integer buffer_line_count(Buffer buffer, Error *err)
+Integer nvim_buf_line_count(Buffer buffer, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -45,11 +44,11 @@ Integer buffer_line_count(Buffer buffer, Error *err)
/// Gets a buffer line
///
-/// @deprecated use buffer_get_lines instead.
+/// @deprecated use nvim_buf_get_lines instead.
/// for positive indices (including 0) use
-/// "buffer_get_lines(buffer, index, index+1, true)"
+/// "nvim_buf_get_lines(buffer, index, index+1, true)"
/// for negative indices use
-/// "buffer_get_lines(buffer, index-1, index, true)"
+/// "nvim_buf_get_lines(buffer, index-1, index, true)"
///
/// @param buffer The buffer handle
/// @param index The line index
@@ -60,7 +59,7 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err)
String rv = { .size = 0 };
index = convert_index(index);
- Array slice = buffer_get_lines(buffer, index, index+1, true, err);
+ Array slice = nvim_buf_get_lines(0, buffer, index, index+1, true, err);
if (!err->set && slice.size) {
rv = slice.items[0].data.string;
@@ -73,11 +72,11 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err)
/// Sets a buffer line
///
-/// @deprecated use buffer_set_lines instead.
+/// @deprecated use nvim_buf_set_lines instead.
/// for positive indices use
-/// "buffer_set_lines(buffer, index, index+1, true, [line])"
+/// "nvim_buf_set_lines(buffer, index, index+1, true, [line])"
/// for negative indices use
-/// "buffer_set_lines(buffer, index-1, index, true, [line])"
+/// "nvim_buf_set_lines(buffer, index-1, index, true, [line])"
///
/// @param buffer The buffer handle
/// @param index The line index
@@ -88,16 +87,16 @@ void buffer_set_line(Buffer buffer, Integer index, String line, Error *err)
Object l = STRING_OBJ(line);
Array array = { .items = &l, .size = 1 };
index = convert_index(index);
- buffer_set_lines(buffer, index, index+1, true, array, err);
+ nvim_buf_set_lines(0, buffer, index, index+1, true, array, err);
}
/// Deletes a buffer line
///
-/// @deprecated use buffer_set_lines instead.
+/// @deprecated use nvim_buf_set_lines instead.
/// for positive indices use
-/// "buffer_set_lines(buffer, index, index+1, true, [])"
+/// "nvim_buf_set_lines(buffer, index, index+1, true, [])"
/// for negative indices use
-/// "buffer_set_lines(buffer, index-1, index, true, [])"
+/// "nvim_buf_set_lines(buffer, index-1, index, true, [])"
/// @param buffer The buffer handle
/// @param index The line index
/// @param[out] err Details of an error that may have occurred
@@ -105,12 +104,12 @@ void buffer_del_line(Buffer buffer, Integer index, Error *err)
{
Array array = ARRAY_DICT_INIT;
index = convert_index(index);
- buffer_set_lines(buffer, index, index+1, true, array, err);
+ nvim_buf_set_lines(0, buffer, index, index+1, true, array, err);
}
/// Retrieves a line range from the buffer
///
-/// @deprecated use buffer_get_lines(buffer, newstart, newend, false)
+/// @deprecated use nvim_buf_get_lines(buffer, newstart, newend, false)
/// where newstart = start + int(not include_start) - int(start < 0)
/// newend = end + int(include_end) - int(end < 0)
/// int(bool) = 1 if bool is true else 0
@@ -122,15 +121,15 @@ void buffer_del_line(Buffer buffer, Integer index, Error *err)
/// @param[out] err Details of an error that may have occurred
/// @return An array of lines
ArrayOf(String) buffer_get_line_slice(Buffer buffer,
- Integer start,
- Integer end,
- Boolean include_start,
- Boolean include_end,
- Error *err)
+ Integer start,
+ Integer end,
+ Boolean include_start,
+ Boolean include_end,
+ Error *err)
{
start = convert_index(start) + !include_start;
end = convert_index(end) + include_end;
- return buffer_get_lines(buffer, start , end, false, err);
+ return nvim_buf_get_lines(0, buffer, start , end, false, err);
}
@@ -149,11 +148,12 @@ ArrayOf(String) buffer_get_line_slice(Buffer buffer,
/// @param strict_indexing whether out-of-bounds should be an error.
/// @param[out] err Details of an error that may have occurred
/// @return An array of lines
-ArrayOf(String) buffer_get_lines(Buffer buffer,
- Integer start,
- Integer end,
- Boolean strict_indexing,
- Error *err)
+ArrayOf(String) nvim_buf_get_lines(uint64_t channel_id,
+ Buffer buffer,
+ Integer start,
+ Integer end,
+ Boolean strict_indexing,
+ Error *err)
{
Array rv = ARRAY_DICT_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -191,7 +191,9 @@ ArrayOf(String) buffer_get_lines(Buffer buffer,
Object str = STRING_OBJ(cstr_to_string(bufstr));
// Vim represents NULs as NLs, but this may confuse clients.
- strchrsub(str.data.string.data, '\n', '\0');
+ if (channel_id != INVALID_CHANNEL) {
+ strchrsub(str.data.string.data, '\n', '\0');
+ }
rv.items[i] = str;
}
@@ -212,7 +214,7 @@ end:
/// Replaces a line range on the buffer
///
-/// @deprecated use buffer_set_lines(buffer, newstart, newend, false, lines)
+/// @deprecated use nvim_buf_set_lines(buffer, newstart, newend, false, lines)
/// where newstart = start + int(not include_start) + int(start < 0)
/// newend = end + int(include_end) + int(end < 0)
/// int(bool) = 1 if bool is true else 0
@@ -226,16 +228,16 @@ end:
// array will simply delete the line range)
/// @param[out] err Details of an error that may have occurred
void buffer_set_line_slice(Buffer buffer,
- Integer start,
- Integer end,
- Boolean include_start,
- Boolean include_end,
- ArrayOf(String) replacement,
- Error *err)
+ Integer start,
+ Integer end,
+ Boolean include_start,
+ Boolean include_end,
+ ArrayOf(String) replacement, // NOLINT
+ Error *err)
{
start = convert_index(start) + !include_start;
end = convert_index(end) + include_end;
- buffer_set_lines(buffer, start, end, false, replacement, err);
+ nvim_buf_set_lines(0, buffer, start, end, false, replacement, err);
}
@@ -257,12 +259,13 @@ void buffer_set_line_slice(Buffer buffer,
/// @param strict_indexing whether out-of-bounds should be an error.
/// @param replacement An array of lines to use as replacement
/// @param[out] err Details of an error that may have occurred
-void buffer_set_lines(Buffer buffer,
- Integer start,
- Integer end,
- Boolean strict_indexing,
- ArrayOf(String) replacement,
- Error *err)
+void nvim_buf_set_lines(uint64_t channel_id,
+ Buffer buffer,
+ Integer start,
+ Integer end,
+ Boolean strict_indexing,
+ ArrayOf(String) replacement, // NOLINT
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -309,7 +312,7 @@ void buffer_set_lines(Buffer buffer,
// line and convert NULs to newlines to avoid truncation.
lines[i] = xmallocz(l.size);
for (size_t j = 0; j < l.size; j++) {
- if (l.data[j] == '\n') {
+ if (l.data[j] == '\n' && channel_id != INVALID_CHANNEL) {
api_set_error(err, Exception, _("string cannot contain newlines"));
new_len = i + 1;
goto end;
@@ -412,7 +415,7 @@ end:
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
/// @return The variable value
-Object buffer_get_var(Buffer buffer, String name, Error *err)
+Object nvim_buf_get_var(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -429,6 +432,41 @@ Object buffer_get_var(Buffer buffer, String name, Error *err)
/// @param name The variable name
/// @param value The variable value
/// @param[out] err Details of an error that may have occurred
+void nvim_buf_set_var(Buffer buffer, String name, Object value, Error *err)
+{
+ buf_T *buf = find_buffer_by_handle(buffer, err);
+
+ if (!buf) {
+ return;
+ }
+
+ dict_set_value(buf->b_vars, name, value, false, false, err);
+}
+
+/// Removes a buffer-scoped (b:) variable
+///
+/// @param buffer The buffer handle
+/// @param name The variable name
+/// @param[out] err Details of an error that may have occurred
+void nvim_buf_del_var(Buffer buffer, String name, Error *err)
+{
+ buf_T *buf = find_buffer_by_handle(buffer, err);
+
+ if (!buf) {
+ return;
+ }
+
+ dict_set_value(buf->b_vars, name, NIL, true, false, err);
+}
+
+/// Sets a buffer-scoped (b:) variable
+///
+/// @deprecated
+///
+/// @param buffer The buffer handle
+/// @param name The variable name
+/// @param value The variable value
+/// @param[out] err Details of an error that may have occurred
/// @return The old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
@@ -441,18 +479,17 @@ Object buffer_set_var(Buffer buffer, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(buf->b_vars, name, value, false, err);
+ return dict_set_value(buf->b_vars, name, value, false, true, err);
}
/// Removes a buffer-scoped (b:) variable
///
+/// @deprecated
+///
/// @param buffer The buffer handle
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
-///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @return The old value
Object buffer_del_var(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -461,16 +498,17 @@ Object buffer_del_var(Buffer buffer, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(buf->b_vars, name, NIL, true, err);
+ return dict_set_value(buf->b_vars, name, NIL, true, true, err);
}
+
/// Gets a buffer option value
///
/// @param buffer The buffer handle
/// @param name The option name
/// @param[out] err Details of an error that may have occurred
/// @return The option value
-Object buffer_get_option(Buffer buffer, String name, Error *err)
+Object nvim_buf_get_option(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -488,7 +526,7 @@ Object buffer_get_option(Buffer buffer, String name, Error *err)
/// @param name The option name
/// @param value The option value
/// @param[out] err Details of an error that may have occurred
-void buffer_set_option(Buffer buffer, String name, Object value, Error *err)
+void nvim_buf_set_option(Buffer buffer, String name, Object value, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -504,7 +542,7 @@ void buffer_set_option(Buffer buffer, String name, Object value, Error *err)
/// @param buffer The buffer handle
/// @param[out] err Details of an error that may have occurred
/// @return The buffer number
-Integer buffer_get_number(Buffer buffer, Error *err)
+Integer nvim_buf_get_number(Buffer buffer, Error *err)
{
Integer rv = 0;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -521,7 +559,7 @@ Integer buffer_get_number(Buffer buffer, Error *err)
/// @param buffer The buffer handle
/// @param[out] err Details of an error that may have occurred
/// @return The buffer name
-String buffer_get_name(Buffer buffer, Error *err)
+String nvim_buf_get_name(Buffer buffer, Error *err)
{
String rv = STRING_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -538,7 +576,7 @@ String buffer_get_name(Buffer buffer, Error *err)
/// @param buffer The buffer handle
/// @param name The buffer name
/// @param[out] err Details of an error that may have occurred
-void buffer_set_name(Buffer buffer, String name, Error *err)
+void nvim_buf_set_name(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -567,7 +605,7 @@ void buffer_set_name(Buffer buffer, String name, Error *err)
///
/// @param buffer The buffer handle
/// @return true if the buffer is valid, false otherwise
-Boolean buffer_is_valid(Buffer buffer)
+Boolean nvim_buf_is_valid(Buffer buffer)
{
Error stub = ERROR_INIT;
return find_buffer_by_handle(buffer, &stub) != NULL;
@@ -575,7 +613,7 @@ Boolean buffer_is_valid(Buffer buffer)
/// Inserts a sequence of lines to a buffer at a certain index
///
-/// @deprecated use buffer_set_lines(buffer, lnum, lnum, true, lines)
+/// @deprecated use nvim_buf_set_lines(buffer, lnum, lnum, true, lines)
///
/// @param buffer The buffer handle
/// @param lnum Insert the lines after `lnum`. If negative, it will append
@@ -589,7 +627,7 @@ void buffer_insert(Buffer buffer,
{
// "lnum" will be the index of the line after inserting,
// no matter if it is negative or not
- buffer_set_lines(buffer, lnum, lnum, true, lines, err);
+ nvim_buf_set_lines(0, buffer, lnum, lnum, true, lines, err);
}
/// Return a tuple (row,col) representing the position of the named mark
@@ -598,7 +636,7 @@ void buffer_insert(Buffer buffer,
/// @param name The mark's name
/// @param[out] err Details of an error that may have occurred
/// @return The (row, col) tuple
-ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
+ArrayOf(Integer, 2) nvim_buf_get_mark(Buffer buffer, String name, Error *err)
{
Array rv = ARRAY_DICT_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -648,7 +686,7 @@ ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
/// called with src_id = 0, an unique source id is generated and returned.
/// Succesive calls can pass in it as "src_id" to add new highlights to the same
/// source group. All highlights in the same group can then be cleared with
-/// buffer_clear_highlight. If the highlight never will be manually deleted
+/// nvim_buf_clear_highlight. If the highlight never will be manually deleted
/// pass in -1 for "src_id".
///
/// If "hl_group" is the empty string no highlight is added, but a new src_id
@@ -666,13 +704,13 @@ ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
/// or -1 to highlight to end of line
/// @param[out] err Details of an error that may have occurred
/// @return The src_id that was used
-Integer buffer_add_highlight(Buffer buffer,
- Integer src_id,
- String hl_group,
- Integer line,
- Integer col_start,
- Integer col_end,
- Error *err)
+Integer nvim_buf_add_highlight(Buffer buffer,
+ Integer src_id,
+ String hl_group,
+ Integer line,
+ Integer col_start,
+ Integer col_end,
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
if (!buf) {
@@ -691,7 +729,7 @@ Integer buffer_add_highlight(Buffer buffer,
col_end = MAXCOL;
}
- int hlg_id = syn_name2id((char_u*)hl_group.data);
+ int hlg_id = syn_name2id((char_u *)(hl_group.data ? hl_group.data : ""));
src_id = bufhl_add_hl(buf, (int)src_id, hlg_id, (linenr_T)line+1,
(colnr_T)col_start+1, (colnr_T)col_end);
return src_id;
@@ -708,11 +746,11 @@ Integer buffer_add_highlight(Buffer buffer,
/// @param line_end End of range of lines to clear (exclusive)
/// or -1 to clear to end of file.
/// @param[out] err Details of an error that may have occurred
-void buffer_clear_highlight(Buffer buffer,
- Integer src_id,
- Integer line_start,
- Integer line_end,
- Error *err)
+void nvim_buf_clear_highlight(Buffer buffer,
+ Integer src_id,
+ Integer line_start,
+ Integer line_end,
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
if (!buf) {
diff --git a/src/nvim/api/dispatch_deprecated.lua b/src/nvim/api/dispatch_deprecated.lua
new file mode 100644
index 0000000000..5650a77ac0
--- /dev/null
+++ b/src/nvim/api/dispatch_deprecated.lua
@@ -0,0 +1,69 @@
+local deprecated_aliases = {
+ nvim_buf_add_highlight="buffer_add_highlight",
+ nvim_buf_clear_highlight="buffer_clear_highlight",
+ nvim_buf_get_lines="buffer_get_lines",
+ nvim_buf_get_mark="buffer_get_mark",
+ nvim_buf_get_name="buffer_get_name",
+ nvim_buf_get_number="buffer_get_number",
+ nvim_buf_get_option="buffer_get_option",
+ nvim_buf_get_var="buffer_get_var",
+ nvim_buf_is_valid="buffer_is_valid",
+ nvim_buf_line_count="buffer_line_count",
+ nvim_buf_set_lines="buffer_set_lines",
+ nvim_buf_set_name="buffer_set_name",
+ nvim_buf_set_option="buffer_set_option",
+ nvim_call_function="vim_call_function",
+ nvim_command="vim_command",
+ nvim_command_output="vim_command_output",
+ nvim_del_current_line="vim_del_current_line",
+ nvim_err_write="vim_err_write",
+ nvim_err_writeln="vim_report_error",
+ nvim_eval="vim_eval",
+ nvim_feedkeys="vim_feedkeys",
+ nvim_get_api_info="vim_get_api_info",
+ nvim_get_color_by_name="vim_name_to_color",
+ nvim_get_color_map="vim_get_color_map",
+ nvim_get_current_buf="vim_get_current_buffer",
+ nvim_get_current_line="vim_get_current_line",
+ nvim_get_current_tabpage="vim_get_current_tabpage",
+ nvim_get_current_win="vim_get_current_window",
+ nvim_get_option="vim_get_option",
+ nvim_get_var="vim_get_var",
+ nvim_get_vvar="vim_get_vvar",
+ nvim_input="vim_input",
+ nvim_list_bufs="vim_get_buffers",
+ nvim_list_runtime_paths="vim_list_runtime_paths",
+ nvim_list_tabpages="vim_get_tabpages",
+ nvim_list_wins="vim_get_windows",
+ nvim_out_write="vim_out_write",
+ nvim_replace_termcodes="vim_replace_termcodes",
+ nvim_set_current_buf="vim_set_current_buffer",
+ nvim_set_current_dir="vim_change_directory",
+ nvim_set_current_line="vim_set_current_line",
+ nvim_set_current_tabpage="vim_set_current_tabpage",
+ nvim_set_current_win="vim_set_current_window",
+ nvim_set_option="vim_set_option",
+ nvim_strwidth="vim_strwidth",
+ nvim_subscribe="vim_subscribe",
+ nvim_tabpage_get_var="tabpage_get_var",
+ nvim_tabpage_get_win="tabpage_get_window",
+ nvim_tabpage_is_valid="tabpage_is_valid",
+ nvim_tabpage_list_wins="tabpage_get_windows",
+ nvim_ui_detach="ui_detach",
+ nvim_ui_try_resize="ui_try_resize",
+ nvim_unsubscribe="vim_unsubscribe",
+ nvim_win_get_buf="window_get_buffer",
+ nvim_win_get_cursor="window_get_cursor",
+ nvim_win_get_height="window_get_height",
+ nvim_win_get_option="window_get_option",
+ nvim_win_get_position="window_get_position",
+ nvim_win_get_tabpage="window_get_tabpage",
+ nvim_win_get_var="window_get_var",
+ nvim_win_get_width="window_get_width",
+ nvim_win_is_valid="window_is_valid",
+ nvim_win_set_cursor="window_set_cursor",
+ nvim_win_set_height="window_set_height",
+ nvim_win_set_option="window_set_option",
+ nvim_win_set_width="window_set_width",
+}
+return deprecated_aliases
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
index 5fb95a163f..a6710193ff 100644
--- a/src/nvim/api/private/defs.h
+++ b/src/nvim/api/private/defs.h
@@ -9,13 +9,15 @@
#define STRING_INIT {.data = NULL, .size = 0}
#define OBJECT_INIT { .type = kObjectTypeNil }
#define ERROR_INIT { .set = false }
-#define REMOTE_TYPE(type) typedef uint64_t type
+#define REMOTE_TYPE(type) typedef handle_T type
#ifdef INCLUDE_GENERATED_DECLARATIONS
# define ArrayOf(...) Array
# define DictionaryOf(...) Dictionary
#endif
+typedef int handle_T;
+
// Basic types
typedef enum {
kErrorTypeException,
@@ -31,6 +33,9 @@ typedef enum {
/// Used as the message ID of notifications.
#define NO_RESPONSE UINT64_MAX
+/// Used as channel_id when the call is local
+#define INVALID_CHANNEL UINT64_MAX
+
typedef struct {
ErrorType type;
char msg[1024];
diff --git a/src/nvim/api/private/dispatch.h b/src/nvim/api/private/dispatch.h
new file mode 100644
index 0000000000..d91456c306
--- /dev/null
+++ b/src/nvim/api/private/dispatch.h
@@ -0,0 +1,23 @@
+#ifndef NVIM_API_PRIVATE_DISPATCH_H
+#define NVIM_API_PRIVATE_DISPATCH_H
+
+#include "nvim/api/private/defs.h"
+
+typedef Object (*ApiDispatchWrapper)(uint64_t channel_id,
+ uint64_t request_id,
+ Array args,
+ Error *error);
+
+/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores
+/// functions of this type.
+typedef struct {
+ ApiDispatchWrapper fn;
+ bool async; // function is always safe to run immediately instead of being
+ // put in a request queue for handling when nvim waits for input.
+} MsgpackRpcRequestHandler;
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "api/private/dispatch.h.generated.h"
+#endif
+
+#endif // NVIM_API_PRIVATE_DISPATCH_H
diff --git a/src/nvim/api/private/handle.c b/src/nvim/api/private/handle.c
index 69df7294ad..acb0fb332a 100644
--- a/src/nvim/api/private/handle.c
+++ b/src/nvim/api/private/handle.c
@@ -5,30 +5,26 @@
#include "nvim/map.h"
#include "nvim/api/private/handle.h"
-#define HANDLE_INIT(name) name##_handles = pmap_new(uint64_t)()
+#define HANDLE_INIT(name) name##_handles = pmap_new(handle_T)()
#define HANDLE_IMPL(type, name) \
- static PMap(uint64_t) *name##_handles = NULL; \
+ static PMap(handle_T) *name##_handles = NULL; /* NOLINT */ \
\
- type *handle_get_##name(uint64_t handle) \
+ type *handle_get_##name(handle_T handle) \
{ \
- return pmap_get(uint64_t)(name##_handles, handle); \
+ return pmap_get(handle_T)(name##_handles, handle); \
} \
\
void handle_register_##name(type *name) \
{ \
- assert(!name->handle); \
- name->handle = next_handle++; \
- pmap_put(uint64_t)(name##_handles, name->handle, name); \
+ pmap_put(handle_T)(name##_handles, name->handle, name); \
} \
\
void handle_unregister_##name(type *name) \
{ \
- pmap_del(uint64_t)(name##_handles, name->handle); \
+ pmap_del(handle_T)(name##_handles, name->handle); \
}
-static uint64_t next_handle = 1;
-
HANDLE_IMPL(buf_T, buffer)
HANDLE_IMPL(win_T, window)
HANDLE_IMPL(tabpage_T, tabpage)
diff --git a/src/nvim/api/private/handle.h b/src/nvim/api/private/handle.h
index 804e266dc3..30bbfbee1b 100644
--- a/src/nvim/api/private/handle.h
+++ b/src/nvim/api/private/handle.h
@@ -3,9 +3,10 @@
#include "nvim/vim.h"
#include "nvim/buffer_defs.h"
+#include "nvim/api/private/defs.h"
#define HANDLE_DECLS(type, name) \
- type *handle_get_##name(uint64_t handle); \
+ type *handle_get_##name(handle_T handle); \
void handle_register_##name(type *name); \
void handle_unregister_##name(type *name);
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index c88bf2127a..fc114bae16 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -104,10 +104,11 @@ Object dict_get_value(dict_T *dict, String key, Error *err)
/// @param value The new value
/// @param del Delete key in place of setting it. Argument `value` is ignored in
/// this case.
+/// @param retval If true the old value will be converted and returned.
/// @param[out] err Details of an error that may have occurred
-/// @return the old value, if any
+/// @return The old value if `retval` is true and the key was present, else NIL
Object dict_set_value(dict_T *dict, String key, Object value, bool del,
- Error *err)
+ bool retval, Error *err)
{
Object rv = OBJECT_INIT;
@@ -135,7 +136,9 @@ Object dict_set_value(dict_T *dict, String key, Object value, bool del,
api_set_error(err, Validation, _("Key \"%s\" doesn't exist"), key.data);
} else {
// Return the old value
- rv = vim_to_object(&di->di_tv);
+ if (retval) {
+ rv = vim_to_object(&di->di_tv);
+ }
// Delete the entry
hashitem_T *hi = hash_find(&dict->dv_hashtab, di->di_key);
hash_remove(&dict->dv_hashtab, hi);
@@ -156,7 +159,9 @@ Object dict_set_value(dict_T *dict, String key, Object value, bool del,
dict_add(dict, di);
} else {
// Return the old value
- rv = vim_to_object(&di->di_tv);
+ if (retval) {
+ rv = vim_to_object(&di->di_tv);
+ }
clear_tv(&di->di_tv);
}
@@ -507,6 +512,10 @@ Object vim_to_object(typval_T *obj)
buf_T *find_buffer_by_handle(Buffer buffer, Error *err)
{
+ if (buffer == 0) {
+ return curbuf;
+ }
+
buf_T *rv = handle_get_buffer(buffer);
if (!rv) {
@@ -518,6 +527,10 @@ buf_T *find_buffer_by_handle(Buffer buffer, Error *err)
win_T * find_window_by_handle(Window window, Error *err)
{
+ if (window == 0) {
+ return curwin;
+ }
+
win_T *rv = handle_get_window(window);
if (!rv) {
@@ -529,6 +542,10 @@ win_T * find_window_by_handle(Window window, Error *err)
tabpage_T * find_tab_by_handle(Tabpage tabpage, Error *err)
{
+ if (tabpage == 0) {
+ return curtab;
+ }
+
tabpage_T *rv = handle_get_tabpage(tabpage);
if (!rv) {
@@ -572,10 +589,16 @@ String cstr_as_string(char *str) FUNC_ATTR_PURE
return (String) {.data = str, .size = strlen(str)};
}
+/// Converts from type Object to a VimL value.
+///
+/// @param obj Object to convert from.
+/// @param tv Conversion result is placed here. On failure member v_type is
+/// set to VAR_UNKNOWN (no allocation was made for this variable).
+/// returns true if conversion is successful, otherwise false.
bool object_to_vim(Object obj, typval_T *tv, Error *err)
{
tv->v_type = VAR_UNKNOWN;
- tv->v_lock = 0;
+ tv->v_lock = VAR_UNLOCKED;
switch (obj.type) {
case kObjectTypeNil:
@@ -616,9 +639,8 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
}
break;
- case kObjectTypeArray:
- tv->v_type = VAR_LIST;
- tv->vval.v_list = list_alloc();
+ case kObjectTypeArray: {
+ list_T *list = list_alloc();
for (uint32_t i = 0; i < obj.data.array.size; i++) {
Object item = obj.data.array.items[i];
@@ -627,45 +649,51 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
if (!object_to_vim(item, &li->li_tv, err)) {
// cleanup
listitem_free(li);
- list_free(tv->vval.v_list, true);
+ list_free(list, true);
return false;
}
- list_append(tv->vval.v_list, li);
+ list_append(list, li);
}
- tv->vval.v_list->lv_refcount++;
+ list->lv_refcount++;
+
+ tv->v_type = VAR_LIST;
+ tv->vval.v_list = list;
break;
+ }
- case kObjectTypeDictionary:
- tv->v_type = VAR_DICT;
- tv->vval.v_dict = dict_alloc();
+ case kObjectTypeDictionary: {
+ dict_T *dict = dict_alloc();
for (uint32_t i = 0; i < obj.data.dictionary.size; i++) {
KeyValuePair item = obj.data.dictionary.items[i];
String key = item.key;
if (key.size == 0) {
- api_set_error(err,
- Validation,
+ api_set_error(err, Validation,
_("Empty dictionary keys aren't allowed"));
// cleanup
- dict_free(tv->vval.v_dict, true);
+ dict_free(dict, true);
return false;
}
- dictitem_T *di = dictitem_alloc((uint8_t *) key.data);
+ dictitem_T *di = dictitem_alloc((uint8_t *)key.data);
if (!object_to_vim(item.value, &di->di_tv, err)) {
// cleanup
dictitem_free(di);
- dict_free(tv->vval.v_dict, true);
+ dict_free(dict, true);
return false;
}
- dict_add(tv->vval.v_dict, di);
+ dict_add(dict, di);
}
- tv->vval.v_dict->dv_refcount++;
+ dict->dv_refcount++;
+
+ tv->v_type = VAR_DICT;
+ tv->vval.v_dict = dict;
break;
+ }
default:
abort();
}
@@ -764,12 +792,15 @@ static void init_type_metadata(Dictionary *metadata)
Dictionary buffer_metadata = ARRAY_DICT_INIT;
PUT(buffer_metadata, "id", INTEGER_OBJ(kObjectTypeBuffer));
+ PUT(buffer_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_buf_")));
Dictionary window_metadata = ARRAY_DICT_INIT;
PUT(window_metadata, "id", INTEGER_OBJ(kObjectTypeWindow));
+ PUT(window_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_win_")));
Dictionary tabpage_metadata = ARRAY_DICT_INIT;
PUT(tabpage_metadata, "id", INTEGER_OBJ(kObjectTypeTabpage));
+ PUT(tabpage_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_tabpage_")));
PUT(types, "Buffer", DICTIONARY_OBJ(buffer_metadata));
PUT(types, "Window", DICTIONARY_OBJ(window_metadata));
diff --git a/src/nvim/api/tabpage.c b/src/nvim/api/tabpage.c
index c8311b0aa0..8b1fb041e2 100644
--- a/src/nvim/api/tabpage.c
+++ b/src/nvim/api/tabpage.c
@@ -14,7 +14,7 @@
/// @param tabpage The tabpage
/// @param[out] err Details of an error that may have occurred
/// @return The windows in `tabpage`
-ArrayOf(Window) tabpage_get_windows(Tabpage tabpage, Error *err)
+ArrayOf(Window) nvim_tabpage_list_wins(Tabpage tabpage, Error *err)
{
Array rv = ARRAY_DICT_INIT;
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -43,7 +43,7 @@ ArrayOf(Window) tabpage_get_windows(Tabpage tabpage, Error *err)
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
/// @return The variable value
-Object tabpage_get_var(Tabpage tabpage, String name, Error *err)
+Object nvim_tabpage_get_var(Tabpage tabpage, String name, Error *err)
{
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -60,6 +60,44 @@ Object tabpage_get_var(Tabpage tabpage, String name, Error *err)
/// @param name The variable name
/// @param value The variable value
/// @param[out] err Details of an error that may have occurred
+void nvim_tabpage_set_var(Tabpage tabpage,
+ String name,
+ Object value,
+ Error *err)
+{
+ tabpage_T *tab = find_tab_by_handle(tabpage, err);
+
+ if (!tab) {
+ return;
+ }
+
+ dict_set_value(tab->tp_vars, name, value, false, false, err);
+}
+
+/// Removes a tab-scoped (t:) variable
+///
+/// @param tabpage handle
+/// @param name The variable name
+/// @param[out] err Details of an error that may have occurred
+void nvim_tabpage_del_var(Tabpage tabpage, String name, Error *err)
+{
+ tabpage_T *tab = find_tab_by_handle(tabpage, err);
+
+ if (!tab) {
+ return;
+ }
+
+ dict_set_value(tab->tp_vars, name, NIL, true, false, err);
+}
+
+/// Sets a tab-scoped (t:) variable
+///
+/// @deprecated
+///
+/// @param tabpage handle
+/// @param name The variable name
+/// @param value The variable value
+/// @param[out] err Details of an error that may have occurred
/// @return The old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
@@ -72,18 +110,17 @@ Object tabpage_set_var(Tabpage tabpage, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(tab->tp_vars, name, value, false, err);
+ return dict_set_value(tab->tp_vars, name, value, false, true, err);
}
/// Removes a tab-scoped (t:) variable
///
+/// @deprecated
+///
/// @param tabpage handle
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
-///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @return The old value
Object tabpage_del_var(Tabpage tabpage, String name, Error *err)
{
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -92,7 +129,7 @@ Object tabpage_del_var(Tabpage tabpage, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(tab->tp_vars, name, NIL, true, err);
+ return dict_set_value(tab->tp_vars, name, NIL, true, true, err);
}
/// Gets the current window in a tab page
@@ -100,7 +137,7 @@ Object tabpage_del_var(Tabpage tabpage, String name, Error *err)
/// @param tabpage The tab page handle
/// @param[out] err Details of an error that may have occurred
/// @return The Window handle
-Window tabpage_get_window(Tabpage tabpage, Error *err)
+Window nvim_tabpage_get_win(Tabpage tabpage, Error *err)
{
Window rv = 0;
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -110,7 +147,7 @@ Window tabpage_get_window(Tabpage tabpage, Error *err)
}
if (tab == curtab) {
- return vim_get_current_window();
+ return nvim_get_current_win();
} else {
FOR_ALL_WINDOWS_IN_TAB(wp, tab) {
if (wp == tab->tp_curwin) {
@@ -126,7 +163,7 @@ Window tabpage_get_window(Tabpage tabpage, Error *err)
///
/// @param tabpage The tab page handle
/// @return true if the tab page is valid, false otherwise
-Boolean tabpage_is_valid(Tabpage tabpage)
+Boolean nvim_tabpage_is_valid(Tabpage tabpage)
{
Error stub = ERROR_INIT;
return find_tab_by_handle(tabpage, &stub) != NULL;
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c
index 1703d49296..56b41f1eea 100644
--- a/src/nvim/api/ui.c
+++ b/src/nvim/api/ui.c
@@ -8,8 +8,10 @@
#include "nvim/memory.h"
#include "nvim/map.h"
#include "nvim/msgpack_rpc/channel.h"
+#include "nvim/api/ui.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/private/helpers.h"
+#include "nvim/popupmnu.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "api/ui.c.generated.h"
@@ -44,8 +46,9 @@ void remote_ui_disconnect(uint64_t channel_id)
xfree(ui);
}
-void ui_attach(uint64_t channel_id, Integer width, Integer height,
- Boolean enable_rgb, Error *err)
+void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,
+ Dictionary options, Error *err)
+ FUNC_API_NOEVAL
{
if (pmap_has(uint64_t)(connected_uis, channel_id)) {
api_set_error(err, Exception, _("UI already attached for channel"));
@@ -57,14 +60,11 @@ void ui_attach(uint64_t channel_id, Integer width, Integer height,
_("Expected width > 0 and height > 0"));
return;
}
- UIData *data = xmalloc(sizeof(UIData));
- data->channel_id = channel_id;
- data->buffer = (Array)ARRAY_DICT_INIT;
UI *ui = xcalloc(1, sizeof(UI));
ui->width = (int)width;
ui->height = (int)height;
- ui->rgb = enable_rgb;
- ui->data = data;
+ ui->rgb = true;
+ ui->pum_external = false;
ui->resize = remote_ui_resize;
ui->clear = remote_ui_clear;
ui->eol_clear = remote_ui_eol_clear;
@@ -88,37 +88,100 @@ void ui_attach(uint64_t channel_id, Integer width, Integer height,
ui->suspend = remote_ui_suspend;
ui->set_title = remote_ui_set_title;
ui->set_icon = remote_ui_set_icon;
+ ui->event = remote_ui_event;
+
+ for (size_t i = 0; i < options.size; i++) {
+ ui_set_option(ui, options.items[i].key, options.items[i].value, err);
+ if (err->set) {
+ xfree(ui);
+ return;
+ }
+ }
+
+ UIData *data = xmalloc(sizeof(UIData));
+ data->channel_id = channel_id;
+ data->buffer = (Array)ARRAY_DICT_INIT;
+ ui->data = data;
+
pmap_put(uint64_t)(connected_uis, channel_id, ui);
ui_attach_impl(ui);
- return;
}
-void ui_detach(uint64_t channel_id, Error *err)
+/// @deprecated
+void ui_attach(uint64_t channel_id, Integer width, Integer height,
+ Boolean enable_rgb, Error *err)
+{
+ Dictionary opts = ARRAY_DICT_INIT;
+ PUT(opts, "rgb", BOOLEAN_OBJ(enable_rgb));
+ nvim_ui_attach(channel_id, width, height, opts, err);
+ api_free_dictionary(opts);
+}
+
+void nvim_ui_detach(uint64_t channel_id, Error *err)
+ FUNC_API_NOEVAL
{
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
api_set_error(err, Exception, _("UI is not attached for channel"));
+ return;
}
remote_ui_disconnect(channel_id);
}
-Object ui_try_resize(uint64_t channel_id, Integer width,
- Integer height, Error *err)
+
+void nvim_ui_try_resize(uint64_t channel_id, Integer width,
+ Integer height, Error *err)
+ FUNC_API_NOEVAL
{
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
api_set_error(err, Exception, _("UI is not attached for channel"));
+ return;
}
if (width <= 0 || height <= 0) {
api_set_error(err, Validation,
_("Expected width > 0 and height > 0"));
- return NIL;
+ return;
}
UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
ui->width = (int)width;
ui->height = (int)height;
ui_refresh();
- return NIL;
+}
+
+void nvim_ui_set_option(uint64_t channel_id, String name,
+ Object value, Error *error)
+ FUNC_API_NOEVAL
+{
+ if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
+ api_set_error(error, Exception, _("UI is not attached for channel"));
+ return;
+ }
+ UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
+
+ ui_set_option(ui, name, value, error);
+ if (!error->set) {
+ ui_refresh();
+ }
+}
+
+static void ui_set_option(UI *ui, String name, Object value, Error *error) {
+ if (strcmp(name.data, "rgb") == 0) {
+ if (value.type != kObjectTypeBoolean) {
+ api_set_error(error, Validation, _("rgb must be a Boolean"));
+ return;
+ }
+ ui->rgb = value.data.boolean;
+ } else if (strcmp(name.data, "popupmenu_external") == 0) {
+ if (value.type != kObjectTypeBoolean) {
+ api_set_error(error, Validation,
+ _("popupmenu_external must be a Boolean"));
+ return;
+ }
+ ui->pum_external = value.data.boolean;
+ } else {
+ api_set_error(error, Validation, _("No such ui option"));
+ }
}
static void push_call(UI *ui, char *name, Array args)
@@ -341,3 +404,19 @@ static void remote_ui_set_icon(UI *ui, char *icon)
ADD(args, STRING_OBJ(cstr_to_string(icon)));
push_call(ui, "set_icon", args);
}
+
+static void remote_ui_event(UI *ui, char *name, Array args, bool *args_consumed)
+{
+ Array my_args = ARRAY_DICT_INIT;
+ // Objects are currently single-reference
+ // make a copy, but only if necessary
+ if (*args_consumed) {
+ for (size_t i = 0; i < args.size; i++) {
+ ADD(my_args, copy_object(args.items[i]));
+ }
+ } else {
+ my_args = args;
+ *args_consumed = true;
+ }
+ push_call(ui, name, my_args);
+}
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index ac7cc65ee4..d8cdad961b 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -14,6 +14,7 @@
#include "nvim/msgpack_rpc/channel.h"
#include "nvim/vim.h"
#include "nvim/buffer.h"
+#include "nvim/file_search.h"
#include "nvim/window.h"
#include "nvim/types.h"
#include "nvim/ex_docmd.h"
@@ -21,7 +22,7 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/eval.h"
-#include "nvim/misc2.h"
+#include "nvim/option.h"
#include "nvim/syntax.h"
#include "nvim/getchar.h"
#include "nvim/os/input.h"
@@ -36,7 +37,7 @@
///
/// @param str The command str
/// @param[out] err Details of an error that may have occurred
-void vim_command(String str, Error *err)
+void nvim_command(String str, Error *err)
{
// Run the command
try_start();
@@ -52,17 +53,13 @@ void vim_command(String str, Error *err)
/// @param escape_csi the string needs escaping for K_SPECIAL/CSI bytes
/// @see feedkeys()
/// @see vim_strsave_escape_csi
-void vim_feedkeys(String keys, String mode, Boolean escape_csi)
+void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
{
bool remap = true;
bool insert = false;
bool typed = false;
bool execute = false;
- if (keys.size == 0) {
- return;
- }
-
for (size_t i = 0; i < mode.size; ++i) {
switch (mode.data[i]) {
case 'n': remap = false; break;
@@ -73,6 +70,10 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)
}
}
+ if (keys.size == 0 && !execute) {
+ return;
+ }
+
char *keys_esc;
if (escape_csi) {
// Need to escape K_SPECIAL and CSI before putting the string in the
@@ -92,18 +93,23 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)
typebuf_was_filled = true;
}
if (execute) {
+ int save_msg_scroll = msg_scroll;
+
+ /* Avoid a 1 second delay when the keys start Insert mode. */
+ msg_scroll = false;
exec_normal(true);
+ msg_scroll |= save_msg_scroll;
}
}
-/// Passes input keys to Neovim. Unlike `vim_feedkeys`, this will use a
+/// Passes input keys to Neovim. Unlike `nvim_feedkeys`, this will use a
/// lower-level input buffer and the call is not deferred.
/// This is the most reliable way to emulate real user input.
///
/// @param keys to be typed
/// @return The number of bytes actually written, which can be lower than
/// requested if the buffer becomes full.
-Integer vim_input(String keys)
+Integer nvim_input(String keys)
FUNC_API_ASYNC
{
return (Integer)input_enqueue(keys);
@@ -113,7 +119,7 @@ Integer vim_input(String keys)
///
/// @see replace_termcodes
/// @see cpoptions
-String vim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
+String nvim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
Boolean special)
{
if (str.size == 0) {
@@ -133,10 +139,10 @@ String vim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
return cstr_as_string(ptr);
}
-String vim_command_output(String str, Error *err)
+String nvim_command_output(String str, Error *err)
{
do_cmdline_cmd("redir => v:command_output");
- vim_command(str, err);
+ nvim_command(str, err);
do_cmdline_cmd("redir END");
if (err->set) {
@@ -153,7 +159,7 @@ String vim_command_output(String str, Error *err)
/// @param str The expression str
/// @param[out] err Details of an error that may have occurred
/// @return The expanded object
-Object vim_eval(String str, Error *err)
+Object nvim_eval(String str, Error *err)
{
Object rv = OBJECT_INIT;
// Evaluate the expression
@@ -180,7 +186,7 @@ Object vim_eval(String str, Error *err)
/// @param args Functions arguments packed in an Array
/// @param[out] err Details of an error that may have occurred
/// @return Result of the function call
-Object vim_call_function(String fname, Array args, Error *err)
+Object nvim_call_function(String fname, Array args, Error *err)
{
Object rv = OBJECT_INIT;
if (args.size > MAX_FUNC_ARGS) {
@@ -229,7 +235,7 @@ free_vim_args:
/// @param str Some text
/// @param[out] err Details of an error that may have occurred
/// @return The number of cells
-Integer vim_strwidth(String str, Error *err)
+Integer nvim_strwidth(String str, Error *err)
{
if (str.size > INT_MAX) {
api_set_error(err, Validation, _("String length is too high"));
@@ -242,7 +248,7 @@ Integer vim_strwidth(String str, Error *err)
/// Gets a list of paths contained in 'runtimepath'
///
/// @return The list of paths
-ArrayOf(String) vim_list_runtime_paths(void)
+ArrayOf(String) nvim_list_runtime_paths(void)
{
Array rv = ARRAY_DICT_INIT;
uint8_t *rtp = p_rtp;
@@ -283,7 +289,7 @@ ArrayOf(String) vim_list_runtime_paths(void)
///
/// @param dir The new working directory
/// @param[out] err Details of an error that may have occurred
-void vim_change_directory(String dir, Error *err)
+void nvim_set_current_dir(String dir, Error *err)
{
if (dir.size >= MAXPATHL) {
api_set_error(err, Validation, _("Directory string is too long"));
@@ -311,7 +317,7 @@ void vim_change_directory(String dir, Error *err)
///
/// @param[out] err Details of an error that may have occurred
/// @return The current line string
-String vim_get_current_line(Error *err)
+String nvim_get_current_line(Error *err)
{
return buffer_get_line(curbuf->handle, curwin->w_cursor.lnum - 1, err);
}
@@ -320,7 +326,7 @@ String vim_get_current_line(Error *err)
///
/// @param line The line contents
/// @param[out] err Details of an error that may have occurred
-void vim_set_current_line(String line, Error *err)
+void nvim_set_current_line(String line, Error *err)
{
buffer_set_line(curbuf->handle, curwin->w_cursor.lnum - 1, line, err);
}
@@ -328,7 +334,7 @@ void vim_set_current_line(String line, Error *err)
/// Deletes the current line
///
/// @param[out] err Details of an error that may have occurred
-void vim_del_current_line(Error *err)
+void nvim_del_current_line(Error *err)
{
buffer_del_line(curbuf->handle, curwin->w_cursor.lnum - 1, err);
}
@@ -338,7 +344,7 @@ void vim_del_current_line(Error *err)
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
/// @return The variable value
-Object vim_get_var(String name, Error *err)
+Object nvim_get_var(String name, Error *err)
{
return dict_get_value(&globvardict, name, err);
}
@@ -348,26 +354,46 @@ Object vim_get_var(String name, Error *err)
/// @param name The variable name
/// @param value The variable value
/// @param[out] err Details of an error that may have occurred
+void nvim_set_var(String name, Object value, Error *err)
+{
+ dict_set_value(&globvardict, name, value, false, false, err);
+}
+
+/// Removes a global variable
+///
+/// @param name The variable name
+/// @param[out] err Details of an error that may have occurred
+void nvim_del_var(String name, Error *err)
+{
+ dict_set_value(&globvardict, name, NIL, true, false, err);
+}
+
+/// Sets a global variable
+///
+/// @deprecated
+///
+/// @param name The variable name
+/// @param value The variable value
+/// @param[out] err Details of an error that may have occurred
/// @return The old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
/// or if previous value was `v:null`.
Object vim_set_var(String name, Object value, Error *err)
{
- return dict_set_value(&globvardict, name, value, false, err);
+ return dict_set_value(&globvardict, name, value, false, true, err);
}
/// Removes a global variable
///
+/// @deprecated
+///
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
-///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @return The old value
Object vim_del_var(String name, Error *err)
{
- return dict_set_value(&globvardict, name, NIL, true, err);
+ return dict_set_value(&globvardict, name, NIL, true, true, err);
}
/// Gets a vim variable
@@ -375,7 +401,7 @@ Object vim_del_var(String name, Error *err)
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
/// @return The variable value
-Object vim_get_vvar(String name, Error *err)
+Object nvim_get_vvar(String name, Error *err)
{
return dict_get_value(&vimvardict, name, err);
}
@@ -385,7 +411,7 @@ Object vim_get_vvar(String name, Error *err)
/// @param name The option name
/// @param[out] err Details of an error that may have occurred
/// @return The option value
-Object vim_get_option(String name, Error *err)
+Object nvim_get_option(String name, Error *err)
{
return get_option_from(NULL, SREQ_GLOBAL, name, err);
}
@@ -395,7 +421,7 @@ Object vim_get_option(String name, Error *err)
/// @param name The option name
/// @param value The new option value
/// @param[out] err Details of an error that may have occurred
-void vim_set_option(String name, Object value, Error *err)
+void nvim_set_option(String name, Object value, Error *err)
{
set_option_to(NULL, SREQ_GLOBAL, name, value, err);
}
@@ -403,7 +429,7 @@ void vim_set_option(String name, Object value, Error *err)
/// Writes a message to vim output buffer
///
/// @param str The message
-void vim_out_write(String str)
+void nvim_out_write(String str)
{
write_msg(str, false);
}
@@ -411,25 +437,25 @@ void vim_out_write(String str)
/// Writes a message to vim error buffer
///
/// @param str The message
-void vim_err_write(String str)
+void nvim_err_write(String str)
{
write_msg(str, true);
}
/// Higher level error reporting function that ensures all str contents
-/// are written by sending a trailing linefeed to `vim_err_write`
+/// are written by sending a trailing linefeed to `nvim_err_write`
///
/// @param str The message
-void vim_report_error(String str)
+void nvim_err_writeln(String str)
{
- vim_err_write(str);
- vim_err_write((String) {.data = "\n", .size = 1});
+ nvim_err_write(str);
+ nvim_err_write((String) { .data = "\n", .size = 1 });
}
/// Gets the current list of buffer handles
///
/// @return The number of buffers
-ArrayOf(Buffer) vim_get_buffers(void)
+ArrayOf(Buffer) nvim_list_bufs(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -450,7 +476,7 @@ ArrayOf(Buffer) vim_get_buffers(void)
/// Gets the current buffer
///
/// @reqturn The buffer handle
-Buffer vim_get_current_buffer(void)
+Buffer nvim_get_current_buf(void)
{
return curbuf->handle;
}
@@ -459,7 +485,7 @@ Buffer vim_get_current_buffer(void)
///
/// @param id The buffer handle
/// @param[out] err Details of an error that may have occurred
-void vim_set_current_buffer(Buffer buffer, Error *err)
+void nvim_set_current_buf(Buffer buffer, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -472,7 +498,7 @@ void vim_set_current_buffer(Buffer buffer, Error *err)
if (!try_end(err) && result == FAIL) {
api_set_error(err,
Exception,
- _("Failed to switch to buffer %" PRIu64),
+ _("Failed to switch to buffer %d"),
buffer);
}
}
@@ -480,7 +506,7 @@ void vim_set_current_buffer(Buffer buffer, Error *err)
/// Gets the current list of window handles
///
/// @return The number of windows
-ArrayOf(Window) vim_get_windows(void)
+ArrayOf(Window) nvim_list_wins(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -501,7 +527,7 @@ ArrayOf(Window) vim_get_windows(void)
/// Gets the current window
///
/// @return The window handle
-Window vim_get_current_window(void)
+Window nvim_get_current_win(void)
{
return curwin->handle;
}
@@ -509,7 +535,7 @@ Window vim_get_current_window(void)
/// Sets the current window
///
/// @param handle The window handle
-void vim_set_current_window(Window window, Error *err)
+void nvim_set_current_win(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -522,7 +548,7 @@ void vim_set_current_window(Window window, Error *err)
if (!try_end(err) && win != curwin) {
api_set_error(err,
Exception,
- _("Failed to switch to window %" PRIu64),
+ _("Failed to switch to window %d"),
window);
}
}
@@ -530,7 +556,7 @@ void vim_set_current_window(Window window, Error *err)
/// Gets the current list of tabpage handles
///
/// @return The number of tab pages
-ArrayOf(Tabpage) vim_get_tabpages(void)
+ArrayOf(Tabpage) nvim_list_tabpages(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -551,7 +577,7 @@ ArrayOf(Tabpage) vim_get_tabpages(void)
/// Gets the current tab page
///
/// @return The tab page handle
-Tabpage vim_get_current_tabpage(void)
+Tabpage nvim_get_current_tabpage(void)
{
return curtab->handle;
}
@@ -560,7 +586,7 @@ Tabpage vim_get_current_tabpage(void)
///
/// @param handle The tab page handle
/// @param[out] err Details of an error that may have occurred
-void vim_set_current_tabpage(Tabpage tabpage, Error *err)
+void nvim_set_current_tabpage(Tabpage tabpage, Error *err)
{
tabpage_T *tp = find_tab_by_handle(tabpage, err);
@@ -573,7 +599,7 @@ void vim_set_current_tabpage(Tabpage tabpage, Error *err)
if (!try_end(err) && tp != curtab) {
api_set_error(err,
Exception,
- _("Failed to switch to tabpage %" PRIu64),
+ _("Failed to switch to tabpage %d"),
tabpage);
}
}
@@ -582,7 +608,8 @@ void vim_set_current_tabpage(Tabpage tabpage, Error *err)
///
/// @param channel_id The channel id (passed automatically by the dispatcher)
/// @param event The event type string
-void vim_subscribe(uint64_t channel_id, String event)
+void nvim_subscribe(uint64_t channel_id, String event)
+ FUNC_API_NOEVAL
{
size_t length = (event.size < METHOD_MAXLEN ? event.size : METHOD_MAXLEN);
char e[METHOD_MAXLEN + 1];
@@ -595,7 +622,8 @@ void vim_subscribe(uint64_t channel_id, String event)
///
/// @param channel_id The channel id (passed automatically by the dispatcher)
/// @param event The event type string
-void vim_unsubscribe(uint64_t channel_id, String event)
+void nvim_unsubscribe(uint64_t channel_id, String event)
+ FUNC_API_NOEVAL
{
size_t length = (event.size < METHOD_MAXLEN ?
event.size :
@@ -606,12 +634,12 @@ void vim_unsubscribe(uint64_t channel_id, String event)
channel_unsubscribe(channel_id, e);
}
-Integer vim_name_to_color(String name)
+Integer nvim_get_color_by_name(String name)
{
return name_to_color((uint8_t *)name.data);
}
-Dictionary vim_get_color_map(void)
+Dictionary nvim_get_color_map(void)
{
Dictionary colors = ARRAY_DICT_INIT;
@@ -623,8 +651,8 @@ Dictionary vim_get_color_map(void)
}
-Array vim_get_api_info(uint64_t channel_id)
- FUNC_API_ASYNC
+Array nvim_get_api_info(uint64_t channel_id)
+ FUNC_API_ASYNC FUNC_API_NOEVAL
{
Array rv = ARRAY_DICT_INIT;
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index f644453358..166e43f698 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -11,7 +11,6 @@
#include "nvim/window.h"
#include "nvim/screen.h"
#include "nvim/move.h"
-#include "nvim/misc2.h"
/// Gets the current buffer in a window
@@ -19,7 +18,7 @@
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return The buffer handle
-Buffer window_get_buffer(Window window, Error *err)
+Buffer nvim_win_get_buf(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -35,7 +34,7 @@ Buffer window_get_buffer(Window window, Error *err)
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return the (row, col) tuple
-ArrayOf(Integer, 2) window_get_cursor(Window window, Error *err)
+ArrayOf(Integer, 2) nvim_win_get_cursor(Window window, Error *err)
{
Array rv = ARRAY_DICT_INIT;
win_T *win = find_window_by_handle(window, err);
@@ -53,7 +52,7 @@ ArrayOf(Integer, 2) window_get_cursor(Window window, Error *err)
/// @param window The window handle
/// @param pos the (row, col) tuple representing the new position
/// @param[out] err Details of an error that may have occurred
-void window_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
+void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -99,7 +98,7 @@ void window_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return the height in rows
-Integer window_get_height(Window window, Error *err)
+Integer nvim_win_get_height(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -116,7 +115,7 @@ Integer window_get_height(Window window, Error *err)
/// @param window The window handle
/// @param height the new height in rows
/// @param[out] err Details of an error that may have occurred
-void window_set_height(Window window, Integer height, Error *err)
+void nvim_win_set_height(Window window, Integer height, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -142,7 +141,7 @@ void window_set_height(Window window, Integer height, Error *err)
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return the width in columns
-Integer window_get_width(Window window, Error *err)
+Integer nvim_win_get_width(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -159,7 +158,7 @@ Integer window_get_width(Window window, Error *err)
/// @param window The window handle
/// @param width the new width in columns
/// @param[out] err Details of an error that may have occurred
-void window_set_width(Window window, Integer width, Error *err)
+void nvim_win_set_width(Window window, Integer width, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -186,7 +185,7 @@ void window_set_width(Window window, Integer width, Error *err)
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
/// @return The variable value
-Object window_get_var(Window window, String name, Error *err)
+Object nvim_win_get_var(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -203,6 +202,41 @@ Object window_get_var(Window window, String name, Error *err)
/// @param name The variable name
/// @param value The variable value
/// @param[out] err Details of an error that may have occurred
+void nvim_win_set_var(Window window, String name, Object value, Error *err)
+{
+ win_T *win = find_window_by_handle(window, err);
+
+ if (!win) {
+ return;
+ }
+
+ dict_set_value(win->w_vars, name, value, false, false, err);
+}
+
+/// Removes a window-scoped (w:) variable
+///
+/// @param window The window handle
+/// @param name The variable name
+/// @param[out] err Details of an error that may have occurred
+void nvim_win_del_var(Window window, String name, Error *err)
+{
+ win_T *win = find_window_by_handle(window, err);
+
+ if (!win) {
+ return;
+ }
+
+ dict_set_value(win->w_vars, name, NIL, true, false, err);
+}
+
+/// Sets a window-scoped (w:) variable
+///
+/// @deprecated
+///
+/// @param window The window handle
+/// @param name The variable name
+/// @param value The variable value
+/// @param[out] err Details of an error that may have occurred
/// @return The old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
@@ -215,18 +249,17 @@ Object window_set_var(Window window, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(win->w_vars, name, value, false, err);
+ return dict_set_value(win->w_vars, name, value, false, true, err);
}
/// Removes a window-scoped (w:) variable
///
+/// @deprecated
+///
/// @param window The window handle
/// @param name The variable name
/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
-///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @return The old value
Object window_del_var(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -235,7 +268,7 @@ Object window_del_var(Window window, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(win->w_vars, name, NIL, true, err);
+ return dict_set_value(win->w_vars, name, NIL, true, true, err);
}
/// Gets a window option value
@@ -244,7 +277,7 @@ Object window_del_var(Window window, String name, Error *err)
/// @param name The option name
/// @param[out] err Details of an error that may have occurred
/// @return The option value
-Object window_get_option(Window window, String name, Error *err)
+Object nvim_win_get_option(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -262,7 +295,7 @@ Object window_get_option(Window window, String name, Error *err)
/// @param name The option name
/// @param value The option value
/// @param[out] err Details of an error that may have occurred
-void window_set_option(Window window, String name, Object value, Error *err)
+void nvim_win_set_option(Window window, String name, Object value, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -278,7 +311,7 @@ void window_set_option(Window window, String name, Object value, Error *err)
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return The (row, col) tuple with the window position
-ArrayOf(Integer, 2) window_get_position(Window window, Error *err)
+ArrayOf(Integer, 2) nvim_win_get_position(Window window, Error *err)
{
Array rv = ARRAY_DICT_INIT;
win_T *win = find_window_by_handle(window, err);
@@ -296,7 +329,7 @@ ArrayOf(Integer, 2) window_get_position(Window window, Error *err)
/// @param window The window handle
/// @param[out] err Details of an error that may have occurred
/// @return The tab page that contains the window
-Tabpage window_get_tabpage(Window window, Error *err)
+Tabpage nvim_win_get_tabpage(Window window, Error *err)
{
Tabpage rv = 0;
win_T *win = find_window_by_handle(window, err);
@@ -312,7 +345,7 @@ Tabpage window_get_tabpage(Window window, Error *err)
///
/// @param window The window handle
/// @return true if the window is valid, false otherwise
-Boolean window_is_valid(Window window)
+Boolean nvim_win_is_valid(Window window)
{
Error stub = ERROR_INIT;
return find_window_by_handle(window, &stub) != NULL;
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index c934d44e70..b42ad1c18a 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -36,6 +36,7 @@
#include "nvim/ex_eval.h"
#include "nvim/ex_getln.h"
#include "nvim/fileio.h"
+#include "nvim/file_search.h"
#include "nvim/fold.h"
#include "nvim/getchar.h"
#include "nvim/hashtab.h"
@@ -48,7 +49,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/option.h"
@@ -1397,8 +1397,7 @@ buflist_new (
}
if (buf != curbuf || curbuf == NULL) {
buf = xcalloc(1, sizeof(buf_T));
- handle_register_buffer(buf);
- /* init b: variables */
+ // init b: variables
buf->b_vars = dict_alloc();
init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
}
@@ -1451,11 +1450,12 @@ buflist_new (
lastbuf = buf;
buf->b_fnum = top_file_num++;
- if (top_file_num < 0) { /* wrap around (may cause duplicates) */
+ handle_register_buffer(buf);
+ if (top_file_num < 0) { // wrap around (may cause duplicates)
EMSG(_("W14: Warning: List of file names overflow"));
if (emsg_silent == 0) {
ui_flush();
- os_delay(3000L, true); /* make sure it is noticed */
+ os_delay(3000L, true); // make sure it is noticed
}
top_file_num = 1;
}
@@ -5231,12 +5231,12 @@ wipe_buffer (
int aucmd /* When TRUE trigger autocommands. */
)
{
- if (buf->b_fnum == top_file_num - 1)
- --top_file_num;
-
- if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ if (!aucmd) {
+ // Don't trigger BufDelete autocommands here.
block_autocmds();
- close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
- if (!aucmd)
+ }
+ close_buffer(NULL, buf, DOBUF_WIPE, false);
+ if (!aucmd) {
unblock_autocmds();
+ }
}
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h
index b515c4e1e4..ab5987612c 100644
--- a/src/nvim/buffer_defs.h
+++ b/src/nvim/buffer_defs.h
@@ -461,9 +461,10 @@ typedef struct {
*/
struct file_buffer {
- uint64_t handle; // unique identifier for the buffer
- memline_T b_ml; /* associated memline (also contains line
- count) */
+ handle_T handle; // unique id for the buffer (buffer number)
+#define b_fnum handle
+
+ memline_T b_ml; // associated memline (also contains line count
buf_T *b_next; /* links in list of buffers */
buf_T *b_prev;
@@ -487,8 +488,6 @@ struct file_buffer {
bool file_id_valid;
FileID file_id;
- int b_fnum; /* buffer number for this file. */
-
bool b_changed; /* 'modified': Set to true if something in the
file has been changed and not written out. */
int b_changedtick; /* incremented for each change, also for undo */
@@ -799,28 +798,27 @@ struct diffblock_S {
# define SNAP_AUCMD_IDX 1
# define SNAP_COUNT 2
-/*
- * Tab pages point to the top frame of each tab page.
- * Note: Most values are NOT valid for the current tab page! Use "curwin",
- * "firstwin", etc. for that. "tp_topframe" is always valid and can be
- * compared against "topframe" to find the current tab page.
- */
+/// Tab pages point to the top frame of each tab page.
+/// Note: Most values are NOT valid for the current tab page! Use "curwin",
+/// "firstwin", etc. for that. "tp_topframe" is always valid and can be
+/// compared against "topframe" to find the current tab page.
typedef struct tabpage_S tabpage_T;
struct tabpage_S {
- uint64_t handle;
- tabpage_T *tp_next; /* next tabpage or NULL */
- frame_T *tp_topframe; /* topframe for the windows */
- win_T *tp_curwin; /* current window in this Tab page */
- win_T *tp_prevwin; /* previous window in this Tab page */
- win_T *tp_firstwin; /* first window in this Tab page */
- win_T *tp_lastwin; /* last window in this Tab page */
- long tp_old_Rows; /* Rows when Tab page was left */
- long tp_old_Columns; /* Columns when Tab page was left */
- long tp_ch_used; /* value of 'cmdheight' when frame size
- was set */
+ handle_T handle;
+ tabpage_T *tp_next; ///< next tabpage or NULL
+ frame_T *tp_topframe; ///< topframe for the windows
+ win_T *tp_curwin; ///< current window in this Tab page
+ win_T *tp_prevwin; ///< previous window in this Tab page
+ win_T *tp_firstwin; ///< first window in this Tab page
+ win_T *tp_lastwin; ///< last window in this Tab page
+ long tp_old_Rows; ///< Rows when Tab page was left
+ long tp_old_Columns; ///< Columns when Tab page was left
+ long tp_ch_used; ///< value of 'cmdheight' when frame size
+ ///< was set
+
diff_T *tp_first_diff;
buf_T *(tp_diffbuf[DB_COUNT]);
- int tp_diff_invalid; ///< list of diffs is outdated */
+ int tp_diff_invalid; ///< list of diffs is outdated
frame_T *(tp_snapshot[SNAP_COUNT]); ///< window layout snapshots
dictitem_T tp_winvar; ///< variable for "t:" Dictionary
dict_T *tp_vars; ///< internal variables, local to tab page
@@ -936,9 +934,10 @@ struct matchitem {
* All row numbers are relative to the start of the window, except w_winrow.
*/
struct window_S {
- uint64_t handle;
- buf_T *w_buffer; /* buffer we are a window into (used
- often, keep it the first item!) */
+ handle_T handle; ///< unique identifier for the window
+
+ buf_T *w_buffer; ///< buffer we are a window into (used
+ ///< often, keep it the first item!)
synblock_T *w_s; /* for :ownsyntax */
diff --git a/src/nvim/charset.c b/src/nvim/charset.c
index 22ca0fb0cc..78f5d96fc7 100644
--- a/src/nvim/charset.c
+++ b/src/nvim/charset.c
@@ -19,10 +19,11 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
+#include "nvim/option.h"
#include "nvim/os_unix.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/path.h"
@@ -1739,8 +1740,11 @@ char_u* skiptowhite_esc(char_u *p) {
/// @return Number read from the string.
intmax_t getdigits(char_u **pp)
{
+ errno = 0;
intmax_t number = strtoimax((char *)*pp, (char **)pp, 10);
- assert(errno != ERANGE);
+ if (number == INTMAX_MAX || number == INTMAX_MIN) {
+ assert(errno != ERANGE);
+ }
return number;
}
diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c
index afaa6022c9..3ba9da34f2 100644
--- a/src/nvim/cursor.c
+++ b/src/nvim/cursor.c
@@ -9,6 +9,7 @@
#include "nvim/misc1.h"
#include "nvim/move.h"
#include "nvim/screen.h"
+#include "nvim/state.h"
#include "nvim/vim.h"
#include "nvim/ascii.h"
diff --git a/src/nvim/cursor.h b/src/nvim/cursor.h
index 09cc5a813c..1cbe8a609e 100644
--- a/src/nvim/cursor.h
+++ b/src/nvim/cursor.h
@@ -4,7 +4,6 @@
#include <stdbool.h>
#include "nvim/vim.h"
-#include "nvim/misc2.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "cursor.h.generated.h"
diff --git a/src/nvim/cursor_shape.c b/src/nvim/cursor_shape.c
index 87425ca567..b50462664c 100644
--- a/src/nvim/cursor_shape.c
+++ b/src/nvim/cursor_shape.c
@@ -3,7 +3,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/cursor_shape.h"
-#include "nvim/misc2.h"
#include "nvim/ex_getln.h"
#include "nvim/charset.h"
#include "nvim/strings.h"
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 4826e70727..ef5acf4845 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -21,7 +21,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/move.h"
#include "nvim/normal.h"
diff --git a/src/nvim/digraph.c b/src/nvim/digraph.c
index aad145b3e5..6ba6e659a6 100644
--- a/src/nvim/digraph.c
+++ b/src/nvim/digraph.c
@@ -17,7 +17,6 @@
#include "nvim/getchar.h"
#include "nvim/mbyte.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/garray.h"
#include "nvim/normal.h"
@@ -1691,8 +1690,11 @@ static void printdigraph(digr_T *dp)
msg_putchar('\n');
}
- if (msg_col) {
- while (msg_col % list_width != 0) {
+
+ // Make msg_col a multiple of list_width by using spaces.
+ if (msg_col % list_width != 0) {
+ int spaces = (msg_col / list_width + 1) * list_width - msg_col;
+ while (spaces--) {
msg_putchar(' ');
}
}
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 98ec9ae280..18d5ea533d 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -29,7 +29,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -463,6 +462,8 @@ static void insert_enter(InsertState *s)
o_lnum = curwin->w_cursor.lnum;
}
+ foldUpdateAll(curwin);
+ foldOpenCursor();
if (s->cmdchar != 'r' && s->cmdchar != 'v') {
apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL, false, curbuf);
}
@@ -2472,6 +2473,7 @@ void ins_compl_show_pum(void)
int cur = -1;
colnr_T col;
int lead_len = 0;
+ bool array_changed = false;
if (!pum_wanted() || !pum_enough_matches())
return;
@@ -2483,7 +2485,8 @@ void ins_compl_show_pum(void)
update_screen(0);
if (compl_match_array == NULL) {
- /* Need to build the popup menu list. */
+ array_changed = true;
+ // Need to build the popup menu list.
compl_match_arraysize = 0;
compl = compl_first_match;
/*
@@ -2586,7 +2589,7 @@ void ins_compl_show_pum(void)
// Use the cursor to get all wrapping and other settings right.
col = curwin->w_cursor.col;
curwin->w_cursor.col = compl_col;
- pum_display(compl_match_array, compl_match_arraysize, cur);
+ pum_display(compl_match_array, compl_match_arraysize, cur, array_changed);
curwin->w_cursor.col = col;
}
@@ -3530,21 +3533,15 @@ int ins_compl_add_tv(typval_T *tv, int dir)
char_u *(cptext[CPT_COUNT]);
if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) {
- word = get_dict_string(tv->vval.v_dict, (char_u *)"word", FALSE);
- cptext[CPT_ABBR] = get_dict_string(tv->vval.v_dict,
- (char_u *)"abbr", FALSE);
- cptext[CPT_MENU] = get_dict_string(tv->vval.v_dict,
- (char_u *)"menu", FALSE);
- cptext[CPT_KIND] = get_dict_string(tv->vval.v_dict,
- (char_u *)"kind", FALSE);
- cptext[CPT_INFO] = get_dict_string(tv->vval.v_dict,
- (char_u *)"info", FALSE);
- if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
- icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
- if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
- adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
- if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
- aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
+ word = get_dict_string(tv->vval.v_dict, "word", false);
+ cptext[CPT_ABBR] = get_dict_string(tv->vval.v_dict, "abbr", false);
+ cptext[CPT_MENU] = get_dict_string(tv->vval.v_dict, "menu", false);
+ cptext[CPT_KIND] = get_dict_string(tv->vval.v_dict, "kind", false);
+ cptext[CPT_INFO] = get_dict_string(tv->vval.v_dict, "info", false);
+
+ icase = get_dict_number(tv->vval.v_dict, "icase");
+ adup = get_dict_number(tv->vval.v_dict, "dup");
+ aempty = get_dict_number(tv->vval.v_dict, "empty");
} else {
word = get_tv_string_chk(tv);
memset(cptext, 0, sizeof(cptext));
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index a5333d74be..c762ce9fff 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -44,7 +44,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/map.h"
#include "nvim/file_search.h"
@@ -63,6 +62,7 @@
#include "nvim/search.h"
#include "nvim/sha256.h"
#include "nvim/spell.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/tag.h"
@@ -90,6 +90,8 @@
#include "nvim/os/dl.h"
#include "nvim/os/input.h"
#include "nvim/event/loop.h"
+#include "nvim/lib/kvec.h"
+#include "nvim/lib/khash.h"
#include "nvim/lib/queue.h"
#include "nvim/eval/typval_encode.h"
@@ -408,6 +410,7 @@ typedef struct {
Terminal *term;
bool stopped;
bool exited;
+ bool rpc;
int refcount;
ufunc_T *on_stdout, *on_stderr, *on_exit;
dict_T *self;
@@ -435,11 +438,28 @@ typedef struct {
TimeWatcher tw;
int timer_id;
int repeat_count;
+ int refcount;
long timeout;
bool stopped;
ufunc_T *callback;
} timer_T;
+typedef void (*FunPtr)(void);
+
+/// Prototype of C function that implements VimL function
+typedef void (*VimLFunc)(typval_T *args, typval_T *rvar, FunPtr data);
+
+/// Structure holding VimL function definition
+typedef struct fst {
+ char *name; ///< Name of the function.
+ uint8_t min_argc; ///< Minimal number of arguments.
+ uint8_t max_argc; ///< Maximal number of arguments.
+ VimLFunc func; ///< Function implementation.
+ FunPtr data; ///< Userdata for function implementation.
+} VimLFuncDef;
+
+KHASH_MAP_INIT_STR(functions, VimLFuncDef)
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "eval.c.generated.h"
#endif
@@ -447,8 +467,7 @@ typedef struct {
#define FNE_INCL_BR 1 /* find_name_end(): include [] in name */
#define FNE_CHECK_START 2 /* find_name_end(): check name starts with
valid character */
-static uint64_t current_job_id = 1;
-static PMap(uint64_t) *jobs = NULL;
+static PMap(uint64_t) *jobs = NULL;
static uint64_t last_timer_id = 0;
static PMap(uint64_t) *timers = NULL;
@@ -6481,19 +6500,20 @@ static ufunc_T *find_ufunc(uint8_t *name)
return rv;
}
-/*
- * Get a string item from a dictionary.
- * When "save" is TRUE allocate memory for it.
- * Returns NULL if the entry doesn't exist.
- */
-char_u *get_dict_string(dict_T *d, char_u *key, int save)
+/// Get a string item from a dictionary.
+///
+/// @param save whether memory should be allocated for the return value
+///
+/// @return the entry or NULL if the entry doesn't exist.
+char_u *get_dict_string(dict_T *d, char *key, bool save)
{
dictitem_T *di;
char_u *s;
- di = dict_find(d, key, -1);
- if (di == NULL)
+ di = dict_find(d, (char_u *)key, -1);
+ if (di == NULL) {
return NULL;
+ }
s = get_tv_string(&di->di_tv);
if (save) {
s = vim_strsave(s);
@@ -6501,15 +6521,15 @@ char_u *get_dict_string(dict_T *d, char_u *key, int save)
return s;
}
-/*
- * Get a number item from a dictionary.
- * Returns 0 if the entry doesn't exist.
- */
-long get_dict_number(dict_T *d, char_u *key)
+/// Get a number item from a dictionary.
+///
+/// @return the entry or 0 if the entry doesn't exist.
+long get_dict_number(dict_T *d, char *key)
{
- dictitem_T *di = dict_find(d, key, -1);
- if (di == NULL)
+ dictitem_T *di = dict_find(d, (char_u *)key, -1);
+ if (di == NULL) {
return 0;
+ }
return get_tv_number(&di->di_tv);
}
@@ -6679,327 +6699,9 @@ static int get_env_tv(char_u **arg, typval_T *rettv, int evaluate)
return OK;
}
-/*
- * Array with names and number of arguments of all internal functions
- * MUST BE KEPT SORTED IN strcmp() ORDER FOR BINARY SEARCH!
- */
-static struct fst {
- char *f_name; /* function name */
- char f_min_argc; /* minimal number of arguments */
- char f_max_argc; /* maximal number of arguments */
- void (*f_func)(typval_T *args, typval_T *rvar);
- /* implementation of function */
-} functions[] =
-{
- { "abs", 1, 1, f_abs },
- { "acos", 1, 1, f_acos }, // WJMc
- { "add", 2, 2, f_add },
- { "and", 2, 2, f_and },
- { "api_info", 0, 0, f_api_info },
- { "append", 2, 2, f_append },
- { "argc", 0, 0, f_argc },
- { "argidx", 0, 0, f_argidx },
- { "arglistid", 0, 2, f_arglistid },
- { "argv", 0, 1, f_argv },
- { "asin", 1, 1, f_asin }, // WJMc
- { "assert_equal", 2, 3, f_assert_equal },
- { "assert_exception", 1, 2, f_assert_exception },
- { "assert_fails", 1, 2, f_assert_fails },
- { "assert_false", 1, 2, f_assert_false },
- { "assert_match", 2, 3, f_assert_match },
- { "assert_notequal", 2, 3, f_assert_notequal },
- { "assert_notmatch", 2, 3, f_assert_notmatch },
- { "assert_true", 1, 2, f_assert_true },
- { "atan", 1, 1, f_atan },
- { "atan2", 2, 2, f_atan2 },
- { "browse", 4, 4, f_browse },
- { "browsedir", 2, 2, f_browsedir },
- { "bufexists", 1, 1, f_bufexists },
- { "buffer_exists", 1, 1, f_bufexists }, // obsolete
- { "buffer_name", 1, 1, f_bufname }, // obsolete
- { "buffer_number", 1, 1, f_bufnr }, // obsolete
- { "buflisted", 1, 1, f_buflisted },
- { "bufloaded", 1, 1, f_bufloaded },
- { "bufname", 1, 1, f_bufname },
- { "bufnr", 1, 2, f_bufnr },
- { "bufwinnr", 1, 1, f_bufwinnr },
- { "byte2line", 1, 1, f_byte2line },
- { "byteidx", 2, 2, f_byteidx },
- { "byteidxcomp", 2, 2, f_byteidxcomp },
- { "call", 2, 3, f_call },
- { "ceil", 1, 1, f_ceil },
- { "changenr", 0, 0, f_changenr },
- { "char2nr", 1, 2, f_char2nr },
- { "cindent", 1, 1, f_cindent },
- { "clearmatches", 0, 0, f_clearmatches },
- { "col", 1, 1, f_col },
- { "complete", 2, 2, f_complete },
- { "complete_add", 1, 1, f_complete_add },
- { "complete_check", 0, 0, f_complete_check },
- { "confirm", 1, 4, f_confirm },
- { "copy", 1, 1, f_copy },
- { "cos", 1, 1, f_cos },
- { "cosh", 1, 1, f_cosh },
- { "count", 2, 4, f_count },
- { "cscope_connection", 0, 3, f_cscope_connection },
- { "cursor", 1, 3, f_cursor },
- { "deepcopy", 1, 2, f_deepcopy },
- { "delete", 1, 2, f_delete },
- { "dictwatcheradd", 3, 3, f_dictwatcheradd },
- { "dictwatcherdel", 3, 3, f_dictwatcherdel },
- { "did_filetype", 0, 0, f_did_filetype },
- { "diff_filler", 1, 1, f_diff_filler },
- { "diff_hlID", 2, 2, f_diff_hlID },
- { "empty", 1, 1, f_empty },
- { "escape", 2, 2, f_escape },
- { "eval", 1, 1, f_eval },
- { "eventhandler", 0, 0, f_eventhandler },
- { "executable", 1, 1, f_executable },
- { "execute", 1, 1, f_execute },
- { "exepath", 1, 1, f_exepath },
- { "exists", 1, 1, f_exists },
- { "exp", 1, 1, f_exp },
- { "expand", 1, 3, f_expand },
- { "extend", 2, 3, f_extend },
- { "feedkeys", 1, 2, f_feedkeys },
- { "file_readable", 1, 1, f_filereadable }, // obsolete
- { "filereadable", 1, 1, f_filereadable },
- { "filewritable", 1, 1, f_filewritable },
- { "filter", 2, 2, f_filter },
- { "finddir", 1, 3, f_finddir },
- { "findfile", 1, 3, f_findfile },
- { "float2nr", 1, 1, f_float2nr },
- { "floor", 1, 1, f_floor },
- { "fmod", 2, 2, f_fmod },
- { "fnameescape", 1, 1, f_fnameescape },
- { "fnamemodify", 2, 2, f_fnamemodify },
- { "foldclosed", 1, 1, f_foldclosed },
- { "foldclosedend", 1, 1, f_foldclosedend },
- { "foldlevel", 1, 1, f_foldlevel },
- { "foldtext", 0, 0, f_foldtext },
- { "foldtextresult", 1, 1, f_foldtextresult },
- { "foreground", 0, 0, f_foreground },
- { "function", 1, 1, f_function },
- { "garbagecollect", 0, 1, f_garbagecollect },
- { "get", 2, 3, f_get },
- { "getbufline", 2, 3, f_getbufline },
- { "getbufvar", 2, 3, f_getbufvar },
- { "getchar", 0, 1, f_getchar },
- { "getcharmod", 0, 0, f_getcharmod },
- { "getcharsearch", 0, 0, f_getcharsearch },
- { "getcmdline", 0, 0, f_getcmdline },
- { "getcmdpos", 0, 0, f_getcmdpos },
- { "getcmdtype", 0, 0, f_getcmdtype },
- { "getcmdwintype", 0, 0, f_getcmdwintype },
- { "getcompletion", 2, 2, f_getcompletion },
- { "getcurpos", 0, 0, f_getcurpos },
- { "getcwd", 0, 2, f_getcwd },
- { "getfontname", 0, 1, f_getfontname },
- { "getfperm", 1, 1, f_getfperm },
- { "getfsize", 1, 1, f_getfsize },
- { "getftime", 1, 1, f_getftime },
- { "getftype", 1, 1, f_getftype },
- { "getline", 1, 2, f_getline },
- { "getloclist", 1, 1, f_getqflist },
- { "getmatches", 0, 0, f_getmatches },
- { "getpid", 0, 0, f_getpid },
- { "getpos", 1, 1, f_getpos },
- { "getqflist", 0, 0, f_getqflist },
- { "getreg", 0, 3, f_getreg },
- { "getregtype", 0, 1, f_getregtype },
- { "gettabvar", 2, 3, f_gettabvar },
- { "gettabwinvar", 3, 4, f_gettabwinvar },
- { "getwinposx", 0, 0, f_getwinposx },
- { "getwinposy", 0, 0, f_getwinposy },
- { "getwinvar", 2, 3, f_getwinvar },
- { "glob", 1, 4, f_glob },
- { "glob2regpat", 1, 1, f_glob2regpat },
- { "globpath", 2, 5, f_globpath },
- { "has", 1, 1, f_has },
- { "has_key", 2, 2, f_has_key },
- { "haslocaldir", 0, 2, f_haslocaldir },
- { "hasmapto", 1, 3, f_hasmapto },
- { "highlightID", 1, 1, f_hlID }, // obsolete
- { "highlight_exists", 1, 1, f_hlexists }, // obsolete
- { "histadd", 2, 2, f_histadd },
- { "histdel", 1, 2, f_histdel },
- { "histget", 1, 2, f_histget },
- { "histnr", 1, 1, f_histnr },
- { "hlID", 1, 1, f_hlID },
- { "hlexists", 1, 1, f_hlexists },
- { "hostname", 0, 0, f_hostname },
- { "iconv", 3, 3, f_iconv },
- { "indent", 1, 1, f_indent },
- { "index", 2, 4, f_index },
- { "input", 1, 3, f_input },
- { "inputdialog", 1, 3, f_inputdialog },
- { "inputlist", 1, 1, f_inputlist },
- { "inputrestore", 0, 0, f_inputrestore },
- { "inputsave", 0, 0, f_inputsave },
- { "inputsecret", 1, 2, f_inputsecret },
- { "insert", 2, 3, f_insert },
- { "invert", 1, 1, f_invert },
- { "isdirectory", 1, 1, f_isdirectory },
- { "islocked", 1, 1, f_islocked },
- { "items", 1, 1, f_items },
- { "jobclose", 1, 2, f_jobclose },
- { "jobpid", 1, 1, f_jobpid },
- { "jobresize", 3, 3, f_jobresize },
- { "jobsend", 2, 2, f_jobsend },
- { "jobstart", 1, 2, f_jobstart },
- { "jobstop", 1, 1, f_jobstop },
- { "jobwait", 1, 2, f_jobwait },
- { "join", 1, 2, f_join },
- { "json_decode", 1, 1, f_json_decode },
- { "json_encode", 1, 1, f_json_encode },
- { "keys", 1, 1, f_keys },
- { "last_buffer_nr", 0, 0, f_last_buffer_nr }, // obsolete
- { "len", 1, 1, f_len },
- { "libcall", 3, 3, f_libcall },
- { "libcallnr", 3, 3, f_libcallnr },
- { "line", 1, 1, f_line },
- { "line2byte", 1, 1, f_line2byte },
- { "lispindent", 1, 1, f_lispindent },
- { "localtime", 0, 0, f_localtime },
- { "log", 1, 1, f_log },
- { "log10", 1, 1, f_log10 },
- { "map", 2, 2, f_map },
- { "maparg", 1, 4, f_maparg },
- { "mapcheck", 1, 3, f_mapcheck },
- { "match", 2, 4, f_match },
- { "matchadd", 2, 5, f_matchadd },
- { "matchaddpos", 2, 5, f_matchaddpos },
- { "matcharg", 1, 1, f_matcharg },
- { "matchdelete", 1, 1, f_matchdelete },
- { "matchend", 2, 4, f_matchend },
- { "matchlist", 2, 4, f_matchlist },
- { "matchstr", 2, 4, f_matchstr },
- { "max", 1, 1, f_max },
- { "min", 1, 1, f_min },
- { "mkdir", 1, 3, f_mkdir },
- { "mode", 0, 1, f_mode },
- { "msgpackdump", 1, 1, f_msgpackdump },
- { "msgpackparse", 1, 1, f_msgpackparse },
- { "nextnonblank", 1, 1, f_nextnonblank },
- { "nr2char", 1, 2, f_nr2char },
- { "or", 2, 2, f_or },
- { "pathshorten", 1, 1, f_pathshorten },
- { "pow", 2, 2, f_pow },
- { "prevnonblank", 1, 1, f_prevnonblank },
- { "printf", 2, MAX_FUNC_ARGS, f_printf },
- { "pumvisible", 0, 0, f_pumvisible },
- { "py3eval", 1, 1, f_py3eval },
- { "pyeval", 1, 1, f_pyeval },
- { "range", 1, 3, f_range },
- { "readfile", 1, 3, f_readfile },
- { "reltime", 0, 2, f_reltime },
- { "reltimefloat", 1, 1, f_reltimefloat },
- { "reltimestr", 1, 1, f_reltimestr },
- { "remove", 2, 3, f_remove },
- { "rename", 2, 2, f_rename },
- { "repeat", 2, 2, f_repeat },
- { "resolve", 1, 1, f_resolve },
- { "reverse", 1, 1, f_reverse },
- { "round", 1, 1, f_round },
- { "rpcnotify", 2, MAX_FUNC_ARGS, f_rpcnotify },
- { "rpcrequest", 2, MAX_FUNC_ARGS, f_rpcrequest },
- { "rpcstart", 1, 2, f_rpcstart },
- { "rpcstop", 1, 1, f_rpcstop },
- { "screenattr", 2, 2, f_screenattr },
- { "screenchar", 2, 2, f_screenchar },
- { "screencol", 0, 0, f_screencol },
- { "screenrow", 0, 0, f_screenrow },
- { "search", 1, 4, f_search },
- { "searchdecl", 1, 3, f_searchdecl },
- { "searchpair", 3, 7, f_searchpair },
- { "searchpairpos", 3, 7, f_searchpairpos },
- { "searchpos", 1, 4, f_searchpos },
- { "serverlist", 0, 0, f_serverlist },
- { "serverstart", 0, 1, f_serverstart },
- { "serverstop", 1, 1, f_serverstop },
- { "setbufvar", 3, 3, f_setbufvar },
- { "setcharsearch", 1, 1, f_setcharsearch },
- { "setcmdpos", 1, 1, f_setcmdpos },
- { "setfperm", 2, 2, f_setfperm },
- { "setline", 2, 2, f_setline },
- { "setloclist", 2, 4, f_setloclist },
- { "setmatches", 1, 1, f_setmatches },
- { "setpos", 2, 2, f_setpos },
- { "setqflist", 1, 3, f_setqflist },
- { "setreg", 2, 3, f_setreg },
- { "settabvar", 3, 3, f_settabvar },
- { "settabwinvar", 4, 4, f_settabwinvar },
- { "setwinvar", 3, 3, f_setwinvar },
- { "sha256", 1, 1, f_sha256 },
- { "shellescape", 1, 2, f_shellescape },
- { "shiftwidth", 0, 0, f_shiftwidth },
- { "simplify", 1, 1, f_simplify },
- { "sin", 1, 1, f_sin },
- { "sinh", 1, 1, f_sinh },
- { "sort", 1, 3, f_sort },
- { "soundfold", 1, 1, f_soundfold },
- { "spellbadword", 0, 1, f_spellbadword },
- { "spellsuggest", 1, 3, f_spellsuggest },
- { "split", 1, 3, f_split },
- { "sqrt", 1, 1, f_sqrt },
- { "str2float", 1, 1, f_str2float },
- { "str2nr", 1, 2, f_str2nr },
- { "strchars", 1, 2, f_strchars },
- { "strdisplaywidth", 1, 2, f_strdisplaywidth },
- { "strftime", 1, 2, f_strftime },
- { "stridx", 2, 3, f_stridx },
- { "string", 1, 1, f_string },
- { "strlen", 1, 1, f_strlen },
- { "strpart", 2, 3, f_strpart },
- { "strridx", 2, 3, f_strridx },
- { "strtrans", 1, 1, f_strtrans },
- { "strwidth", 1, 1, f_strwidth },
- { "submatch", 1, 2, f_submatch },
- { "substitute", 4, 4, f_substitute },
- { "synID", 3, 3, f_synID },
- { "synIDattr", 2, 3, f_synIDattr },
- { "synIDtrans", 1, 1, f_synIDtrans },
- { "synconcealed", 2, 2, f_synconcealed },
- { "synstack", 2, 2, f_synstack },
- { "system", 1, 2, f_system },
- { "systemlist", 1, 3, f_systemlist },
- { "tabpagebuflist", 0, 1, f_tabpagebuflist },
- { "tabpagenr", 0, 1, f_tabpagenr },
- { "tabpagewinnr", 1, 2, f_tabpagewinnr },
- { "tagfiles", 0, 0, f_tagfiles },
- { "taglist", 1, 1, f_taglist },
- { "tan", 1, 1, f_tan },
- { "tanh", 1, 1, f_tanh },
- { "tempname", 0, 0, f_tempname },
- { "termopen", 1, 2, f_termopen },
- { "test", 1, 1, f_test },
- { "timer_start", 2, 3, f_timer_start },
- { "timer_stop", 1, 1, f_timer_stop },
- { "tolower", 1, 1, f_tolower },
- { "toupper", 1, 1, f_toupper },
- { "tr", 3, 3, f_tr },
- { "trunc", 1, 1, f_trunc },
- { "type", 1, 1, f_type },
- { "undofile", 1, 1, f_undofile },
- { "undotree", 0, 0, f_undotree },
- { "uniq", 1, 3, f_uniq },
- { "values", 1, 1, f_values },
- { "virtcol", 1, 1, f_virtcol },
- { "visualmode", 0, 1, f_visualmode },
- { "wildmenumode", 0, 0, f_wildmenumode },
- { "winbufnr", 1, 1, f_winbufnr },
- { "wincol", 0, 0, f_wincol },
- { "winheight", 1, 1, f_winheight },
- { "winline", 0, 0, f_winline },
- { "winnr", 0, 1, f_winnr },
- { "winrestcmd", 0, 0, f_winrestcmd },
- { "winrestview", 1, 1, f_winrestview },
- { "winsaveview", 0, 0, f_winsaveview },
- { "winwidth", 1, 1, f_winwidth },
- { "wordcount", 0, 0, f_wordcount },
- { "writefile", 2, 3, f_writefile },
- { "xor", 2, 2, f_xor },
-};
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "funcs.generated.h"
+#endif
/*
@@ -7018,15 +6720,25 @@ char_u *get_function_name(expand_T *xp, int idx)
if (name != NULL)
return name;
}
- if (++intidx < (int)ARRAY_SIZE(functions)) {
- STRCPY(IObuff, functions[intidx].f_name);
- STRCAT(IObuff, "(");
- if (functions[intidx].f_max_argc == 0)
- STRCAT(IObuff, ")");
- return IObuff;
+ while ( (size_t)++intidx < ARRAY_SIZE(functions)
+ && functions[intidx].name[0] == '\0') {
}
- return NULL;
+ if ((size_t)intidx >= ARRAY_SIZE(functions)) {
+ return NULL;
+ }
+
+ const char *const key = functions[intidx].name;
+ const size_t key_len = strlen(key);
+ memcpy(IObuff, key, key_len);
+ IObuff[key_len] = '(';
+ if (functions[intidx].max_argc == 0) {
+ IObuff[key_len + 1] = ')';
+ IObuff[key_len + 2] = NUL;
+ } else {
+ IObuff[key_len + 1] = NUL;
+ }
+ return IObuff;
}
/*
@@ -7051,32 +6763,16 @@ char_u *get_expr_name(expand_T *xp, int idx)
-/*
- * Find internal function in table above.
- * Return index, or -1 if not found
- */
-static int
-find_internal_func (
- char_u *name /* name of the function */
-)
+/// Find internal function in hash functions
+///
+/// @param[in] name Name of the function.
+///
+/// Returns pointer to the function definition or NULL if not found.
+static VimLFuncDef *find_internal_func(const char *const name)
+ FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ALL
{
- int first = 0;
- int last = (int)ARRAY_SIZE(functions) - 1;
-
- /*
- * Find the function name in the table. Binary search.
- */
- while (first <= last) {
- int x = first + ((unsigned)(last - first)) / 2;
- int cmp = STRCMP(name, functions[x].f_name);
- if (cmp < 0)
- last = x - 1;
- else if (cmp > 0)
- first = x + 1;
- else
- return x;
- }
- return -1;
+ size_t len = strlen(name);
+ return find_internal_func_gperf(name, len);
}
/*
@@ -7194,7 +6890,6 @@ call_func (
#define ERROR_NONE 5
#define ERROR_OTHER 6
int error = ERROR_NONE;
- int i;
int llen;
ufunc_T *fp;
#define FLEN_FIXED 40
@@ -7216,12 +6911,13 @@ call_func (
fname_buf[0] = K_SPECIAL;
fname_buf[1] = KS_EXTRA;
fname_buf[2] = (int)KE_SNR;
- i = 3;
- if (eval_fname_sid(name)) { /* "<SID>" or "s:" */
- if (current_SID <= 0)
+ int i = 3;
+ if (eval_fname_sid(name)) { // "<SID>" or "s:"
+ if (current_SID <= 0) {
error = ERROR_SCRIPT;
- else {
- sprintf((char *)fname_buf + 3, "%" PRId64 "_", (int64_t)current_SID);
+ } else {
+ vim_snprintf((char *)fname_buf + 3, ARRAY_SIZE(fname_buf) - 3,
+ "%" PRId64 "_", (int64_t)current_SID);
i = (int)STRLEN(fname_buf);
}
}
@@ -7288,18 +6984,16 @@ call_func (
}
}
} else {
- /*
- * Find the function name in the table, call its implementation.
- */
- i = find_internal_func(fname);
- if (i >= 0) {
- if (argcount < functions[i].f_min_argc)
+ // Find the function name in the table, call its implementation.
+ VimLFuncDef *const fdef = find_internal_func((char *)fname);
+ if (fdef != NULL) {
+ if (argcount < fdef->min_argc) {
error = ERROR_TOOFEW;
- else if (argcount > functions[i].f_max_argc)
+ } else if (argcount > fdef->max_argc) {
error = ERROR_TOOMANY;
- else {
+ } else {
argvars[argcount].v_type = VAR_UNKNOWN;
- functions[i].f_func(argvars, rettv);
+ fdef->func(argvars, rettv, fdef->data);
error = ERROR_NONE;
}
}
@@ -7410,13 +7104,10 @@ static inline int get_float_arg(typval_T *argvars, float_T *f)
// Some versions of glibc on i386 have an optimization that makes it harder to
// call math functions indirectly from inside an inlined function, causing
// compile-time errors. Avoid `inline` in that case. #3072
-#ifndef ARCH_32
-inline
-#endif
-static void float_op_wrapper(typval_T *argvars, typval_T *rettv,
- float_T (*function)(float_T))
+static void float_op_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T f;
+ float_T (*function)(float_T) = (float_T (*)(float_T))fptr;
rettv->v_type = VAR_FLOAT;
if (get_float_arg(argvars, &f) == OK) {
@@ -7426,13 +7117,40 @@ static void float_op_wrapper(typval_T *argvars, typval_T *rettv,
}
}
+static void api_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ ApiDispatchWrapper fn = (ApiDispatchWrapper)fptr;
+
+ Array args = ARRAY_DICT_INIT;
+
+ for (typval_T *tv = argvars; tv->v_type != VAR_UNKNOWN; tv++) {
+ ADD(args, vim_to_object(tv));
+ }
+
+ Error err = ERROR_INIT;
+ Object result = fn(INVALID_CHANNEL, NO_RESPONSE, args, &err);
+
+ if (err.set) {
+ nvim_err_writeln(cstr_as_string(err.msg));
+ goto end;
+ }
+
+ if (!object_to_vim(result, rettv, &err)) {
+ EMSG2(_("Error converting the call result: %s"), err.msg);
+ }
+
+end:
+ api_free_array(args);
+ api_free_object(result);
+}
+
/*
* "abs(expr)" function
*/
-static void f_abs(typval_T *argvars, typval_T *rettv)
+static void f_abs(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (argvars[0].v_type == VAR_FLOAT) {
- float_op_wrapper(argvars, rettv, &fabs);
+ float_op_wrapper(argvars, rettv, (FunPtr)&fabs);
} else {
varnumber_T n;
int error = FALSE;
@@ -7448,17 +7166,9 @@ static void f_abs(typval_T *argvars, typval_T *rettv)
}
/*
- * "acos()" function
- */
-static void f_acos(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &acos);
-}
-
-/*
* "add(list, item)" function
*/
-static void f_add(typval_T *argvars, typval_T *rettv)
+static void f_add(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
@@ -7477,7 +7187,7 @@ static void f_add(typval_T *argvars, typval_T *rettv)
/*
* "and(expr, expr)" function
*/
-static void f_and(typval_T *argvars, typval_T *rettv)
+static void f_and(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
& get_tv_number_chk(&argvars[1], NULL);
@@ -7485,7 +7195,7 @@ static void f_and(typval_T *argvars, typval_T *rettv)
/// "api_info()" function
-static void f_api_info(typval_T *argvars, typval_T *rettv)
+static void f_api_info(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
Dictionary metadata = api_metadata();
(void)object_to_vim(DICTIONARY_OBJ(metadata), rettv, NULL);
@@ -7495,7 +7205,7 @@ static void f_api_info(typval_T *argvars, typval_T *rettv)
/*
* "append(lnum, string/list)" function
*/
-static void f_append(typval_T *argvars, typval_T *rettv)
+static void f_append(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
char_u *line;
@@ -7550,7 +7260,7 @@ static void f_append(typval_T *argvars, typval_T *rettv)
/*
* "argc()" function
*/
-static void f_argc(typval_T *argvars, typval_T *rettv)
+static void f_argc(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ARGCOUNT;
}
@@ -7558,13 +7268,13 @@ static void f_argc(typval_T *argvars, typval_T *rettv)
/*
* "argidx()" function
*/
-static void f_argidx(typval_T *argvars, typval_T *rettv)
+static void f_argidx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = curwin->w_arg_idx;
}
/// "arglistid" function
-static void f_arglistid(typval_T *argvars, typval_T *rettv)
+static void f_arglistid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
win_T *wp = find_tabwin(&argvars[0], &argvars[1]);
@@ -7576,7 +7286,7 @@ static void f_arglistid(typval_T *argvars, typval_T *rettv)
/*
* "argv(nr)" function
*/
-static void f_argv(typval_T *argvars, typval_T *rettv)
+static void f_argv(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int idx;
@@ -7683,19 +7393,19 @@ static void assert_equal_common(typval_T *argvars, assert_type_T atype)
}
// "assert_equal(expected, actual[, msg])" function
-static void f_assert_equal(typval_T *argvars, typval_T *rettv)
+static void f_assert_equal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_equal_common(argvars, ASSERT_EQUAL);
}
// "assert_notequal(expected, actual[, msg])" function
-static void f_assert_notequal(typval_T *argvars, typval_T *rettv)
+static void f_assert_notequal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_equal_common(argvars, ASSERT_NOTEQUAL);
}
/// "assert_exception(string[, msg])" function
-static void f_assert_exception(typval_T *argvars, typval_T *rettv)
+static void f_assert_exception(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
garray_T ga;
@@ -7716,7 +7426,7 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv)
}
/// "assert_fails(cmd [, error])" function
-static void f_assert_fails(typval_T *argvars, typval_T *rettv)
+static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *cmd = get_tv_string_chk(&argvars[0]);
garray_T ga;
@@ -7776,7 +7486,7 @@ static void assert_bool(typval_T *argvars, bool is_true)
}
// "assert_false(actual[, msg])" function
-static void f_assert_false(typval_T *argvars, typval_T *rettv)
+static void f_assert_false(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_bool(argvars, false);
}
@@ -7800,43 +7510,27 @@ static void assert_match_common(typval_T *argvars, assert_type_T atype)
}
/// "assert_match(pattern, actual[, msg])" function
-static void f_assert_match(typval_T *argvars, typval_T *rettv)
+static void f_assert_match(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_match_common(argvars, ASSERT_MATCH);
}
/// "assert_notmatch(pattern, actual[, msg])" function
-static void f_assert_notmatch(typval_T *argvars, typval_T *rettv)
+static void f_assert_notmatch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_match_common(argvars, ASSERT_NOTMATCH);
}
// "assert_true(actual[, msg])" function
-static void f_assert_true(typval_T *argvars, typval_T *rettv)
+static void f_assert_true(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_bool(argvars, true);
}
/*
- * "asin()" function
- */
-static void f_asin(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &asin);
-}
-
-/*
- * "atan()" function
- */
-static void f_atan(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &atan);
-}
-
-/*
* "atan2()" function
*/
-static void f_atan2(typval_T *argvars, typval_T *rettv)
+static void f_atan2(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -7851,7 +7545,7 @@ static void f_atan2(typval_T *argvars, typval_T *rettv)
/*
* "browse(save, title, initdir, default)" function
*/
-static void f_browse(typval_T *argvars, typval_T *rettv)
+static void f_browse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = NULL;
rettv->v_type = VAR_STRING;
@@ -7860,9 +7554,9 @@ static void f_browse(typval_T *argvars, typval_T *rettv)
/*
* "browsedir(title, initdir)" function
*/
-static void f_browsedir(typval_T *argvars, typval_T *rettv)
+static void f_browsedir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- f_browse(argvars, rettv);
+ f_browse(argvars, rettv, NULL);
}
@@ -7898,7 +7592,7 @@ static buf_T *find_buffer(typval_T *avar)
/*
* "bufexists(expr)" function
*/
-static void f_bufexists(typval_T *argvars, typval_T *rettv)
+static void f_bufexists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (find_buffer(&argvars[0]) != NULL);
}
@@ -7906,7 +7600,7 @@ static void f_bufexists(typval_T *argvars, typval_T *rettv)
/*
* "buflisted(expr)" function
*/
-static void f_buflisted(typval_T *argvars, typval_T *rettv)
+static void f_buflisted(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7917,7 +7611,7 @@ static void f_buflisted(typval_T *argvars, typval_T *rettv)
/*
* "bufloaded(expr)" function
*/
-static void f_bufloaded(typval_T *argvars, typval_T *rettv)
+static void f_bufloaded(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7967,7 +7661,7 @@ static buf_T *get_buf_tv(typval_T *tv, int curtab_only)
/*
* "bufname(expr)" function
*/
-static void f_bufname(typval_T *argvars, typval_T *rettv)
+static void f_bufname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7985,7 +7679,7 @@ static void f_bufname(typval_T *argvars, typval_T *rettv)
/*
* "bufnr(expr)" function
*/
-static void f_bufnr(typval_T *argvars, typval_T *rettv)
+static void f_bufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
int error = FALSE;
@@ -8015,7 +7709,7 @@ static void f_bufnr(typval_T *argvars, typval_T *rettv)
/*
* "bufwinnr(nr)" function
*/
-static void f_bufwinnr(typval_T *argvars, typval_T *rettv)
+static void f_bufwinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
(void)get_tv_number(&argvars[0]); /* issue errmsg if type error */
++emsg_off;
@@ -8037,7 +7731,7 @@ static void f_bufwinnr(typval_T *argvars, typval_T *rettv)
/*
* "byte2line(byte)" function
*/
-static void f_byte2line(typval_T *argvars, typval_T *rettv)
+static void f_byte2line(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long boff = 0;
@@ -8076,7 +7770,7 @@ static void byteidx(typval_T *argvars, typval_T *rettv, int comp)
/*
* "byteidx()" function
*/
-static void f_byteidx(typval_T *argvars, typval_T *rettv)
+static void f_byteidx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
byteidx(argvars, rettv, FALSE);
}
@@ -8084,7 +7778,7 @@ static void f_byteidx(typval_T *argvars, typval_T *rettv)
/*
* "byteidxcomp()" function
*/
-static void f_byteidxcomp(typval_T *argvars, typval_T *rettv)
+static void f_byteidxcomp(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
byteidx(argvars, rettv, TRUE);
}
@@ -8124,7 +7818,7 @@ int func_call(char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv)
/*
* "call(func, arglist)" function
*/
-static void f_call(typval_T *argvars, typval_T *rettv)
+static void f_call(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *func;
dict_T *selfdict = NULL;
@@ -8155,17 +7849,9 @@ static void f_call(typval_T *argvars, typval_T *rettv)
}
/*
- * "ceil({float})" function
- */
-static void f_ceil(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &ceil);
-}
-
-/*
* "changenr()" function
*/
-static void f_changenr(typval_T *argvars, typval_T *rettv)
+static void f_changenr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = curbuf->b_u_seq_cur;
}
@@ -8173,7 +7859,7 @@ static void f_changenr(typval_T *argvars, typval_T *rettv)
/*
* "char2nr(string)" function
*/
-static void f_char2nr(typval_T *argvars, typval_T *rettv)
+static void f_char2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (has_mbyte) {
int utf8 = 0;
@@ -8192,7 +7878,7 @@ static void f_char2nr(typval_T *argvars, typval_T *rettv)
/*
* "cindent(lnum)" function
*/
-static void f_cindent(typval_T *argvars, typval_T *rettv)
+static void f_cindent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
linenr_T lnum;
@@ -8210,7 +7896,7 @@ static void f_cindent(typval_T *argvars, typval_T *rettv)
/*
* "clearmatches()" function
*/
-static void f_clearmatches(typval_T *argvars, typval_T *rettv)
+static void f_clearmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
clear_matches(curwin);
}
@@ -8218,7 +7904,7 @@ static void f_clearmatches(typval_T *argvars, typval_T *rettv)
/*
* "col(string)" function
*/
-static void f_col(typval_T *argvars, typval_T *rettv)
+static void f_col(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
colnr_T col = 0;
pos_T *fp;
@@ -8255,7 +7941,7 @@ static void f_col(typval_T *argvars, typval_T *rettv)
/*
* "complete()" function
*/
-static void f_complete(typval_T *argvars, typval_T *rettv)
+static void f_complete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int startcol;
@@ -8284,7 +7970,7 @@ static void f_complete(typval_T *argvars, typval_T *rettv)
/*
* "complete_add()" function
*/
-static void f_complete_add(typval_T *argvars, typval_T *rettv)
+static void f_complete_add(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0);
}
@@ -8292,7 +7978,7 @@ static void f_complete_add(typval_T *argvars, typval_T *rettv)
/*
* "complete_check()" function
*/
-static void f_complete_check(typval_T *argvars, typval_T *rettv)
+static void f_complete_check(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int saved = RedrawingDisabled;
@@ -8305,7 +7991,7 @@ static void f_complete_check(typval_T *argvars, typval_T *rettv)
/*
* "confirm(message, buttons[, default [, type]])" function
*/
-static void f_confirm(typval_T *argvars, typval_T *rettv)
+static void f_confirm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *message;
char_u *buttons = NULL;
@@ -8353,31 +8039,15 @@ static void f_confirm(typval_T *argvars, typval_T *rettv)
/*
* "copy()" function
*/
-static void f_copy(typval_T *argvars, typval_T *rettv)
+static void f_copy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
var_item_copy(NULL, &argvars[0], rettv, false, 0);
}
/*
- * "cos()" function
- */
-static void f_cos(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &cos);
-}
-
-/*
- * "cosh()" function
- */
-static void f_cosh(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &cosh);
-}
-
-/*
* "count()" function
*/
-static void f_count(typval_T *argvars, typval_T *rettv)
+static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long n = 0;
int ic = FALSE;
@@ -8442,7 +8112,7 @@ static void f_count(typval_T *argvars, typval_T *rettv)
*
* Checks the existence of a cscope connection.
*/
-static void f_cscope_connection(typval_T *argvars, typval_T *rettv)
+static void f_cscope_connection(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int num = 0;
char_u *dbpath = NULL;
@@ -8466,7 +8136,7 @@ static void f_cscope_connection(typval_T *argvars, typval_T *rettv)
/// Moves the cursor to the specified line and column.
///
/// @returns 0 when the position could be set, -1 otherwise.
-static void f_cursor(typval_T *argvars, typval_T *rettv)
+static void f_cursor(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long line, col;
long coladd = 0;
@@ -8522,7 +8192,7 @@ static void f_cursor(typval_T *argvars, typval_T *rettv)
/*
* "deepcopy()" function
*/
-static void f_deepcopy(typval_T *argvars, typval_T *rettv)
+static void f_deepcopy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int noref = 0;
@@ -8538,7 +8208,7 @@ static void f_deepcopy(typval_T *argvars, typval_T *rettv)
}
// "delete()" function
-static void f_delete(typval_T *argvars, typval_T *rettv)
+static void f_delete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u nbuf[NUMBUFLEN];
char_u *name;
@@ -8576,7 +8246,7 @@ static void f_delete(typval_T *argvars, typval_T *rettv)
}
// dictwatcheradd(dict, key, funcref) function
-static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv)
+static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -8621,7 +8291,7 @@ static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv)
}
// dictwatcherdel(dict, key, funcref) function
-static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
+static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -8682,7 +8352,7 @@ static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
/*
* "did_filetype()" function
*/
-static void f_did_filetype(typval_T *argvars, typval_T *rettv)
+static void f_did_filetype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = did_filetype;
}
@@ -8690,7 +8360,7 @@ static void f_did_filetype(typval_T *argvars, typval_T *rettv)
/*
* "diff_filler()" function
*/
-static void f_diff_filler(typval_T *argvars, typval_T *rettv)
+static void f_diff_filler(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars));
}
@@ -8698,7 +8368,7 @@ static void f_diff_filler(typval_T *argvars, typval_T *rettv)
/*
* "diff_hlID()" function
*/
-static void f_diff_hlID(typval_T *argvars, typval_T *rettv)
+static void f_diff_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum = get_tv_lnum(argvars);
static linenr_T prev_lnum = 0;
@@ -8747,7 +8417,7 @@ static void f_diff_hlID(typval_T *argvars, typval_T *rettv)
/*
* "empty({expr})" function
*/
-static void f_empty(typval_T *argvars, typval_T *rettv)
+static void f_empty(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
bool n = true;
@@ -8785,7 +8455,7 @@ static void f_empty(typval_T *argvars, typval_T *rettv)
/*
* "escape({string}, {chars})" function
*/
-static void f_escape(typval_T *argvars, typval_T *rettv)
+static void f_escape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -8797,7 +8467,7 @@ static void f_escape(typval_T *argvars, typval_T *rettv)
/*
* "eval()" function
*/
-static void f_eval(typval_T *argvars, typval_T *rettv)
+static void f_eval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
@@ -8821,7 +8491,7 @@ static void f_eval(typval_T *argvars, typval_T *rettv)
/*
* "eventhandler()" function
*/
-static void f_eventhandler(typval_T *argvars, typval_T *rettv)
+static void f_eventhandler(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = vgetc_busy;
}
@@ -8829,7 +8499,7 @@ static void f_eventhandler(typval_T *argvars, typval_T *rettv)
/*
* "executable()" function
*/
-static void f_executable(typval_T *argvars, typval_T *rettv)
+static void f_executable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *name = get_tv_string(&argvars[0]);
@@ -8839,7 +8509,7 @@ static void f_executable(typval_T *argvars, typval_T *rettv)
}
// "execute(command)" function
-static void f_execute(typval_T *argvars, typval_T *rettv)
+static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int save_msg_silent = msg_silent;
garray_T *save_capture_ga = capture_ga;
@@ -8871,7 +8541,7 @@ static void f_execute(typval_T *argvars, typval_T *rettv)
}
/// "exepath()" function
-static void f_exepath(typval_T *argvars, typval_T *rettv)
+static void f_exepath(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *arg = get_tv_string(&argvars[0]);
char_u *path = NULL;
@@ -8885,7 +8555,7 @@ static void f_exepath(typval_T *argvars, typval_T *rettv)
/*
* "exists()" function
*/
-static void f_exists(typval_T *argvars, typval_T *rettv)
+static void f_exists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
char_u *name;
@@ -8946,17 +8616,9 @@ static void f_exists(typval_T *argvars, typval_T *rettv)
}
/*
- * "exp()" function
- */
-static void f_exp(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &exp);
-}
-
-/*
* "expand()" function
*/
-static void f_expand(typval_T *argvars, typval_T *rettv)
+static void f_expand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
size_t len;
@@ -9085,7 +8747,7 @@ void dict_extend(dict_T *d1, dict_T *d2, char_u *action)
* "extend(list, list [, idx])" function
* "extend(dict, dict [, action])" function
*/
-static void f_extend(typval_T *argvars, typval_T *rettv)
+static void f_extend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *arg_errmsg = (char_u *)N_("extend() argument");
@@ -9157,7 +8819,7 @@ static void f_extend(typval_T *argvars, typval_T *rettv)
/*
* "feedkeys()" function
*/
-static void f_feedkeys(typval_T *argvars, typval_T *rettv)
+static void f_feedkeys(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *keys, *flags = NULL;
char_u nbuf[NUMBUFLEN];
@@ -9169,18 +8831,17 @@ static void f_feedkeys(typval_T *argvars, typval_T *rettv)
return;
keys = get_tv_string(&argvars[0]);
- if (*keys != NUL) {
- if (argvars[1].v_type != VAR_UNKNOWN) {
- flags = get_tv_string_buf(&argvars[1], nbuf);
- }
- vim_feedkeys(cstr_as_string((char *)keys),
- cstr_as_string((char *)flags), true);
+ if (argvars[1].v_type != VAR_UNKNOWN) {
+ flags = get_tv_string_buf(&argvars[1], nbuf);
}
+
+ nvim_feedkeys(cstr_as_string((char *)keys),
+ cstr_as_string((char *)flags), true);
}
/// "filereadable()" function
-static void f_filereadable(typval_T *argvars, typval_T *rettv)
+static void f_filereadable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = get_tv_string(&argvars[0]);
rettv->vval.v_number =
@@ -9191,7 +8852,7 @@ static void f_filereadable(typval_T *argvars, typval_T *rettv)
* Return 0 for not writable, 1 for writable file, 2 for a dir which we have
* rights to write into.
*/
-static void f_filewritable(typval_T *argvars, typval_T *rettv)
+static void f_filewritable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *filename = (char *)get_tv_string(&argvars[0]);
rettv->vval.v_number = os_file_is_writable(filename);
@@ -9406,7 +9067,7 @@ theend:
/*
* "filter()" function
*/
-static void f_filter(typval_T *argvars, typval_T *rettv)
+static void f_filter(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
filter_map(argvars, rettv, FALSE);
}
@@ -9414,7 +9075,7 @@ static void f_filter(typval_T *argvars, typval_T *rettv)
/*
* "finddir({fname}[, {path}[, {count}]])" function
*/
-static void f_finddir(typval_T *argvars, typval_T *rettv)
+static void f_finddir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
findfilendir(argvars, rettv, FINDFILE_DIR);
}
@@ -9422,7 +9083,7 @@ static void f_finddir(typval_T *argvars, typval_T *rettv)
/*
* "findfile({fname}[, {path}[, {count}]])" function
*/
-static void f_findfile(typval_T *argvars, typval_T *rettv)
+static void f_findfile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
findfilendir(argvars, rettv, FINDFILE_FILE);
}
@@ -9430,7 +9091,7 @@ static void f_findfile(typval_T *argvars, typval_T *rettv)
/*
* "float2nr({float})" function
*/
-static void f_float2nr(typval_T *argvars, typval_T *rettv)
+static void f_float2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T f;
@@ -9445,17 +9106,9 @@ static void f_float2nr(typval_T *argvars, typval_T *rettv)
}
/*
- * "floor({float})" function
- */
-static void f_floor(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &floor);
-}
-
-/*
* "fmod()" function
*/
-static void f_fmod(typval_T *argvars, typval_T *rettv)
+static void f_fmod(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -9470,7 +9123,7 @@ static void f_fmod(typval_T *argvars, typval_T *rettv)
/*
* "fnameescape({string})" function
*/
-static void f_fnameescape(typval_T *argvars, typval_T *rettv)
+static void f_fnameescape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = vim_strsave_fnameescape(
get_tv_string(&argvars[0]), FALSE);
@@ -9480,7 +9133,7 @@ static void f_fnameescape(typval_T *argvars, typval_T *rettv)
/*
* "fnamemodify({fname}, {mods})" function
*/
-static void f_fnamemodify(typval_T *argvars, typval_T *rettv)
+static void f_fnamemodify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
char_u *mods;
@@ -9531,7 +9184,7 @@ static void foldclosed_both(typval_T *argvars, typval_T *rettv, int end)
/*
* "foldclosed()" function
*/
-static void f_foldclosed(typval_T *argvars, typval_T *rettv)
+static void f_foldclosed(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
foldclosed_both(argvars, rettv, FALSE);
}
@@ -9539,7 +9192,7 @@ static void f_foldclosed(typval_T *argvars, typval_T *rettv)
/*
* "foldclosedend()" function
*/
-static void f_foldclosedend(typval_T *argvars, typval_T *rettv)
+static void f_foldclosedend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
foldclosed_both(argvars, rettv, TRUE);
}
@@ -9547,7 +9200,7 @@ static void f_foldclosedend(typval_T *argvars, typval_T *rettv)
/*
* "foldlevel()" function
*/
-static void f_foldlevel(typval_T *argvars, typval_T *rettv)
+static void f_foldlevel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -9559,7 +9212,7 @@ static void f_foldlevel(typval_T *argvars, typval_T *rettv)
/*
* "foldtext()" function
*/
-static void f_foldtext(typval_T *argvars, typval_T *rettv)
+static void f_foldtext(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
char_u *s;
@@ -9612,7 +9265,7 @@ static void f_foldtext(typval_T *argvars, typval_T *rettv)
/*
* "foldtextresult(lnum)" function
*/
-static void f_foldtextresult(typval_T *argvars, typval_T *rettv)
+static void f_foldtextresult(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
char_u *text;
@@ -9639,14 +9292,14 @@ static void f_foldtextresult(typval_T *argvars, typval_T *rettv)
/*
* "foreground()" function
*/
-static void f_foreground(typval_T *argvars, typval_T *rettv)
+static void f_foreground(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
}
/*
* "function()" function
*/
-static void f_function(typval_T *argvars, typval_T *rettv)
+static void f_function(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
@@ -9678,7 +9331,7 @@ static void f_function(typval_T *argvars, typval_T *rettv)
/*
* "garbagecollect()" function
*/
-static void f_garbagecollect(typval_T *argvars, typval_T *rettv)
+static void f_garbagecollect(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
/* This is postponed until we are back at the toplevel, because we may be
* using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */
@@ -9691,7 +9344,7 @@ static void f_garbagecollect(typval_T *argvars, typval_T *rettv)
/*
* "get()" function
*/
-static void f_get(typval_T *argvars, typval_T *rettv)
+static void f_get(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
listitem_T *li;
list_T *l;
@@ -9767,7 +9420,7 @@ static void get_buffer_lines(buf_T *buf, linenr_T start, linenr_T end, int retli
/*
* "getbufline()" function
*/
-static void f_getbufline(typval_T *argvars, typval_T *rettv)
+static void f_getbufline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
linenr_T end;
@@ -9790,7 +9443,7 @@ static void f_getbufline(typval_T *argvars, typval_T *rettv)
/*
* "getbufvar()" function
*/
-static void f_getbufvar(typval_T *argvars, typval_T *rettv)
+static void f_getbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
buf_T *save_curbuf;
@@ -9843,7 +9496,7 @@ static void f_getbufvar(typval_T *argvars, typval_T *rettv)
/*
* "getchar()" function
*/
-static void f_getchar(typval_T *argvars, typval_T *rettv)
+static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
varnumber_T n;
int error = FALSE;
@@ -9927,7 +9580,7 @@ static void f_getchar(typval_T *argvars, typval_T *rettv)
/*
* "getcharmod()" function
*/
-static void f_getcharmod(typval_T *argvars, typval_T *rettv)
+static void f_getcharmod(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = mod_mask;
}
@@ -9935,7 +9588,7 @@ static void f_getcharmod(typval_T *argvars, typval_T *rettv)
/*
* "getcharsearch()" function
*/
-static void f_getcharsearch(typval_T *argvars, typval_T *rettv)
+static void f_getcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
@@ -9949,7 +9602,7 @@ static void f_getcharsearch(typval_T *argvars, typval_T *rettv)
/*
* "getcmdline()" function
*/
-static void f_getcmdline(typval_T *argvars, typval_T *rettv)
+static void f_getcmdline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = get_cmdline_str();
@@ -9958,7 +9611,7 @@ static void f_getcmdline(typval_T *argvars, typval_T *rettv)
/*
* "getcmdpos()" function
*/
-static void f_getcmdpos(typval_T *argvars, typval_T *rettv)
+static void f_getcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_cmdline_pos() + 1;
}
@@ -9966,7 +9619,7 @@ static void f_getcmdpos(typval_T *argvars, typval_T *rettv)
/*
* "getcmdtype()" function
*/
-static void f_getcmdtype(typval_T *argvars, typval_T *rettv)
+static void f_getcmdtype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = xmallocz(1);
@@ -9976,7 +9629,7 @@ static void f_getcmdtype(typval_T *argvars, typval_T *rettv)
/*
* "getcmdwintype()" function
*/
-static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)
+static void f_getcmdwintype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -9985,12 +9638,12 @@ static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)
}
// "getcompletion()" function
-static void f_getcompletion(typval_T *argvars, typval_T *rettv)
+static void f_getcompletion(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *pat;
expand_T xpc;
- int options = WILD_KEEP_ALL | WILD_SILENT | WILD_USE_NL
- | WILD_LIST_NOTFOUND | WILD_NO_BEEP;
+ int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
+ | WILD_NO_BEEP;
if (p_wic) {
options |= WILD_ICASE;
@@ -10015,12 +9668,11 @@ static void f_getcompletion(typval_T *argvars, typval_T *rettv)
}
pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
- if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL)) {
- int i;
-
+ rettv_list_alloc(rettv);
+ if (pat != NULL) {
ExpandOne(&xpc, pat, NULL, options, WILD_ALL_KEEP);
- for (i = 0; i < xpc.xp_numfiles; i++) {
+ for (int i = 0; i < xpc.xp_numfiles; i++) {
list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
}
}
@@ -10037,7 +9689,7 @@ static void f_getcompletion(typval_T *argvars, typval_T *rettv)
/// @pre An argument may not be -1 if preceding arguments are not all -1.
///
/// @post The return value will be a string.
-static void f_getcwd(typval_T *argvars, typval_T *rettv)
+static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Possible scope of working directory to return.
CdScope scope = kCdScopeInvalid;
@@ -10122,26 +9774,20 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
if (from) {
break;
}
- case kCdScopeTab: // FALLTHROUGH
+ case kCdScopeTab: // FALLTHROUGH
assert(tp);
from = tp->localdir;
if (from) {
break;
}
- case kCdScopeGlobal: // FALLTHROUGH
- // The `globaldir` variable is not always set.
- if (globaldir) {
+ case kCdScopeGlobal: // FALLTHROUGH
+ if (globaldir) { // `globaldir` is not always set.
from = globaldir;
- } else {
- // We have to copy the OS path directly into output string.
- if (os_dirname(cwd, MAXPATHL) == FAIL) {
- EMSG(_("E41: Could not display path."));
- goto end;
- }
+ } else if (os_dirname(cwd, MAXPATHL) == FAIL) { // Get the OS CWD.
+ from = (char_u *)""; // Return empty string on failure.
}
break;
- case kCdScopeInvalid:
- // We should never get here
+ case kCdScopeInvalid: // We should never get here
assert(false);
}
@@ -10153,14 +9799,14 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
#ifdef BACKSLASH_IN_FILENAME
slash_adjust(rettv->vval.v_string);
#endif
-end:
+
xfree(cwd);
}
/*
* "getfontname()" function
*/
-static void f_getfontname(typval_T *argvars, typval_T *rettv)
+static void f_getfontname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -10169,7 +9815,7 @@ static void f_getfontname(typval_T *argvars, typval_T *rettv)
/*
* "getfperm({fname})" function
*/
-static void f_getfperm(typval_T *argvars, typval_T *rettv)
+static void f_getfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *perm = NULL;
char_u flags[] = "rwx";
@@ -10190,7 +9836,7 @@ static void f_getfperm(typval_T *argvars, typval_T *rettv)
/*
* "getfsize({fname})" function
*/
-static void f_getfsize(typval_T *argvars, typval_T *rettv)
+static void f_getfsize(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *fname = (char *)get_tv_string(&argvars[0]);
@@ -10217,7 +9863,7 @@ static void f_getfsize(typval_T *argvars, typval_T *rettv)
/*
* "getftime({fname})" function
*/
-static void f_getftime(typval_T *argvars, typval_T *rettv)
+static void f_getftime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *fname = (char *)get_tv_string(&argvars[0]);
@@ -10232,7 +9878,7 @@ static void f_getftime(typval_T *argvars, typval_T *rettv)
/*
* "getftype({fname})" function
*/
-static void f_getftype(typval_T *argvars, typval_T *rettv)
+static void f_getftype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
char_u *type = NULL;
@@ -10308,7 +9954,7 @@ static void f_getftype(typval_T *argvars, typval_T *rettv)
/*
* "getline(lnum, [end])" function
*/
-static void f_getline(typval_T *argvars, typval_T *rettv)
+static void f_getline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
linenr_T end;
@@ -10329,7 +9975,7 @@ static void f_getline(typval_T *argvars, typval_T *rettv)
/*
* "getmatches()" function
*/
-static void f_getmatches(typval_T *argvars, typval_T *rettv)
+static void f_getmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
matchitem_T *cur = curwin->w_match_head;
int i;
@@ -10378,7 +10024,7 @@ static void f_getmatches(typval_T *argvars, typval_T *rettv)
/*
* "getpid()" function
*/
-static void f_getpid(typval_T *argvars, typval_T *rettv)
+static void f_getpid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = os_get_pid();
}
@@ -10414,7 +10060,7 @@ static void getpos_both(typval_T *argvars, typval_T *rettv, bool getcurpos)
/*
* "getcurpos(string)" function
*/
-static void f_getcurpos(typval_T *argvars, typval_T *rettv)
+static void f_getcurpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getpos_both(argvars, rettv, true);
}
@@ -10422,7 +10068,7 @@ static void f_getcurpos(typval_T *argvars, typval_T *rettv)
/*
* "getpos(string)" function
*/
-static void f_getpos(typval_T *argvars, typval_T *rettv)
+static void f_getpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getpos_both(argvars, rettv, false);
}
@@ -10430,7 +10076,7 @@ static void f_getpos(typval_T *argvars, typval_T *rettv)
/*
* "getqflist()" and "getloclist()" functions
*/
-static void f_getqflist(typval_T *argvars, typval_T *rettv)
+static void f_getqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_list_alloc(rettv);
win_T *wp = NULL;
@@ -10444,7 +10090,7 @@ static void f_getqflist(typval_T *argvars, typval_T *rettv)
}
/// "getreg()" function
-static void f_getreg(typval_T *argvars, typval_T *rettv)
+static void f_getreg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *strregname;
int regname;
@@ -10490,7 +10136,7 @@ static void f_getreg(typval_T *argvars, typval_T *rettv)
/*
* "getregtype()" function
*/
-static void f_getregtype(typval_T *argvars, typval_T *rettv)
+static void f_getregtype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *strregname;
int regname;
@@ -10522,7 +10168,7 @@ static void f_getregtype(typval_T *argvars, typval_T *rettv)
/*
* "gettabvar()" function
*/
-static void f_gettabvar(typval_T *argvars, typval_T *rettv)
+static void f_gettabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *oldcurwin;
tabpage_T *tp, *oldtabpage;
@@ -10561,7 +10207,7 @@ static void f_gettabvar(typval_T *argvars, typval_T *rettv)
/*
* "gettabwinvar()" function
*/
-static void f_gettabwinvar(typval_T *argvars, typval_T *rettv)
+static void f_gettabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getwinvar(argvars, rettv, 1);
}
@@ -10569,7 +10215,7 @@ static void f_gettabwinvar(typval_T *argvars, typval_T *rettv)
/*
* "getwinposx()" function
*/
-static void f_getwinposx(typval_T *argvars, typval_T *rettv)
+static void f_getwinposx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
}
@@ -10577,7 +10223,7 @@ static void f_getwinposx(typval_T *argvars, typval_T *rettv)
/*
* "getwinposy()" function
*/
-static void f_getwinposy(typval_T *argvars, typval_T *rettv)
+static void f_getwinposy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
}
@@ -10641,7 +10287,7 @@ static win_T *find_tabwin(typval_T *wvp, typval_T *tvp)
}
/// "getwinvar()" function
-static void f_getwinvar(typval_T *argvars, typval_T *rettv)
+static void f_getwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getwinvar(argvars, rettv, 0);
}
@@ -10712,7 +10358,7 @@ getwinvar (
/*
* "glob()" function
*/
-static void f_glob(typval_T *argvars, typval_T *rettv)
+static void f_glob(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int options = WILD_SILENT|WILD_USE_NL;
expand_T xpc;
@@ -10756,7 +10402,7 @@ static void f_glob(typval_T *argvars, typval_T *rettv)
}
/// "globpath()" function
-static void f_globpath(typval_T *argvars, typval_T *rettv)
+static void f_globpath(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int flags = 0; // Flags for globpath.
int error = false;
@@ -10807,7 +10453,7 @@ static void f_globpath(typval_T *argvars, typval_T *rettv)
}
// "glob2regpat()" function
-static void f_glob2regpat(typval_T *argvars, typval_T *rettv)
+static void f_glob2regpat(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *pat = get_tv_string_chk(&argvars[0]); // NULL on type error
@@ -10820,7 +10466,7 @@ static void f_glob2regpat(typval_T *argvars, typval_T *rettv)
/*
* "has()" function
*/
-static void f_has(typval_T *argvars, typval_T *rettv)
+static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int i;
char_u *name;
@@ -10988,7 +10634,7 @@ static void f_has(typval_T *argvars, typval_T *rettv)
/*
* "has_key()" function
*/
-static void f_has_key(typval_T *argvars, typval_T *rettv)
+static void f_has_key(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (argvars[0].v_type != VAR_DICT) {
EMSG(_(e_dictreq));
@@ -11012,7 +10658,7 @@ static void f_has_key(typval_T *argvars, typval_T *rettv)
/// @pre An argument may not be -1 if preceding arguments are not all -1.
///
/// @post The return value will be either the number `1` or `0`.
-static void f_haslocaldir(typval_T *argvars, typval_T *rettv)
+static void f_haslocaldir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Possible scope of working directory to return.
CdScope scope = kCdScopeInvalid;
@@ -11105,7 +10751,7 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)
/*
* "hasmapto()" function
*/
-static void f_hasmapto(typval_T *argvars, typval_T *rettv)
+static void f_hasmapto(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *name;
char_u *mode;
@@ -11130,7 +10776,7 @@ static void f_hasmapto(typval_T *argvars, typval_T *rettv)
/*
* "histadd()" function
*/
-static void f_histadd(typval_T *argvars, typval_T *rettv)
+static void f_histadd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
HistoryType histype;
char_u *str;
@@ -11156,7 +10802,7 @@ static void f_histadd(typval_T *argvars, typval_T *rettv)
/*
* "histdel()" function
*/
-static void f_histdel(typval_T *argvars, typval_T *rettv)
+static void f_histdel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n;
char_u buf[NUMBUFLEN];
@@ -11183,7 +10829,7 @@ static void f_histdel(typval_T *argvars, typval_T *rettv)
/*
* "histget()" function
*/
-static void f_histget(typval_T *argvars, typval_T *rettv)
+static void f_histget(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
HistoryType type;
int idx;
@@ -11208,7 +10854,7 @@ static void f_histget(typval_T *argvars, typval_T *rettv)
/*
* "histnr()" function
*/
-static void f_histnr(typval_T *argvars, typval_T *rettv)
+static void f_histnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int i;
@@ -11227,7 +10873,7 @@ static void f_histnr(typval_T *argvars, typval_T *rettv)
/*
* "highlightID(name)" function
*/
-static void f_hlID(typval_T *argvars, typval_T *rettv)
+static void f_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = syn_name2id(get_tv_string(&argvars[0]));
}
@@ -11235,7 +10881,7 @@ static void f_hlID(typval_T *argvars, typval_T *rettv)
/*
* "highlight_exists()" function
*/
-static void f_hlexists(typval_T *argvars, typval_T *rettv)
+static void f_hlexists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = highlight_exists(get_tv_string(&argvars[0]));
}
@@ -11243,7 +10889,7 @@ static void f_hlexists(typval_T *argvars, typval_T *rettv)
/*
* "hostname()" function
*/
-static void f_hostname(typval_T *argvars, typval_T *rettv)
+static void f_hostname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char hostname[256];
@@ -11255,7 +10901,7 @@ static void f_hostname(typval_T *argvars, typval_T *rettv)
/*
* iconv() function
*/
-static void f_iconv(typval_T *argvars, typval_T *rettv)
+static void f_iconv(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf1[NUMBUFLEN];
char_u buf2[NUMBUFLEN];
@@ -11285,7 +10931,7 @@ static void f_iconv(typval_T *argvars, typval_T *rettv)
/*
* "indent()" function
*/
-static void f_indent(typval_T *argvars, typval_T *rettv)
+static void f_indent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -11299,7 +10945,7 @@ static void f_indent(typval_T *argvars, typval_T *rettv)
/*
* "index()" function
*/
-static void f_index(typval_T *argvars, typval_T *rettv)
+static void f_index(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *item;
@@ -11430,7 +11076,7 @@ static void get_user_input(typval_T *argvars, typval_T *rettv, int inputdialog)
* "input()" function
* Also handles inputsecret() when inputsecret is set.
*/
-static void f_input(typval_T *argvars, typval_T *rettv)
+static void f_input(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_user_input(argvars, rettv, FALSE);
}
@@ -11438,7 +11084,7 @@ static void f_input(typval_T *argvars, typval_T *rettv)
/*
* "inputdialog()" function
*/
-static void f_inputdialog(typval_T *argvars, typval_T *rettv)
+static void f_inputdialog(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_user_input(argvars, rettv, TRUE);
}
@@ -11446,7 +11092,7 @@ static void f_inputdialog(typval_T *argvars, typval_T *rettv)
/*
* "inputlist()" function
*/
-static void f_inputlist(typval_T *argvars, typval_T *rettv)
+static void f_inputlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
listitem_T *li;
int selected;
@@ -11482,7 +11128,7 @@ static garray_T ga_userinput = {0, 0, sizeof(tasave_T), 4, NULL};
/*
* "inputrestore()" function
*/
-static void f_inputrestore(typval_T *argvars, typval_T *rettv)
+static void f_inputrestore(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (!GA_EMPTY(&ga_userinput)) {
--ga_userinput.ga_len;
@@ -11498,7 +11144,7 @@ static void f_inputrestore(typval_T *argvars, typval_T *rettv)
/*
* "inputsave()" function
*/
-static void f_inputsave(typval_T *argvars, typval_T *rettv)
+static void f_inputsave(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Add an entry to the stack of typeahead storage.
tasave_T *p = GA_APPEND_VIA_PTR(tasave_T, &ga_userinput);
@@ -11508,19 +11154,19 @@ static void f_inputsave(typval_T *argvars, typval_T *rettv)
/*
* "inputsecret()" function
*/
-static void f_inputsecret(typval_T *argvars, typval_T *rettv)
+static void f_inputsecret(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- ++cmdline_star;
- ++inputsecret_flag;
- f_input(argvars, rettv);
- --cmdline_star;
- --inputsecret_flag;
+ cmdline_star++;
+ inputsecret_flag++;
+ f_input(argvars, rettv, NULL);
+ cmdline_star--;
+ inputsecret_flag--;
}
/*
* "insert()" function
*/
-static void f_insert(typval_T *argvars, typval_T *rettv)
+static void f_insert(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long before = 0;
listitem_T *item;
@@ -11559,7 +11205,7 @@ static void f_insert(typval_T *argvars, typval_T *rettv)
/*
* "invert(expr)" function
*/
-static void f_invert(typval_T *argvars, typval_T *rettv)
+static void f_invert(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
}
@@ -11567,7 +11213,7 @@ static void f_invert(typval_T *argvars, typval_T *rettv)
/*
* "isdirectory()" function
*/
-static void f_isdirectory(typval_T *argvars, typval_T *rettv)
+static void f_isdirectory(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = os_isdir(get_tv_string(&argvars[0]));
}
@@ -11575,7 +11221,7 @@ static void f_isdirectory(typval_T *argvars, typval_T *rettv)
/*
* "islocked()" function
*/
-static void f_islocked(typval_T *argvars, typval_T *rettv)
+static void f_islocked(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
lval_T lv;
char_u *end;
@@ -11687,13 +11333,13 @@ static void dict_list(typval_T *argvars, typval_T *rettv, int what)
/*
* "items(dict)" function
*/
-static void f_items(typval_T *argvars, typval_T *rettv)
+static void f_items(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 2);
}
// "jobclose(id[, stream])" function
-static void f_jobclose(typval_T *argvars, typval_T *rettv)
+static void f_jobclose(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11719,21 +11365,40 @@ static void f_jobclose(typval_T *argvars, typval_T *rettv)
if (argvars[1].v_type == VAR_STRING) {
char *stream = (char *)argvars[1].vval.v_string;
if (!strcmp(stream, "stdin")) {
- process_close_in(proc);
+ if (data->rpc) {
+ EMSG(_("Invalid stream on rpc job, use jobclose(id, 'rpc')"));
+ } else {
+ process_close_in(proc);
+ }
} else if (!strcmp(stream, "stdout")) {
- process_close_out(proc);
+ if (data->rpc) {
+ EMSG(_("Invalid stream on rpc job, use jobclose(id, 'rpc')"));
+ } else {
+ process_close_out(proc);
+ }
} else if (!strcmp(stream, "stderr")) {
process_close_err(proc);
+ } else if (!strcmp(stream, "rpc")) {
+ if (data->rpc) {
+ channel_close(data->id);
+ } else {
+ EMSG(_("Invalid job stream: Not an rpc job"));
+ }
} else {
EMSG2(_("Invalid job stream \"%s\""), stream);
}
} else {
- process_close_streams(proc);
+ if (data->rpc) {
+ channel_close(data->id);
+ process_close_err(proc);
+ } else {
+ process_close_streams(proc);
+ }
}
}
// "jobpid(id)" function
-static void f_jobpid(typval_T *argvars, typval_T *rettv)
+static void f_jobpid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11758,7 +11423,7 @@ static void f_jobpid(typval_T *argvars, typval_T *rettv)
}
// "jobsend()" function
-static void f_jobsend(typval_T *argvars, typval_T *rettv)
+static void f_jobsend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11785,6 +11450,11 @@ static void f_jobsend(typval_T *argvars, typval_T *rettv)
return;
}
+ if (data->rpc) {
+ EMSG(_("Can't send raw data to rpc channel"));
+ return;
+ }
+
ssize_t input_len;
char *input = (char *) save_tv_as_string(&argvars[1], &input_len, false);
if (!input) {
@@ -11798,7 +11468,7 @@ static void f_jobsend(typval_T *argvars, typval_T *rettv)
}
// "jobresize(job, width, height)" function
-static void f_jobresize(typval_T *argvars, typval_T *rettv)
+static void f_jobresize(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11885,7 +11555,7 @@ static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
}
// "jobstart()" function
-static void f_jobstart(typval_T *argvars, typval_T *rettv)
+static void f_jobstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11906,13 +11576,24 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv)
return;
}
+
dict_T *job_opts = NULL;
+ bool detach = false, rpc = false, pty = false;
ufunc_T *on_stdout = NULL, *on_stderr = NULL, *on_exit = NULL;
char *cwd = NULL;
if (argvars[1].v_type == VAR_DICT) {
job_opts = argvars[1].vval.v_dict;
- char *new_cwd = (char *)get_dict_string(job_opts, (char_u *)"cwd", false);
+ detach = get_dict_number(job_opts, "detach") != 0;
+ rpc = get_dict_number(job_opts, "rpc") != 0;
+ pty = get_dict_number(job_opts, "pty") != 0;
+ if (pty && rpc) {
+ EMSG2(_(e_invarg2), "job cannot have both 'pty' and 'rpc' options set");
+ shell_free_argv(argv);
+ return;
+ }
+
+ char *new_cwd = (char *)get_dict_string(job_opts, "cwd", false);
if (new_cwd && strlen(new_cwd) > 0) {
cwd = new_cwd;
// The new cwd must be a directory.
@@ -11929,28 +11610,26 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv)
}
}
- bool pty = job_opts && get_dict_number(job_opts, (uint8_t *)"pty") != 0;
- bool detach = job_opts && get_dict_number(job_opts, (uint8_t *)"detach") != 0;
TerminalJobData *data = common_job_init(argv, on_stdout, on_stderr, on_exit,
- job_opts, pty, detach, cwd);
+ job_opts, pty, rpc, detach, cwd);
Process *proc = (Process *)&data->proc;
if (pty) {
- uint16_t width = get_dict_number(job_opts, (uint8_t *)"width");
+ uint16_t width = get_dict_number(job_opts, "width");
if (width > 0) {
data->proc.pty.width = width;
}
- uint16_t height = get_dict_number(job_opts, (uint8_t *)"height");
+ uint16_t height = get_dict_number(job_opts, "height");
if (height > 0) {
data->proc.pty.height = height;
}
- char *term = (char *)get_dict_string(job_opts, (uint8_t *)"TERM", true);
+ char *term = (char *)get_dict_string(job_opts, "TERM", true);
if (term) {
data->proc.pty.term_name = term;
}
}
- if (!on_stdout) {
+ if (!rpc && !on_stdout) {
proc->out = NULL;
}
if (!on_stderr) {
@@ -11960,7 +11639,7 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv)
}
// "jobstop()" function
-static void f_jobstop(typval_T *argvars, typval_T *rettv)
+static void f_jobstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11988,7 +11667,7 @@ static void f_jobstop(typval_T *argvars, typval_T *rettv)
}
// "jobwait(ids[, timeout])" function
-static void f_jobwait(typval_T *argvars, typval_T *rettv)
+static void f_jobwait(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -12098,7 +11777,7 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv)
/*
* "join()" function
*/
-static void f_join(typval_T *argvars, typval_T *rettv)
+static void f_join(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
garray_T ga;
char_u *sep;
@@ -12126,7 +11805,7 @@ static void f_join(typval_T *argvars, typval_T *rettv)
}
/// json_decode() function
-static void f_json_decode(typval_T *argvars, typval_T *rettv)
+static void f_json_decode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char numbuf[NUMBUFLEN];
char *s = NULL;
@@ -12160,7 +11839,7 @@ static void f_json_decode(typval_T *argvars, typval_T *rettv)
}
/// json_encode() function
-static void f_json_encode(typval_T *argvars, typval_T *rettv)
+static void f_json_encode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = (char_u *) encode_tv2json(&argvars[0], NULL);
@@ -12169,7 +11848,7 @@ static void f_json_encode(typval_T *argvars, typval_T *rettv)
/*
* "keys()" function
*/
-static void f_keys(typval_T *argvars, typval_T *rettv)
+static void f_keys(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 0);
}
@@ -12177,7 +11856,7 @@ static void f_keys(typval_T *argvars, typval_T *rettv)
/*
* "last_buffer_nr()" function.
*/
-static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv)
+static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n = 0;
@@ -12193,7 +11872,7 @@ static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv)
/*
* "len()" function
*/
-static void f_len(typval_T *argvars, typval_T *rettv)
+static void f_len(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
switch (argvars[0].v_type) {
case VAR_STRING:
@@ -12264,7 +11943,7 @@ static void libcall_common(typval_T *argvars, typval_T *rettv, int out_type)
/*
* "libcall()" function
*/
-static void f_libcall(typval_T *argvars, typval_T *rettv)
+static void f_libcall(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
libcall_common(argvars, rettv, VAR_STRING);
}
@@ -12272,7 +11951,7 @@ static void f_libcall(typval_T *argvars, typval_T *rettv)
/*
* "libcallnr()" function
*/
-static void f_libcallnr(typval_T *argvars, typval_T *rettv)
+static void f_libcallnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
libcall_common(argvars, rettv, VAR_NUMBER);
}
@@ -12280,7 +11959,7 @@ static void f_libcallnr(typval_T *argvars, typval_T *rettv)
/*
* "line(string)" function
*/
-static void f_line(typval_T *argvars, typval_T *rettv)
+static void f_line(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum = 0;
pos_T *fp;
@@ -12295,7 +11974,7 @@ static void f_line(typval_T *argvars, typval_T *rettv)
/*
* "line2byte(lnum)" function
*/
-static void f_line2byte(typval_T *argvars, typval_T *rettv)
+static void f_line2byte(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -12311,7 +11990,7 @@ static void f_line2byte(typval_T *argvars, typval_T *rettv)
/*
* "lispindent(lnum)" function
*/
-static void f_lispindent(typval_T *argvars, typval_T *rettv)
+static void f_lispindent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
linenr_T lnum;
@@ -12329,7 +12008,7 @@ static void f_lispindent(typval_T *argvars, typval_T *rettv)
/*
* "localtime()" function
*/
-static void f_localtime(typval_T *argvars, typval_T *rettv)
+static void f_localtime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (varnumber_T)time(NULL);
}
@@ -12405,26 +12084,9 @@ static void get_maparg(typval_T *argvars, typval_T *rettv, int exact)
}
/*
- * "log()" function
- */
-static void f_log(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &log);
-}
-
-/*
- * "log10()" function
- */
-static void f_log10(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &log10);
-}
-
-
-/*
* "map()" function
*/
-static void f_map(typval_T *argvars, typval_T *rettv)
+static void f_map(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
filter_map(argvars, rettv, TRUE);
}
@@ -12432,7 +12094,7 @@ static void f_map(typval_T *argvars, typval_T *rettv)
/*
* "maparg()" function
*/
-static void f_maparg(typval_T *argvars, typval_T *rettv)
+static void f_maparg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_maparg(argvars, rettv, TRUE);
}
@@ -12440,7 +12102,7 @@ static void f_maparg(typval_T *argvars, typval_T *rettv)
/*
* "mapcheck()" function
*/
-static void f_mapcheck(typval_T *argvars, typval_T *rettv)
+static void f_mapcheck(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_maparg(argvars, rettv, FALSE);
}
@@ -12605,7 +12267,7 @@ theend:
/*
* "match()" function
*/
-static void f_match(typval_T *argvars, typval_T *rettv)
+static void f_match(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 1);
}
@@ -12613,7 +12275,7 @@ static void f_match(typval_T *argvars, typval_T *rettv)
/*
* "matchadd()" function
*/
-static void f_matchadd(typval_T *argvars, typval_T *rettv)
+static void f_matchadd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *grp = get_tv_string_buf_chk(&argvars[0], buf); /* group */
@@ -12639,7 +12301,7 @@ static void f_matchadd(typval_T *argvars, typval_T *rettv)
if (dict_find(argvars[4].vval.v_dict,
(char_u *)"conceal", -1) != NULL) {
conceal_char = get_dict_string(argvars[4].vval.v_dict,
- (char_u *)"conceal", false);
+ "conceal", false);
}
}
}
@@ -12656,7 +12318,7 @@ static void f_matchadd(typval_T *argvars, typval_T *rettv)
conceal_char);
}
-static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
+static void f_matchaddpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
@@ -12695,7 +12357,7 @@ static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_
if (dict_find(argvars[4].vval.v_dict,
(char_u *)"conceal", -1) != NULL) {
conceal_char = get_dict_string(argvars[4].vval.v_dict,
- (char_u *)"conceal", false);
+ "conceal", false);
}
}
}
@@ -12717,7 +12379,7 @@ static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_
/*
* "matcharg()" function
*/
-static void f_matcharg(typval_T *argvars, typval_T *rettv)
+static void f_matcharg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_list_alloc(rettv);
@@ -12739,7 +12401,7 @@ static void f_matcharg(typval_T *argvars, typval_T *rettv)
/*
* "matchdelete()" function
*/
-static void f_matchdelete(typval_T *argvars, typval_T *rettv)
+static void f_matchdelete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = match_delete(curwin,
(int)get_tv_number(&argvars[0]), TRUE);
@@ -12748,7 +12410,7 @@ static void f_matchdelete(typval_T *argvars, typval_T *rettv)
/*
* "matchend()" function
*/
-static void f_matchend(typval_T *argvars, typval_T *rettv)
+static void f_matchend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 0);
}
@@ -12756,7 +12418,7 @@ static void f_matchend(typval_T *argvars, typval_T *rettv)
/*
* "matchlist()" function
*/
-static void f_matchlist(typval_T *argvars, typval_T *rettv)
+static void f_matchlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 3);
}
@@ -12764,7 +12426,7 @@ static void f_matchlist(typval_T *argvars, typval_T *rettv)
/*
* "matchstr()" function
*/
-static void f_matchstr(typval_T *argvars, typval_T *rettv)
+static void f_matchstr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 2);
}
@@ -12824,7 +12486,7 @@ static void max_min(typval_T *argvars, typval_T *rettv, int domax)
/*
* "max()" function
*/
-static void f_max(typval_T *argvars, typval_T *rettv)
+static void f_max(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
max_min(argvars, rettv, TRUE);
}
@@ -12832,7 +12494,7 @@ static void f_max(typval_T *argvars, typval_T *rettv)
/*
* "min()" function
*/
-static void f_min(typval_T *argvars, typval_T *rettv)
+static void f_min(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
max_min(argvars, rettv, FALSE);
}
@@ -12840,7 +12502,7 @@ static void f_min(typval_T *argvars, typval_T *rettv)
/*
* "mkdir()" function
*/
-static void f_mkdir(typval_T *argvars, typval_T *rettv)
+static void f_mkdir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *dir;
char_u buf[NUMBUFLEN];
@@ -12882,7 +12544,7 @@ static void f_mkdir(typval_T *argvars, typval_T *rettv)
/*
* "mode()" function
*/
-static void f_mode(typval_T *argvars, typval_T *rettv)
+static void f_mode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[3];
@@ -12936,7 +12598,7 @@ static void f_mode(typval_T *argvars, typval_T *rettv)
}
/// "msgpackdump()" function
-static void f_msgpackdump(typval_T *argvars, typval_T *rettv)
+static void f_msgpackdump(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
if (argvars[0].v_type != VAR_LIST) {
@@ -12964,7 +12626,7 @@ static void f_msgpackdump(typval_T *argvars, typval_T *rettv)
}
/// "msgpackparse" function
-static void f_msgpackparse(typval_T *argvars, typval_T *rettv)
+static void f_msgpackparse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
if (argvars[0].v_type != VAR_LIST) {
@@ -13045,7 +12707,7 @@ f_msgpackparse_exit:
/*
* "nextnonblank()" function
*/
-static void f_nextnonblank(typval_T *argvars, typval_T *rettv)
+static void f_nextnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -13063,7 +12725,7 @@ static void f_nextnonblank(typval_T *argvars, typval_T *rettv)
/*
* "nr2char()" function
*/
-static void f_nr2char(typval_T *argvars, typval_T *rettv)
+static void f_nr2char(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -13087,7 +12749,7 @@ static void f_nr2char(typval_T *argvars, typval_T *rettv)
/*
* "or(expr, expr)" function
*/
-static void f_or(typval_T *argvars, typval_T *rettv)
+static void f_or(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
| get_tv_number_chk(&argvars[1], NULL);
@@ -13096,7 +12758,7 @@ static void f_or(typval_T *argvars, typval_T *rettv)
/*
* "pathshorten()" function
*/
-static void f_pathshorten(typval_T *argvars, typval_T *rettv)
+static void f_pathshorten(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = get_tv_string_chk(&argvars[0]);
@@ -13109,7 +12771,7 @@ static void f_pathshorten(typval_T *argvars, typval_T *rettv)
/*
* "pow()" function
*/
-static void f_pow(typval_T *argvars, typval_T *rettv)
+static void f_pow(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -13124,7 +12786,7 @@ static void f_pow(typval_T *argvars, typval_T *rettv)
/*
* "prevnonblank()" function
*/
-static void f_prevnonblank(typval_T *argvars, typval_T *rettv)
+static void f_prevnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -13146,7 +12808,7 @@ static va_list ap;
/*
* "printf()" function
*/
-static void f_printf(typval_T *argvars, typval_T *rettv)
+static void f_printf(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -13172,7 +12834,7 @@ static void f_printf(typval_T *argvars, typval_T *rettv)
/*
* "pumvisible()" function
*/
-static void f_pumvisible(typval_T *argvars, typval_T *rettv)
+static void f_pumvisible(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (pum_visible())
rettv->vval.v_number = 1;
@@ -13181,7 +12843,7 @@ static void f_pumvisible(typval_T *argvars, typval_T *rettv)
/*
* "pyeval()" function
*/
-static void f_pyeval(typval_T *argvars, typval_T *rettv)
+static void f_pyeval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
script_host_eval("python", argvars, rettv);
}
@@ -13189,7 +12851,7 @@ static void f_pyeval(typval_T *argvars, typval_T *rettv)
/*
* "py3eval()" function
*/
-static void f_py3eval(typval_T *argvars, typval_T *rettv)
+static void f_py3eval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
script_host_eval("python3", argvars, rettv);
}
@@ -13197,7 +12859,7 @@ static void f_py3eval(typval_T *argvars, typval_T *rettv)
/*
* "range()" function
*/
-static void f_range(typval_T *argvars, typval_T *rettv)
+static void f_range(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long start;
long end;
@@ -13232,7 +12894,7 @@ static void f_range(typval_T *argvars, typval_T *rettv)
/*
* "readfile()" function
*/
-static void f_readfile(typval_T *argvars, typval_T *rettv)
+static void f_readfile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int binary = FALSE;
char_u *fname;
@@ -13431,7 +13093,7 @@ static int list2proftime(typval_T *arg, proftime_T *tm) FUNC_ATTR_NONNULL_ALL
/// one argument it returns the time passed since the argument.
/// With two arguments it returns the time passed between
/// the two arguments.
-static void f_reltime(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
+static void f_reltime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
proftime_T res;
proftime_T start;
@@ -13477,7 +13139,7 @@ static void f_reltime(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
/// @return The string representation of the argument, the format is the
/// number of seconds followed by a dot, followed by the number
/// of microseconds.
-static void f_reltimestr(typval_T *argvars, typval_T *rettv)
+static void f_reltimestr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
proftime_T tm;
@@ -13492,7 +13154,7 @@ static void f_reltimestr(typval_T *argvars, typval_T *rettv)
/*
* "remove()" function
*/
-static void f_remove(typval_T *argvars, typval_T *rettv)
+static void f_remove(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *item, *item2;
@@ -13577,7 +13239,7 @@ static void f_remove(typval_T *argvars, typval_T *rettv)
/*
* "rename({from}, {to})" function
*/
-static void f_rename(typval_T *argvars, typval_T *rettv)
+static void f_rename(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -13591,7 +13253,7 @@ static void f_rename(typval_T *argvars, typval_T *rettv)
/*
* "repeat()" function
*/
-static void f_repeat(typval_T *argvars, typval_T *rettv)
+static void f_repeat(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
int n;
@@ -13625,7 +13287,7 @@ static void f_repeat(typval_T *argvars, typval_T *rettv)
/*
* "resolve()" function
*/
-static void f_resolve(typval_T *argvars, typval_T *rettv)
+static void f_resolve(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
#ifdef HAVE_READLINK
@@ -13799,7 +13461,7 @@ fail:
/*
* "reverse({list})" function
*/
-static void f_reverse(typval_T *argvars, typval_T *rettv)
+static void f_reverse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *li, *ni;
@@ -13970,16 +13632,8 @@ theend:
return retval;
}
-/*
- * "round({float})" function
- */
-static void f_round(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &round);
-}
-
// "rpcnotify()" function
-static void f_rpcnotify(typval_T *argvars, typval_T *rettv)
+static void f_rpcnotify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -14015,7 +13669,7 @@ static void f_rpcnotify(typval_T *argvars, typval_T *rettv)
}
// "rpcrequest()" function
-static void f_rpcrequest(typval_T *argvars, typval_T *rettv)
+static void f_rpcrequest(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -14088,7 +13742,7 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv)
}
if (err.set) {
- vim_report_error(cstr_as_string(err.msg));
+ nvim_err_writeln(cstr_as_string(err.msg));
goto end;
}
@@ -14100,8 +13754,8 @@ end:
api_free_object(result);
}
-// "rpcstart()" function
-static void f_rpcstart(typval_T *argvars, typval_T *rettv)
+// "rpcstart()" function (DEPRECATED)
+static void f_rpcstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -14153,17 +13807,14 @@ static void f_rpcstart(typval_T *argvars, typval_T *rettv)
// The last item of argv must be NULL
argv[i] = NULL;
- uint64_t channel_id = channel_from_process(argv);
-
- if (!channel_id) {
- EMSG(_(e_api_spawn_failed));
- }
- rettv->vval.v_number = (varnumber_T)channel_id;
+ TerminalJobData *data = common_job_init(argv, NULL, NULL, NULL,
+ NULL, false, true, false, NULL);
+ common_job_start(data, rettv);
}
// "rpcstop()" function
-static void f_rpcstop(typval_T *argvars, typval_T *rettv)
+static void f_rpcstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -14178,13 +13829,18 @@ static void f_rpcstop(typval_T *argvars, typval_T *rettv)
return;
}
- rettv->vval.v_number = channel_close(argvars[0].vval.v_number);
+ // if called with a job, stop it, else closes the channel
+ if (pmap_get(uint64_t)(jobs, argvars[0].vval.v_number)) {
+ f_jobstop(argvars, rettv, NULL);
+ } else {
+ rettv->vval.v_number = channel_close(argvars[0].vval.v_number);
+ }
}
/*
* "screenattr()" function
*/
-static void f_screenattr(typval_T *argvars, typval_T *rettv)
+static void f_screenattr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int row;
int col;
@@ -14203,7 +13859,7 @@ static void f_screenattr(typval_T *argvars, typval_T *rettv)
/*
* "screenchar()" function
*/
-static void f_screenchar(typval_T *argvars, typval_T *rettv)
+static void f_screenchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int row;
int col;
@@ -14230,7 +13886,7 @@ static void f_screenchar(typval_T *argvars, typval_T *rettv)
*
* First column is 1 to be consistent with virtcol().
*/
-static void f_screencol(typval_T *argvars, typval_T *rettv)
+static void f_screencol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ui_current_col() + 1;
}
@@ -14238,7 +13894,7 @@ static void f_screencol(typval_T *argvars, typval_T *rettv)
/*
* "screenrow()" function
*/
-static void f_screenrow(typval_T *argvars, typval_T *rettv)
+static void f_screenrow(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ui_current_row() + 1;
}
@@ -14246,7 +13902,7 @@ static void f_screenrow(typval_T *argvars, typval_T *rettv)
/*
* "search()" function
*/
-static void f_search(typval_T *argvars, typval_T *rettv)
+static void f_search(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int flags = 0;
@@ -14256,7 +13912,7 @@ static void f_search(typval_T *argvars, typval_T *rettv)
/*
* "searchdecl()" function
*/
-static void f_searchdecl(typval_T *argvars, typval_T *rettv)
+static void f_searchdecl(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int locally = 1;
int thisblock = 0;
@@ -14349,7 +14005,7 @@ theend:
/*
* "searchpair()" function
*/
-static void f_searchpair(typval_T *argvars, typval_T *rettv)
+static void f_searchpair(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = searchpair_cmn(argvars, NULL);
}
@@ -14357,7 +14013,7 @@ static void f_searchpair(typval_T *argvars, typval_T *rettv)
/*
* "searchpairpos()" function
*/
-static void f_searchpairpos(typval_T *argvars, typval_T *rettv)
+static void f_searchpairpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T match_pos;
int lnum = 0;
@@ -14522,7 +14178,7 @@ do_searchpair (
/*
* "searchpos()" function
*/
-static void f_searchpos(typval_T *argvars, typval_T *rettv)
+static void f_searchpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T match_pos;
int lnum = 0;
@@ -14545,7 +14201,7 @@ static void f_searchpos(typval_T *argvars, typval_T *rettv)
}
/// "serverlist()" function
-static void f_serverlist(typval_T *argvars, typval_T *rettv)
+static void f_serverlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
size_t n;
char **addrs = server_address_list(&n);
@@ -14563,7 +14219,7 @@ static void f_serverlist(typval_T *argvars, typval_T *rettv)
}
/// "serverstart()" function
-static void f_serverstart(typval_T *argvars, typval_T *rettv)
+static void f_serverstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL; // Address of the new server
@@ -14591,7 +14247,7 @@ static void f_serverstart(typval_T *argvars, typval_T *rettv)
}
/// "serverstop()" function
-static void f_serverstop(typval_T *argvars, typval_T *rettv)
+static void f_serverstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -14610,7 +14266,7 @@ static void f_serverstop(typval_T *argvars, typval_T *rettv)
/*
* "setbufvar()" function
*/
-static void f_setbufvar(typval_T *argvars, typval_T *rettv)
+static void f_setbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
aco_save_T aco;
@@ -14652,7 +14308,7 @@ static void f_setbufvar(typval_T *argvars, typval_T *rettv)
}
}
-static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
+static void f_setcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *d;
dictitem_T *di;
@@ -14664,7 +14320,7 @@ static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
}
if ((d = argvars[0].vval.v_dict) != NULL) {
- csearch = get_dict_string(d, (char_u *)"char", FALSE);
+ csearch = get_dict_string(d, "char", false);
if (csearch != NULL) {
if (enc_utf8) {
int pcc[MAX_MCO];
@@ -14689,7 +14345,7 @@ static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
/*
* "setcmdpos()" function
*/
-static void f_setcmdpos(typval_T *argvars, typval_T *rettv)
+static void f_setcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int pos = (int)get_tv_number(&argvars[0]) - 1;
@@ -14699,7 +14355,7 @@ static void f_setcmdpos(typval_T *argvars, typval_T *rettv)
/// "setfperm({fname}, {mode})" function
-static void f_setfperm(typval_T *argvars, typval_T *rettv)
+static void f_setfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = 0;
@@ -14732,7 +14388,7 @@ static void f_setfperm(typval_T *argvars, typval_T *rettv)
/*
* "setline()" function
*/
-static void f_setline(typval_T *argvars, typval_T *rettv)
+static void f_setline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
char_u *line = NULL;
@@ -14857,7 +14513,7 @@ skip_args:
/*
* "setloclist()" function
*/
-static void f_setloclist(typval_T *argvars, typval_T *rettv)
+static void f_setloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *win;
@@ -14872,7 +14528,7 @@ static void f_setloclist(typval_T *argvars, typval_T *rettv)
/*
* "setmatches()" function
*/
-static void f_setmatches(typval_T *argvars, typval_T *rettv)
+static void f_setmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *li;
@@ -14938,16 +14594,16 @@ static void f_setmatches(typval_T *argvars, typval_T *rettv)
}
}
- char_u *group = get_dict_string(d, (char_u *)"group", false);
- int priority = get_dict_number(d, (char_u *)"priority");
- int id = get_dict_number(d, (char_u *)"id");
+ char_u *group = get_dict_string(d, "group", false);
+ int priority = get_dict_number(d, "priority");
+ int id = get_dict_number(d, "id");
char_u *conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
- ? get_dict_string(d, (char_u *)"conceal",
+ ? get_dict_string(d, "conceal",
false)
: NULL;
if (i == 0) {
match_add(curwin, group,
- get_dict_string(d, (char_u *)"pattern", false),
+ get_dict_string(d, "pattern", false),
priority, id, NULL, conceal);
} else {
match_add(curwin, group, NULL, priority, id, s, conceal);
@@ -14963,7 +14619,7 @@ static void f_setmatches(typval_T *argvars, typval_T *rettv)
/*
* "setpos()" function
*/
-static void f_setpos(typval_T *argvars, typval_T *rettv)
+static void f_setpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
int fnum;
@@ -15005,7 +14661,7 @@ static void f_setpos(typval_T *argvars, typval_T *rettv)
/*
* "setqflist()" function
*/
-static void f_setqflist(typval_T *argvars, typval_T *rettv)
+static void f_setqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
set_qf_ll_list(NULL, argvars, rettv);
}
@@ -15013,7 +14669,7 @@ static void f_setqflist(typval_T *argvars, typval_T *rettv)
/*
* "setreg()" function
*/
-static void f_setreg(typval_T *argvars, typval_T *rettv)
+static void f_setreg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int regname;
char_u *strregname;
@@ -15108,7 +14764,7 @@ free_lstval:
/*
* "settabvar()" function
*/
-static void f_settabvar(typval_T *argvars, typval_T *rettv)
+static void f_settabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
tabpage_T *save_curtab;
tabpage_T *tp;
@@ -15145,7 +14801,7 @@ static void f_settabvar(typval_T *argvars, typval_T *rettv)
/*
* "settabwinvar()" function
*/
-static void f_settabwinvar(typval_T *argvars, typval_T *rettv)
+static void f_settabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
setwinvar(argvars, rettv, 1);
}
@@ -15153,7 +14809,7 @@ static void f_settabwinvar(typval_T *argvars, typval_T *rettv)
/*
* "setwinvar()" function
*/
-static void f_setwinvar(typval_T *argvars, typval_T *rettv)
+static void f_setwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
setwinvar(argvars, rettv, 0);
}
@@ -15213,7 +14869,7 @@ static void setwinvar(typval_T *argvars, typval_T *rettv, int off)
}
/// f_sha256 - sha256({string}) function
-static void f_sha256(typval_T *argvars, typval_T *rettv)
+static void f_sha256(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = get_tv_string(&argvars[0]);
const char_u *hash = sha256_bytes(p, (int) STRLEN(p) , NULL, 0);
@@ -15226,7 +14882,7 @@ static void f_sha256(typval_T *argvars, typval_T *rettv)
/*
* "shellescape({string})" function
*/
-static void f_shellescape(typval_T *argvars, typval_T *rettv)
+static void f_shellescape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = vim_strsave_shellescape(
get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), true);
@@ -15236,7 +14892,7 @@ static void f_shellescape(typval_T *argvars, typval_T *rettv)
/*
* shiftwidth() function
*/
-static void f_shiftwidth(typval_T *argvars, typval_T *rettv)
+static void f_shiftwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_sw_value(curbuf);
}
@@ -15244,7 +14900,7 @@ static void f_shiftwidth(typval_T *argvars, typval_T *rettv)
/*
* "simplify()" function
*/
-static void f_simplify(typval_T *argvars, typval_T *rettv)
+static void f_simplify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
@@ -15254,22 +14910,6 @@ static void f_simplify(typval_T *argvars, typval_T *rettv)
rettv->v_type = VAR_STRING;
}
-/*
- * "sin()" function
- */
-static void f_sin(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sin);
-}
-
-/*
- * "sinh()" function
- */
-static void f_sinh(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sinh);
-}
-
/// struct used in the array that's given to qsort()
typedef struct {
listitem_T *item;
@@ -15617,13 +15257,13 @@ theend:
}
/// "sort"({list})" function
-static void f_sort(typval_T *argvars, typval_T *rettv)
+static void f_sort(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
do_sort_uniq(argvars, rettv, true);
}
/// "uniq({list})" function
-static void f_uniq(typval_T *argvars, typval_T *rettv)
+static void f_uniq(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
do_sort_uniq(argvars, rettv, false);
}
@@ -15631,7 +15271,7 @@ static void f_uniq(typval_T *argvars, typval_T *rettv)
//
// "reltimefloat()" function
//
-static void f_reltimefloat(typval_T *argvars , typval_T *rettv)
+static void f_reltimefloat(typval_T *argvars , typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
proftime_T tm;
@@ -15646,7 +15286,7 @@ static void f_reltimefloat(typval_T *argvars , typval_T *rettv)
/*
* "soundfold({word})" function
*/
-static void f_soundfold(typval_T *argvars, typval_T *rettv)
+static void f_soundfold(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
@@ -15658,7 +15298,7 @@ static void f_soundfold(typval_T *argvars, typval_T *rettv)
/*
* "spellbadword()" function
*/
-static void f_spellbadword(typval_T *argvars, typval_T *rettv)
+static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *word = (char_u *)"";
hlf_T attr = HLF_COUNT;
@@ -15702,7 +15342,7 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv)
/*
* "spellsuggest()" function
*/
-static void f_spellsuggest(typval_T *argvars, typval_T *rettv)
+static void f_spellsuggest(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *str;
int typeerr = FALSE;
@@ -15742,7 +15382,7 @@ static void f_spellsuggest(typval_T *argvars, typval_T *rettv)
}
}
-static void f_split(typval_T *argvars, typval_T *rettv)
+static void f_split(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *str;
char_u *end;
@@ -15811,17 +15451,9 @@ static void f_split(typval_T *argvars, typval_T *rettv)
}
/*
- * "sqrt()" function
- */
-static void f_sqrt(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sqrt);
-}
-
-/*
* "str2float()" function
*/
-static void f_str2float(typval_T *argvars, typval_T *rettv)
+static void f_str2float(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = skipwhite(get_tv_string(&argvars[0]));
@@ -15832,7 +15464,7 @@ static void f_str2float(typval_T *argvars, typval_T *rettv)
}
// "str2nr()" function
-static void f_str2nr(typval_T *argvars, typval_T *rettv)
+static void f_str2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int base = 10;
char_u *p;
@@ -15871,7 +15503,7 @@ static void f_str2nr(typval_T *argvars, typval_T *rettv)
/*
* "strftime({format}[, {time}])" function
*/
-static void f_strftime(typval_T *argvars, typval_T *rettv)
+static void f_strftime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u result_buf[256];
time_t seconds;
@@ -15922,7 +15554,7 @@ static void f_strftime(typval_T *argvars, typval_T *rettv)
/*
* "stridx()" function
*/
-static void f_stridx(typval_T *argvars, typval_T *rettv)
+static void f_stridx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *needle;
@@ -15955,7 +15587,7 @@ static void f_stridx(typval_T *argvars, typval_T *rettv)
/*
* "string()" function
*/
-static void f_string(typval_T *argvars, typval_T *rettv)
+static void f_string(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = (char_u *) encode_tv2string(&argvars[0], NULL);
@@ -15964,7 +15596,7 @@ static void f_string(typval_T *argvars, typval_T *rettv)
/*
* "strlen()" function
*/
-static void f_strlen(typval_T *argvars, typval_T *rettv)
+static void f_strlen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (varnumber_T)(STRLEN(
get_tv_string(&argvars[0])));
@@ -15973,7 +15605,7 @@ static void f_strlen(typval_T *argvars, typval_T *rettv)
/*
* "strchars()" function
*/
-static void f_strchars(typval_T *argvars, typval_T *rettv)
+static void f_strchars(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
int skipcc = 0;
@@ -15998,7 +15630,7 @@ static void f_strchars(typval_T *argvars, typval_T *rettv)
/*
* "strdisplaywidth()" function
*/
-static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
+static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
int col = 0;
@@ -16012,7 +15644,7 @@ static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
/*
* "strwidth()" function
*/
-static void f_strwidth(typval_T *argvars, typval_T *rettv)
+static void f_strwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
@@ -16022,7 +15654,7 @@ static void f_strwidth(typval_T *argvars, typval_T *rettv)
/*
* "strpart()" function
*/
-static void f_strpart(typval_T *argvars, typval_T *rettv)
+static void f_strpart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
int n;
@@ -16062,7 +15694,7 @@ static void f_strpart(typval_T *argvars, typval_T *rettv)
/*
* "strridx()" function
*/
-static void f_strridx(typval_T *argvars, typval_T *rettv)
+static void f_strridx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *needle;
@@ -16108,7 +15740,7 @@ static void f_strridx(typval_T *argvars, typval_T *rettv)
/*
* "strtrans()" function
*/
-static void f_strtrans(typval_T *argvars, typval_T *rettv)
+static void f_strtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = transstr(get_tv_string(&argvars[0]));
@@ -16117,7 +15749,7 @@ static void f_strtrans(typval_T *argvars, typval_T *rettv)
/*
* "submatch()" function
*/
-static void f_submatch(typval_T *argvars, typval_T *rettv)
+static void f_submatch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int error = FALSE;
int no = (int)get_tv_number_chk(&argvars[0], &error);
@@ -16146,7 +15778,7 @@ static void f_submatch(typval_T *argvars, typval_T *rettv)
/*
* "substitute()" function
*/
-static void f_substitute(typval_T *argvars, typval_T *rettv)
+static void f_substitute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u patbuf[NUMBUFLEN];
char_u subbuf[NUMBUFLEN];
@@ -16167,7 +15799,7 @@ static void f_substitute(typval_T *argvars, typval_T *rettv)
/*
* "synID(lnum, col, trans)" function
*/
-static void f_synID(typval_T *argvars, typval_T *rettv)
+static void f_synID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int id = 0;
long lnum;
@@ -16189,7 +15821,7 @@ static void f_synID(typval_T *argvars, typval_T *rettv)
/*
* "synIDattr(id, what [, mode])" function
*/
-static void f_synIDattr(typval_T *argvars, typval_T *rettv)
+static void f_synIDattr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = NULL;
int id;
@@ -16265,7 +15897,7 @@ static void f_synIDattr(typval_T *argvars, typval_T *rettv)
/*
* "synIDtrans(id)" function
*/
-static void f_synIDtrans(typval_T *argvars, typval_T *rettv)
+static void f_synIDtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int id;
@@ -16282,7 +15914,7 @@ static void f_synIDtrans(typval_T *argvars, typval_T *rettv)
/*
* "synconcealed(lnum, col)" function
*/
-static void f_synconcealed(typval_T *argvars, typval_T *rettv)
+static void f_synconcealed(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
long col;
@@ -16329,7 +15961,7 @@ static void f_synconcealed(typval_T *argvars, typval_T *rettv)
/*
* "synstack(lnum, col)" function
*/
-static void f_synstack(typval_T *argvars, typval_T *rettv)
+static void f_synstack(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
long col;
@@ -16460,12 +16092,12 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
}
/// f_system - the VimL system() function
-static void f_system(typval_T *argvars, typval_T *rettv)
+static void f_system(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_system_output_as_rettv(argvars, rettv, false);
}
-static void f_systemlist(typval_T *argvars, typval_T *rettv)
+static void f_systemlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_system_output_as_rettv(argvars, rettv, true);
}
@@ -16474,7 +16106,7 @@ static void f_systemlist(typval_T *argvars, typval_T *rettv)
/*
* "tabpagebuflist()" function
*/
-static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv)
+static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
tabpage_T *tp;
win_T *wp = NULL;
@@ -16499,7 +16131,7 @@ static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv)
/*
* "tabpagenr()" function
*/
-static void f_tabpagenr(typval_T *argvars, typval_T *rettv)
+static void f_tabpagenr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
char_u *arg;
@@ -16563,7 +16195,7 @@ static int get_winnr(tabpage_T *tp, typval_T *argvar)
/*
* "tabpagewinnr()" function
*/
-static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv)
+static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
tabpage_T *tp;
@@ -16580,7 +16212,7 @@ static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv)
/*
* "tagfiles()" function
*/
-static void f_tagfiles(typval_T *argvars, typval_T *rettv)
+static void f_tagfiles(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
tagname_T tn;
@@ -16601,7 +16233,7 @@ static void f_tagfiles(typval_T *argvars, typval_T *rettv)
/*
* "taglist()" function
*/
-static void f_taglist(typval_T *argvars, typval_T *rettv)
+static void f_taglist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *tag_pattern;
@@ -16617,14 +16249,14 @@ static void f_taglist(typval_T *argvars, typval_T *rettv)
/*
* "tempname()" function
*/
-static void f_tempname(typval_T *argvars, typval_T *rettv)
+static void f_tempname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = vim_tempname();
}
// "termopen(cmd[, cwd])" function
-static void f_termopen(typval_T *argvars, typval_T *rettv)
+static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -16654,7 +16286,7 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
if (argvars[1].v_type == VAR_DICT) {
job_opts = argvars[1].vval.v_dict;
- char *new_cwd = (char *)get_dict_string(job_opts, (char_u *)"cwd", false);
+ char *new_cwd = (char *)get_dict_string(job_opts, "cwd", false);
if (new_cwd && strlen(new_cwd) > 0) {
cwd = new_cwd;
// The new cwd must be a directory.
@@ -16672,7 +16304,7 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
}
TerminalJobData *data = common_job_init(argv, on_stdout, on_stderr, on_exit,
- job_opts, true, false, cwd);
+ job_opts, true, false, false, cwd);
data->proc.pty.width = curwin->w_width;
data->proc.pty.height = curwin->w_height;
data->proc.pty.term_name = xstrdup("xterm-256color");
@@ -16699,9 +16331,9 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
// Save the job id and pid in b:terminal_job_{id,pid}
Error err;
dict_set_value(curbuf->b_vars, cstr_as_string("terminal_job_id"),
- INTEGER_OBJ(rettv->vval.v_number), false, &err);
+ INTEGER_OBJ(rettv->vval.v_number), false, false, &err);
dict_set_value(curbuf->b_vars, cstr_as_string("terminal_job_pid"),
- INTEGER_OBJ(pid), false, &err);
+ INTEGER_OBJ(pid), false, false, &err);
Terminal *term = terminal_open(topts);
data->term = term;
@@ -16713,30 +16345,13 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
/*
* "test(list)" function: Just checking the walls...
*/
-static void f_test(typval_T *argvars, typval_T *rettv)
+static void f_test(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
/* Used for unit testing. Change the code below to your liking. */
}
-/*
- * "tan()" function
- */
-static void f_tan(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &tan);
-}
-
-/*
- * "tanh()" function
- */
-static void f_tanh(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &tanh);
-}
-
-
/// "timer_start(timeout, callback, opts)" function
-static void f_timer_start(typval_T *argvars, typval_T *rettv)
+static void f_timer_start(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long timeout = get_tv_number(&argvars[0]);
timer_T *timer;
@@ -16752,7 +16367,7 @@ static void f_timer_start(typval_T *argvars, typval_T *rettv)
return;
}
if (dict_find(dict, (char_u *)"repeat", -1) != NULL) {
- repeat = get_dict_number(dict, (char_u *)"repeat");
+ repeat = get_dict_number(dict, "repeat");
if (repeat == 0) {
repeat = 1;
}
@@ -16771,6 +16386,7 @@ static void f_timer_start(typval_T *argvars, typval_T *rettv)
func->uf_refcount++;
timer = xmalloc(sizeof *timer);
+ timer->refcount = 1;
timer->stopped = false;
timer->repeat_count = repeat;
timer->timeout = timeout;
@@ -16790,7 +16406,7 @@ static void f_timer_start(typval_T *argvars, typval_T *rettv)
// "timer_stop(timerid)" function
-static void f_timer_stop(typval_T *argvars, typval_T *rettv)
+static void f_timer_stop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (argvars[0].v_type != VAR_NUMBER) {
EMSG(_(e_number_exp));
@@ -16813,6 +16429,7 @@ static void timer_due_cb(TimeWatcher *tw, void *data)
if (timer->stopped) {
return;
}
+ timer->refcount++;
// if repeat was negative repeat forever
if (timer->repeat_count >= 0 && --timer->repeat_count == 0) {
timer_stop(timer);
@@ -16836,6 +16453,7 @@ static void timer_due_cb(TimeWatcher *tw, void *data)
// when the main loop is blocked.
time_watcher_start(&timer->tw, timer_due_cb, 0, 0);
}
+ timer_decref(timer);
}
static void timer_stop(timer_T *timer)
@@ -16846,17 +16464,24 @@ static void timer_stop(timer_T *timer)
}
timer->stopped = true;
time_watcher_stop(&timer->tw);
- time_watcher_close(&timer->tw, timer_free_cb);
+ time_watcher_close(&timer->tw, timer_close_cb);
}
// invoked on next event loop tick, so queue is empty
-static void timer_free_cb(TimeWatcher *tw, void *data)
+static void timer_close_cb(TimeWatcher *tw, void *data)
{
timer_T *timer = (timer_T *)data;
queue_free(timer->tw.events);
user_func_unref(timer->callback);
pmap_del(uint64_t)(timers, timer->timer_id);
- xfree(timer);
+ timer_decref(timer);
+}
+
+static void timer_decref(timer_T *timer)
+{
+ if (--timer->refcount == 0) {
+ xfree(timer);
+ }
}
void timer_teardown(void)
@@ -16870,7 +16495,7 @@ void timer_teardown(void)
/*
* "tolower(string)" function
*/
-static void f_tolower(typval_T *argvars, typval_T *rettv)
+static void f_tolower(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = vim_strsave(get_tv_string(&argvars[0]));
rettv->v_type = VAR_STRING;
@@ -16901,7 +16526,7 @@ static void f_tolower(typval_T *argvars, typval_T *rettv)
/*
* "toupper(string)" function
*/
-static void f_toupper(typval_T *argvars, typval_T *rettv)
+static void f_toupper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = strup_save(get_tv_string(&argvars[0]));
@@ -16910,7 +16535,7 @@ static void f_toupper(typval_T *argvars, typval_T *rettv)
/*
* "tr(string, fromstr, tostr)" function
*/
-static void f_tr(typval_T *argvars, typval_T *rettv)
+static void f_tr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *in_str;
char_u *fromstr;
@@ -17008,17 +16633,9 @@ error:
}
/*
- * "trunc({float})" function
- */
-static void f_trunc(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &trunc);
-}
-
-/*
* "type(expr)" function
*/
-static void f_type(typval_T *argvars, typval_T *rettv)
+static void f_type(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n = -1;
@@ -17054,7 +16671,7 @@ static void f_type(typval_T *argvars, typval_T *rettv)
/*
* "undofile(name)" function
*/
-static void f_undofile(typval_T *argvars, typval_T *rettv)
+static void f_undofile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
{
@@ -17077,7 +16694,7 @@ static void f_undofile(typval_T *argvars, typval_T *rettv)
/*
* "undotree()" function
*/
-static void f_undotree(typval_T *argvars, typval_T *rettv)
+static void f_undotree(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
@@ -17100,7 +16717,7 @@ static void f_undotree(typval_T *argvars, typval_T *rettv)
/*
* "values(dict)" function
*/
-static void f_values(typval_T *argvars, typval_T *rettv)
+static void f_values(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 1);
}
@@ -17108,7 +16725,7 @@ static void f_values(typval_T *argvars, typval_T *rettv)
/*
* "virtcol(string)" function
*/
-static void f_virtcol(typval_T *argvars, typval_T *rettv)
+static void f_virtcol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
colnr_T vcol = 0;
pos_T *fp;
@@ -17127,7 +16744,7 @@ static void f_virtcol(typval_T *argvars, typval_T *rettv)
/*
* "visualmode()" function
*/
-static void f_visualmode(typval_T *argvars, typval_T *rettv)
+static void f_visualmode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u str[2];
@@ -17144,16 +16761,48 @@ static void f_visualmode(typval_T *argvars, typval_T *rettv)
/*
* "wildmenumode()" function
*/
-static void f_wildmenumode(typval_T *argvars, typval_T *rettv)
+static void f_wildmenumode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (wild_menu_showing)
rettv->vval.v_number = 1;
}
+/// "win_findbuf()" function
+static void f_win_findbuf(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv_list_alloc(rettv);
+ win_findbuf(argvars, rettv->vval.v_list);
+}
+
+/// "win_getid()" function
+static void f_win_getid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_getid(argvars);
+}
+
+/// "win_gotoid()" function
+static void f_win_gotoid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_gotoid(argvars);
+}
+
+/// "win_id2tabwin()" function
+static void f_win_id2tabwin(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv_list_alloc(rettv);
+ win_id2tabwin(argvars, rettv->vval.v_list);
+}
+
+/// "win_id2win()" function
+static void f_win_id2win(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_id2win(argvars);
+}
+
/*
* "winbufnr(nr)" function
*/
-static void f_winbufnr(typval_T *argvars, typval_T *rettv)
+static void f_winbufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -17167,7 +16816,7 @@ static void f_winbufnr(typval_T *argvars, typval_T *rettv)
/*
* "wincol()" function
*/
-static void f_wincol(typval_T *argvars, typval_T *rettv)
+static void f_wincol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
validate_cursor();
rettv->vval.v_number = curwin->w_wcol + 1;
@@ -17176,7 +16825,7 @@ static void f_wincol(typval_T *argvars, typval_T *rettv)
/*
* "winheight(nr)" function
*/
-static void f_winheight(typval_T *argvars, typval_T *rettv)
+static void f_winheight(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -17190,7 +16839,7 @@ static void f_winheight(typval_T *argvars, typval_T *rettv)
/*
* "winline()" function
*/
-static void f_winline(typval_T *argvars, typval_T *rettv)
+static void f_winline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
validate_cursor();
rettv->vval.v_number = curwin->w_wrow + 1;
@@ -17199,7 +16848,7 @@ static void f_winline(typval_T *argvars, typval_T *rettv)
/*
* "winnr()" function
*/
-static void f_winnr(typval_T *argvars, typval_T *rettv)
+static void f_winnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
@@ -17210,7 +16859,7 @@ static void f_winnr(typval_T *argvars, typval_T *rettv)
/*
* "winrestcmd()" function
*/
-static void f_winrestcmd(typval_T *argvars, typval_T *rettv)
+static void f_winrestcmd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int winnr = 1;
garray_T ga;
@@ -17233,7 +16882,7 @@ static void f_winrestcmd(typval_T *argvars, typval_T *rettv)
/*
* "winrestview()" function
*/
-static void f_winrestview(typval_T *argvars, typval_T *rettv)
+static void f_winrestview(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *dict;
@@ -17242,29 +16891,29 @@ static void f_winrestview(typval_T *argvars, typval_T *rettv)
EMSG(_(e_invarg));
else {
if (dict_find(dict, (char_u *)"lnum", -1) != NULL) {
- curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum");
+ curwin->w_cursor.lnum = get_dict_number(dict, "lnum");
}
if (dict_find(dict, (char_u *)"col", -1) != NULL) {
- curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col");
+ curwin->w_cursor.col = get_dict_number(dict, "col");
}
if (dict_find(dict, (char_u *)"coladd", -1) != NULL) {
- curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd");
+ curwin->w_cursor.coladd = get_dict_number(dict, "coladd");
}
if (dict_find(dict, (char_u *)"curswant", -1) != NULL) {
- curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
- curwin->w_set_curswant = FALSE;
+ curwin->w_curswant = get_dict_number(dict, "curswant");
+ curwin->w_set_curswant = false;
}
if (dict_find(dict, (char_u *)"topline", -1) != NULL) {
- set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+ set_topline(curwin, get_dict_number(dict, "topline"));
}
if (dict_find(dict, (char_u *)"topfill", -1) != NULL) {
- curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+ curwin->w_topfill = get_dict_number(dict, "topfill");
}
if (dict_find(dict, (char_u *)"leftcol", -1) != NULL) {
- curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol");
+ curwin->w_leftcol = get_dict_number(dict, "leftcol");
}
if (dict_find(dict, (char_u *)"skipcol", -1) != NULL) {
- curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+ curwin->w_skipcol = get_dict_number(dict, "skipcol");
}
check_cursor();
@@ -17283,7 +16932,7 @@ static void f_winrestview(typval_T *argvars, typval_T *rettv)
/*
* "winsaveview()" function
*/
-static void f_winsaveview(typval_T *argvars, typval_T *rettv)
+static void f_winsaveview(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *dict;
@@ -17387,7 +17036,7 @@ static char_u *save_tv_as_string(typval_T *tv, ssize_t *len, bool endnl)
/*
* "winwidth(nr)" function
*/
-static void f_winwidth(typval_T *argvars, typval_T *rettv)
+static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -17399,14 +17048,14 @@ static void f_winwidth(typval_T *argvars, typval_T *rettv)
}
/// "wordcount()" function
-static void f_wordcount(typval_T *argvars, typval_T *rettv)
+static void f_wordcount(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
cursor_pos_info(rettv->vval.v_dict);
}
/// "writefile()" function
-static void f_writefile(typval_T *argvars, typval_T *rettv)
+static void f_writefile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = 0; // Assuming success.
@@ -17451,7 +17100,7 @@ static void f_writefile(typval_T *argvars, typval_T *rettv)
/*
* "xor(expr, expr)" function
*/
-static void f_xor(typval_T *argvars, typval_T *rettv)
+static void f_xor(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
^ get_tv_number_chk(&argvars[1], NULL);
@@ -18437,7 +18086,7 @@ static void init_tv(typval_T *varp)
* caller of incompatible types: it sets *denote to TRUE if "denote"
* is not NULL or returns -1 otherwise.
*/
-static long get_tv_number(typval_T *varp)
+long get_tv_number(typval_T *varp)
{
int error = FALSE;
@@ -18533,7 +18182,7 @@ static linenr_T get_tv_lnum(typval_T *argvars)
lnum = get_tv_number_chk(&argvars[0], NULL);
if (lnum == 0) { /* no valid number, try using line() */
rettv.v_type = VAR_NUMBER;
- f_line(argvars, &rettv);
+ f_line(argvars, &rettv, NULL);
lnum = rettv.vval.v_number;
clear_tv(&rettv);
}
@@ -20361,7 +20010,7 @@ void free_all_functions(void)
int translated_function_exists(char_u *name)
{
if (builtin_function(name, -1)) {
- return find_internal_func(name) >= 0;
+ return find_internal_func((char *)name) != NULL;
}
return find_func(name) != NULL;
}
@@ -21681,8 +21330,8 @@ void ex_oldfiles(exarg_T *eap)
/* Assume "got_int" was set to truncate the listing. */
got_int = FALSE;
- // File selection prompt on ":oldfiles!"
- if (eap->forceit) {
+ // File selection prompt on ":browse oldfiles"
+ if (cmdmod.browse) {
quit_more = false;
nr = prompt_for_number(false);
msg_starthere();
@@ -22060,6 +21709,7 @@ static inline TerminalJobData *common_job_init(char **argv,
ufunc_T *on_exit,
dict_T *self,
bool pty,
+ bool rpc,
bool detach,
char *cwd)
{
@@ -22070,6 +21720,7 @@ static inline TerminalJobData *common_job_init(char **argv,
data->on_exit = on_exit;
data->self = self;
data->events = queue_new_child(main_loop.events);
+ data->rpc = rpc;
if (pty) {
data->proc.pty = pty_process_init(&main_loop, data);
} else {
@@ -22089,7 +21740,9 @@ static inline TerminalJobData *common_job_init(char **argv,
return data;
}
-/// Return true/false on success/failure.
+/// common code for getting job callbacks for jobstart, termopen and rpcstart
+///
+/// @return true/false on success/failure.
static inline bool common_job_callbacks(dict_T *vopts, ufunc_T **on_stdout,
ufunc_T **on_stderr, ufunc_T **on_exit)
{
@@ -22116,9 +21769,15 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv)
Process *proc = (Process *)&data->proc;
if (proc->type == kProcessTypePty && proc->detach) {
EMSG2(_(e_invarg2), "terminal/pty job cannot be detached");
+ xfree(data->proc.pty.term_name);
+ shell_free_argv(proc->argv);
+ free_term_job_data_event((void **)&data);
return false;
}
+ data->id = next_chan_id++;
+ pmap_put(uint64_t)(jobs, data->id, data);
+
data->refcount++;
char *cmd = xstrdup(proc->argv[0]);
if (!process_spawn(proc)) {
@@ -22133,17 +21792,22 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv)
}
xfree(cmd);
- data->id = current_job_id++;
- wstream_init(proc->in, 0);
- if (proc->out) {
- rstream_init(proc->out, 0);
- rstream_start(proc->out, on_job_stdout);
+
+ if (data->rpc) {
+ // the rpc channel takes over the in and out streams
+ channel_from_process(proc, data->id);
+ } else {
+ wstream_init(proc->in, 0);
+ if (proc->out) {
+ rstream_init(proc->out, 0);
+ rstream_start(proc->out, on_job_stdout, data);
+ }
}
+
if (proc->err) {
rstream_init(proc->err, 0);
- rstream_start(proc->err, on_job_stderr);
+ rstream_start(proc->err, on_job_stderr, data);
}
- pmap_put(uint64_t)(jobs, data->id, data);
rettv->vval.v_number = data->id;
return true;
}
@@ -22165,6 +21829,7 @@ static inline void free_term_job_data_event(void **argv)
dict_unref(data->self);
}
queue_free(data->events);
+ pmap_del(uint64_t)(jobs, data->id);
xfree(data);
}
@@ -22261,12 +21926,17 @@ static void on_process_exit(Process *proc, int status, void *d)
snprintf(msg, sizeof msg, "\r\n[Process exited %d]", proc->status);
terminal_close(data->term, msg);
}
+ if (data->rpc) {
+ channel_process_exit(data->id, status);
+ }
if (data->status_ptr) {
*data->status_ptr = status;
}
process_job_event(data, data->on_exit, "exit", NULL, 0, status);
+
+ term_job_data_decref(data);
}
static void term_write(char *buf, size_t size, void *d)
@@ -22314,7 +21984,7 @@ static void term_job_data_decref(TerminalJobData *data)
static void on_job_event(JobEvent *ev)
{
if (!ev->callback) {
- goto end;
+ return;
}
typval_T argv[3];
@@ -22350,13 +22020,6 @@ static void on_job_event(JobEvent *ev)
call_user_func(ev->callback, argc, argv, &rettv, curwin->w_cursor.lnum,
curwin->w_cursor.lnum, ev->data->self);
clear_tv(&rettv);
-
-end:
- if (!ev->received) {
- // exit event, safe to free job data now
- pmap_del(uint64_t)(jobs, ev->data->id);
- term_job_data_decref(ev->data);
- }
}
static TerminalJobData *find_job(uint64_t id)
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
new file mode 100644
index 0000000000..3c371fc264
--- /dev/null
+++ b/src/nvim/eval.lua
@@ -0,0 +1,331 @@
+-- File containing table with all functions.
+--
+-- Keys:
+--
+-- args Number of arguments, list with maximum and minimum number of arguments
+-- or list with a minimum number of arguments only. Defaults to zero
+-- arguments.
+-- func Name of the C function which implements the VimL function. Defaults to
+-- `f_{funcname}`.
+
+local varargs = function(nr)
+ return {nr}
+end
+
+return {
+ funcs={
+ abs={args=1},
+ acos={args=1, func="float_op_wrapper", data="&acos"}, -- WJMc
+ add={args=2},
+ ['and']={args=2},
+ api_info={},
+ append={args=2},
+ argc={},
+ argidx={},
+ arglistid={args={0, 2}},
+ argv={args={0, 1}},
+ asin={args=1, func="float_op_wrapper", data="&asin"}, -- WJMc
+ assert_equal={args={2, 3}},
+ assert_exception={args={1, 2}},
+ assert_fails={args={1, 2}},
+ assert_false={args={1, 2}},
+ assert_match={args={2, 3}},
+ assert_notequal={args={2, 3}},
+ assert_notmatch={args={2, 3}},
+ assert_true={args={1, 2}},
+ atan={args=1, func="float_op_wrapper", data="&atan"},
+ atan2={args=2},
+ browse={args=4},
+ browsedir={args=2},
+ bufexists={args=1},
+ buffer_exists={args=1, func='f_bufexists'}, -- obsolete
+ buffer_name={args=1, func='f_bufname'}, -- obsolete
+ buffer_number={args=1, func='f_bufnr'}, -- obsolete
+ buflisted={args=1},
+ bufloaded={args=1},
+ bufname={args=1},
+ bufnr={args={1, 2}},
+ bufwinnr={args=1},
+ byte2line={args=1},
+ byteidx={args=2},
+ byteidxcomp={args=2},
+ call={args={2, 3}},
+ ceil={args=1, func="float_op_wrapper", data="&ceil"},
+ changenr={},
+ char2nr={args={1, 2}},
+ cindent={args=1},
+ clearmatches={},
+ col={args=1},
+ complete={args=2},
+ complete_add={args=1},
+ complete_check={},
+ confirm={args={1, 4}},
+ copy={args=1},
+ cos={args=1, func="float_op_wrapper", data="&cos"},
+ cosh={args=1, func="float_op_wrapper", data="&cosh"},
+ count={args={2, 4}},
+ cscope_connection={args={0, 3}},
+ cursor={args={1, 3}},
+ deepcopy={args={1, 2}},
+ delete={args={1,2}},
+ dictwatcheradd={args=3},
+ dictwatcherdel={args=3},
+ did_filetype={},
+ diff_filler={args=1},
+ diff_hlID={args=2},
+ empty={args=1},
+ escape={args=2},
+ eval={args=1},
+ eventhandler={},
+ executable={args=1},
+ execute={args=1},
+ exepath={args=1},
+ exists={args=1},
+ exp={args=1, func="float_op_wrapper", data="&exp"},
+ expand={args={1, 3}},
+ extend={args={2, 3}},
+ feedkeys={args={1, 2}},
+ file_readable={args=1, func='f_filereadable'}, -- obsolete
+ filereadable={args=1},
+ filewritable={args=1},
+ filter={args=2},
+ finddir={args={1, 3}},
+ findfile={args={1, 3}},
+ float2nr={args=1},
+ floor={args=1, func="float_op_wrapper", data="&floor"},
+ fmod={args=2},
+ fnameescape={args=1},
+ fnamemodify={args=2},
+ foldclosed={args=1},
+ foldclosedend={args=1},
+ foldlevel={args=1},
+ foldtext={},
+ foldtextresult={args=1},
+ foreground={},
+ ['function']={args=1},
+ garbagecollect={args={0, 1}},
+ get={args={2, 3}},
+ getbufline={args={2, 3}},
+ getbufvar={args={2, 3}},
+ getchar={args={0, 1}},
+ getcharmod={},
+ getcharsearch={},
+ getcmdline={},
+ getcmdpos={},
+ getcmdtype={},
+ getcmdwintype={},
+ getcompletion={args=2},
+ getcurpos={},
+ getcwd={args={0,2}},
+ getfontname={args={0, 1}},
+ getfperm={args=1},
+ getfsize={args=1},
+ getftime={args=1},
+ getftype={args=1},
+ getline={args={1, 2}},
+ getloclist={args=1, func='f_getqflist'},
+ getmatches={},
+ getpid={},
+ getpos={args=1},
+ getqflist={},
+ getreg={args={0, 3}},
+ getregtype={args={0, 1}},
+ gettabvar={args={2, 3}},
+ gettabwinvar={args={3, 4}},
+ getwinposx={},
+ getwinposy={},
+ getwinvar={args={2, 3}},
+ glob={args={1, 4}},
+ glob2regpat={args=1},
+ globpath={args={2, 5}},
+ has={args=1},
+ has_key={args=2},
+ haslocaldir={args={0,2}},
+ hasmapto={args={1, 3}},
+ highlightID={args=1, func='f_hlID'}, -- obsolete
+ highlight_exists={args=1, func='f_hlexists'}, -- obsolete
+ histadd={args=2},
+ histdel={args={1, 2}},
+ histget={args={1, 2}},
+ histnr={args=1},
+ hlID={args=1},
+ hlexists={args=1},
+ hostname={},
+ iconv={args=3},
+ indent={args=1},
+ index={args={2, 4}},
+ input={args={1, 3}},
+ inputdialog={args={1, 3}},
+ inputlist={args=1},
+ inputrestore={},
+ inputsave={},
+ inputsecret={args={1, 2}},
+ insert={args={2, 3}},
+ invert={args=1},
+ isdirectory={args=1},
+ islocked={args=1},
+ items={args=1},
+ jobclose={args={1, 2}},
+ jobpid={args=1},
+ jobresize={args=3},
+ jobsend={args=2},
+ jobstart={args={1, 2}},
+ jobstop={args=1},
+ jobwait={args={1, 2}},
+ join={args={1, 2}},
+ json_decode={args=1},
+ json_encode={args=1},
+ keys={args=1},
+ last_buffer_nr={}, -- obsolete
+ len={args=1},
+ libcall={args=3},
+ libcallnr={args=3},
+ line={args=1},
+ line2byte={args=1},
+ lispindent={args=1},
+ localtime={},
+ log={args=1, func="float_op_wrapper", data="&log"},
+ log10={args=1, func="float_op_wrapper", data="&log10"},
+ map={args=2},
+ maparg={args={1, 4}},
+ mapcheck={args={1, 3}},
+ match={args={2, 4}},
+ matchadd={args={2, 5}},
+ matchaddpos={args={2, 5}},
+ matcharg={args=1},
+ matchdelete={args=1},
+ matchend={args={2, 4}},
+ matchlist={args={2, 4}},
+ matchstr={args={2, 4}},
+ max={args=1},
+ min={args=1},
+ mkdir={args={1, 3}},
+ mode={args={0, 1}},
+ msgpackdump={args=1},
+ msgpackparse={args=1},
+ nextnonblank={args=1},
+ nr2char={args={1, 2}},
+ ['or']={args=2},
+ pathshorten={args=1},
+ pow={args=2},
+ prevnonblank={args=1},
+ printf={args=varargs(2)},
+ pumvisible={},
+ py3eval={args=1},
+ pyeval={args=1},
+ range={args={1, 3}},
+ readfile={args={1, 3}},
+ reltime={args={0, 2}},
+ reltimefloat={args=1},
+ reltimestr={args=1},
+ remove={args={2, 3}},
+ rename={args=2},
+ ['repeat']={args=2},
+ resolve={args=1},
+ reverse={args=1},
+ round={args=1, func="float_op_wrapper", data="&round"},
+ rpcnotify={args=varargs(2)},
+ rpcrequest={args=varargs(2)},
+ rpcstart={args={1, 2}},
+ rpcstop={args=1},
+ screenattr={args=2},
+ screenchar={args=2},
+ screencol={},
+ screenrow={},
+ search={args={1, 4}},
+ searchdecl={args={1, 3}},
+ searchpair={args={3, 7}},
+ searchpairpos={args={3, 7}},
+ searchpos={args={1, 4}},
+ serverlist={},
+ serverstart={args={0, 1}},
+ serverstop={args=1},
+ setbufvar={args=3},
+ setcharsearch={args=1},
+ setcmdpos={args=1},
+ setfperm={args=2},
+ setline={args=2},
+ setloclist={args={2, 4}},
+ setmatches={args=1},
+ setpos={args=2},
+ setqflist={args={1, 3}},
+ setreg={args={2, 3}},
+ settabvar={args=3},
+ settabwinvar={args=4},
+ setwinvar={args=3},
+ sha256={args=1},
+ shellescape={args={1, 2}},
+ shiftwidth={},
+ simplify={args=1},
+ sin={args=1, func="float_op_wrapper", data="&sin"},
+ sinh={args=1, func="float_op_wrapper", data="&sinh"},
+ sort={args={1, 3}},
+ soundfold={args=1},
+ spellbadword={args={0, 1}},
+ spellsuggest={args={1, 3}},
+ split={args={1, 3}},
+ sqrt={args=1, func="float_op_wrapper", data="&sqrt"},
+ str2float={args=1},
+ str2nr={args={1, 2}},
+ strchars={args={1,2}},
+ strdisplaywidth={args={1, 2}},
+ strftime={args={1, 2}},
+ stridx={args={2, 3}},
+ string={args=1},
+ strlen={args=1},
+ strpart={args={2, 3}},
+ strridx={args={2, 3}},
+ strtrans={args=1},
+ strwidth={args=1},
+ submatch={args={1, 2}},
+ substitute={args=4},
+ synID={args=3},
+ synIDattr={args={2, 3}},
+ synIDtrans={args=1},
+ synconcealed={args=2},
+ synstack={args=2},
+ system={args={1, 2}},
+ systemlist={args={1, 3}},
+ tabpagebuflist={args={0, 1}},
+ tabpagenr={args={0, 1}},
+ tabpagewinnr={args={1, 2}},
+ tagfiles={},
+ taglist={args=1},
+ tan={args=1, func="float_op_wrapper", data="&tan"},
+ tanh={args=1, func="float_op_wrapper", data="&tanh"},
+ tempname={},
+ termopen={args={1, 2}},
+ test={args=1},
+ timer_start={args={2,3}},
+ timer_stop={args=1},
+ tolower={args=1},
+ toupper={args=1},
+ tr={args=3},
+ trunc={args=1, func="float_op_wrapper", data="&trunc"},
+ type={args=1},
+ undofile={args=1},
+ undotree={},
+ uniq={args={1, 3}},
+ values={args=1},
+ virtcol={args=1},
+ visualmode={args={0, 1}},
+ wildmenumode={},
+ win_findbuf={args=1},
+ win_getid={args={0,2}},
+ win_gotoid={args=1},
+ win_id2tabwin={args=1},
+ win_id2win={args=1},
+ winbufnr={args=1},
+ wincol={},
+ winheight={args=1},
+ winline={},
+ winnr={args={0, 1}},
+ winrestcmd={},
+ winrestview={args=1},
+ winsaveview={},
+ winwidth={args=1},
+ wordcount={},
+ writefile={args={2, 3}},
+ xor={args=2},
+ },
+}
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 317e40e43a..51f20b7eac 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -17,15 +17,14 @@
# include "event/process.c.generated.h"
#endif
-// {SIGNAL}_TIMEOUT is the time (in nanoseconds) that a process has to cleanly
-// exit before we send SIGNAL to it
+// Time (ns) for a process to exit cleanly before we send TERM/KILL.
#define TERM_TIMEOUT 1000000000
#define KILL_TIMEOUT (TERM_TIMEOUT * 2)
#define CLOSE_PROC_STREAM(proc, stream) \
do { \
if (proc->stream && !proc->stream->closed) { \
- stream_close(proc->stream, NULL); \
+ stream_close(proc->stream, NULL, NULL); \
} \
} while (0)
@@ -78,10 +77,8 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
return false;
}
- void *data = proc->data;
-
if (proc->in) {
- stream_init(NULL, proc->in, -1, (uv_stream_t *)&proc->in->uv.pipe, data);
+ stream_init(NULL, proc->in, -1, (uv_stream_t *)&proc->in->uv.pipe);
proc->in->events = proc->events;
proc->in->internal_data = proc;
proc->in->internal_close_cb = on_process_stream_close;
@@ -89,7 +86,7 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
}
if (proc->out) {
- stream_init(NULL, proc->out, -1, (uv_stream_t *)&proc->out->uv.pipe, data);
+ stream_init(NULL, proc->out, -1, (uv_stream_t *)&proc->out->uv.pipe);
proc->out->events = proc->events;
proc->out->internal_data = proc;
proc->out->internal_close_cb = on_process_stream_close;
@@ -97,7 +94,7 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
}
if (proc->err) {
- stream_init(NULL, proc->err, -1, (uv_stream_t *)&proc->err->uv.pipe, data);
+ stream_init(NULL, proc->err, -1, (uv_stream_t *)&proc->err->uv.pipe);
proc->err->events = proc->events;
proc->err->internal_data = proc;
proc->err->internal_close_cb = on_process_stream_close;
@@ -373,7 +370,7 @@ static void flush_stream(Process *proc, Stream *stream)
if (stream->read_cb) {
// Stream callback could miss EOF handling if a child keeps the stream
// open.
- stream->read_cb(stream, stream->buffer, 0, stream->data, true);
+ stream->read_cb(stream, stream->buffer, 0, stream->cb_data, true);
}
break;
}
diff --git a/src/nvim/event/rstream.c b/src/nvim/event/rstream.c
index a520143064..5126dfd84e 100644
--- a/src/nvim/event/rstream.c
+++ b/src/nvim/event/rstream.c
@@ -17,21 +17,19 @@
# include "event/rstream.c.generated.h"
#endif
-void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize,
- void *data)
+void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize)
FUNC_ATTR_NONNULL_ARG(1)
FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(loop, stream, fd, NULL, data);
+ stream_init(loop, stream, fd, NULL);
rstream_init(stream, bufsize);
}
-void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize,
- void *data)
+void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize)
FUNC_ATTR_NONNULL_ARG(1)
FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(NULL, stream, -1, uvstream, data);
+ stream_init(NULL, stream, -1, uvstream);
rstream_init(stream, bufsize);
}
@@ -48,10 +46,11 @@ void rstream_init(Stream *stream, size_t bufsize)
/// Starts watching for events from a `Stream` instance.
///
/// @param stream The `Stream` instance
-void rstream_start(Stream *stream, stream_read_cb cb)
+void rstream_start(Stream *stream, stream_read_cb cb, void *data)
FUNC_ATTR_NONNULL_ARG(1)
{
stream->read_cb = cb;
+ stream->cb_data = data;
if (stream->uvstream) {
uv_read_start(stream->uvstream, alloc_cb, read_cb);
} else {
@@ -81,7 +80,7 @@ static void on_rbuffer_nonfull(RBuffer *buf, void *data)
{
Stream *stream = data;
assert(stream->read_cb);
- rstream_start(stream, stream->read_cb);
+ rstream_start(stream, stream->read_cb, stream->cb_data);
}
// Callbacks used by libuv
@@ -179,7 +178,7 @@ static void read_event(void **argv)
if (stream->read_cb) {
size_t count = (uintptr_t)argv[1];
bool eof = (uintptr_t)argv[2];
- stream->read_cb(stream, stream->buffer, count, stream->data, eof);
+ stream->read_cb(stream, stream->buffer, count, stream->cb_data, eof);
}
stream->pending_reqs--;
if (stream->closed && !stream->pending_reqs) {
diff --git a/src/nvim/event/socket.c b/src/nvim/event/socket.c
index cdaf40849b..8f9327f3d4 100644
--- a/src/nvim/event/socket.c
+++ b/src/nvim/event/socket.c
@@ -113,7 +113,7 @@ int socket_watcher_start(SocketWatcher *watcher, int backlog, socket_cb cb)
return 0;
}
-int socket_watcher_accept(SocketWatcher *watcher, Stream *stream, void *data)
+int socket_watcher_accept(SocketWatcher *watcher, Stream *stream)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
uv_stream_t *client;
@@ -133,7 +133,7 @@ int socket_watcher_accept(SocketWatcher *watcher, Stream *stream, void *data)
return result;
}
- stream_init(NULL, stream, -1, client, data);
+ stream_init(NULL, stream, -1, client);
return 0;
}
diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c
index 33404158cf..26083c20f4 100644
--- a/src/nvim/event/stream.c
+++ b/src/nvim/event/stream.c
@@ -30,8 +30,7 @@ int stream_set_blocking(int fd, bool blocking)
return retval;
}
-void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
- void *data)
+void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream)
FUNC_ATTR_NONNULL_ARG(2)
{
stream->uvstream = uvstream;
@@ -58,7 +57,6 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
stream->uvstream->data = stream;
}
- stream->data = data;
stream->internal_data = NULL;
stream->fpos = 0;
stream->curmem = 0;
@@ -74,12 +72,13 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
stream->num_bytes = 0;
}
-void stream_close(Stream *stream, stream_close_cb on_stream_close)
+void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
FUNC_ATTR_NONNULL_ARG(1)
{
assert(!stream->closed);
stream->closed = true;
stream->close_cb = on_stream_close;
+ stream->close_cb_data = data;
if (!stream->pending_reqs) {
stream_close_handle(stream);
@@ -103,7 +102,7 @@ static void close_cb(uv_handle_t *handle)
rbuffer_free(stream->buffer);
}
if (stream->close_cb) {
- stream->close_cb(stream, stream->data);
+ stream->close_cb(stream, stream->close_cb_data);
}
if (stream->internal_close_cb) {
stream->internal_close_cb(stream, stream->internal_data);
diff --git a/src/nvim/event/stream.h b/src/nvim/event/stream.h
index ad4e24775b..a176fac1c0 100644
--- a/src/nvim/event/stream.h
+++ b/src/nvim/event/stream.h
@@ -44,13 +44,14 @@ struct stream {
uv_file fd;
stream_read_cb read_cb;
stream_write_cb write_cb;
+ void *cb_data;
stream_close_cb close_cb, internal_close_cb;
+ void *close_cb_data, *internal_data;
size_t fpos;
size_t curmem;
size_t maxmem;
size_t pending_reqs;
size_t num_bytes;
- void *data, *internal_data;
bool closed;
Queue *events;
};
diff --git a/src/nvim/event/wstream.c b/src/nvim/event/wstream.c
index 8028e35e6b..fc7aad8eb9 100644
--- a/src/nvim/event/wstream.c
+++ b/src/nvim/event/wstream.c
@@ -22,19 +22,17 @@ typedef struct {
# include "event/wstream.c.generated.h"
#endif
-void wstream_init_fd(Loop *loop, Stream *stream, int fd, size_t maxmem,
- void *data)
+void wstream_init_fd(Loop *loop, Stream *stream, int fd, size_t maxmem)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(loop, stream, fd, NULL, data);
+ stream_init(loop, stream, fd, NULL);
wstream_init(stream, maxmem);
}
-void wstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t maxmem,
- void *data)
+void wstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t maxmem)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(NULL, stream, -1, uvstream, data);
+ stream_init(NULL, stream, -1, uvstream);
wstream_init(stream, maxmem);
}
@@ -54,10 +52,11 @@ void wstream_init(Stream *stream, size_t maxmem)
///
/// @param stream The `Stream` instance
/// @param cb The callback
-void wstream_set_write_cb(Stream *stream, stream_write_cb cb)
- FUNC_ATTR_NONNULL_ALL
+void wstream_set_write_cb(Stream *stream, stream_write_cb cb, void *data)
+ FUNC_ATTR_NONNULL_ARG(1, 2)
{
stream->write_cb = cb;
+ stream->cb_data = data;
}
/// Queues data for writing to the backing file descriptor of a `Stream`
@@ -138,7 +137,7 @@ static void write_cb(uv_write_t *req, int status)
wstream_release_wbuffer(data->buffer);
if (data->stream->write_cb) {
- data->stream->write_cb(data->stream, data->stream->data, status);
+ data->stream->write_cb(data->stream, data->stream->cb_data, status);
}
data->stream->pending_reqs--;
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 5de9ac0523..c36c3a7b0e 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -64,6 +64,24 @@
*/
typedef struct sign sign_T;
+/// Case matching style to use for :substitute
+typedef enum {
+ kSubHonorOptions = 0, ///< Honor the user's 'ignorecase'/'smartcase' options
+ kSubIgnoreCase, ///< Ignore case of the search
+ kSubMatchCase, ///< Match case of the search
+} SubIgnoreType;
+
+/// Flags kept between calls to :substitute.
+typedef struct {
+ bool do_all; ///< do multiple substitutions per line
+ bool do_ask; ///< ask for confirmation
+ bool do_count; ///< count only
+ bool do_error; ///< if false, ignore errors
+ bool do_print; ///< print last line with subs
+ bool do_list; ///< list last line with subs
+ bool do_number; ///< list last line with line nr
+ SubIgnoreType do_ic; ///< ignore case flag
+} subflags_T;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ex_cmds.c.generated.h"
@@ -1693,11 +1711,11 @@ int do_write(exarg_T *eap)
goto theend;
}
- /* If 'filetype' was empty try detecting it now. */
+ // If 'filetype' was empty try detecting it now.
if (*curbuf->b_p_ft == NUL) {
- if (au_has_group((char_u *)"filetypedetect"))
- (void)do_doautocmd((char_u *)"filetypedetect BufRead",
- TRUE);
+ if (au_has_group((char_u *)"filetypedetect")) {
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", true, NULL);
+ }
do_modelines(0);
}
@@ -2064,6 +2082,7 @@ do_ecmd (
char_u *command = NULL;
int did_get_winopts = FALSE;
int readfile_flags = 0;
+ bool did_inc_redrawing_disabled = false;
if (eap != NULL)
command = eap->do_ecmd_cmd;
@@ -2300,6 +2319,11 @@ do_ecmd (
oldbuf = (flags & ECMD_OLDBUF);
}
+ // Don't redraw until the cursor is in the right line, otherwise
+ // autocommands may cause ml_get errors.
+ RedrawingDisabled++;
+ did_inc_redrawing_disabled = true;
+
buf = curbuf;
if ((flags & ECMD_SET_HELP) || keep_help_flag) {
prepare_help_buffer();
@@ -2376,8 +2400,6 @@ do_ecmd (
/*
* If we get here we are sure to start editing
*/
- /* don't redraw until the cursor is in the right line */
- ++RedrawingDisabled;
/* Assume success now */
retval = OK;
@@ -2529,7 +2551,8 @@ do_ecmd (
if (curbuf->b_kmap_state & KEYMAP_INIT)
(void)keymap_init();
- --RedrawingDisabled;
+ RedrawingDisabled--;
+ did_inc_redrawing_disabled = false;
if (!skip_redraw) {
n = p_so;
if (topline == 0 && command == NULL)
@@ -2548,8 +2571,12 @@ do_ecmd (
theend:
- if (did_set_swapcommand)
+ if (did_inc_redrawing_disabled) {
+ RedrawingDisabled--;
+ }
+ if (did_set_swapcommand) {
set_vim_var_string(VV_SWAPCOMMAND, NULL, -1);
+ }
xfree(free_fname);
return retval;
}
@@ -2901,6 +2928,159 @@ void sub_set_replacement(SubReplacementString sub)
old_sub = sub;
}
+/// Recognize ":%s/\n//" and turn it into a join command, which is much
+/// more efficient.
+///
+/// @param[in] eap Ex arguments
+/// @param[in] pat Search pattern
+/// @param[in] sub Replacement string
+/// @param[in] cmd Command from :s_flags
+///
+/// @returns true if :substitute can be replaced with a join command
+static bool sub_joining_lines(exarg_T *eap, char_u *pat,
+ char_u *sub, char_u *cmd)
+ FUNC_ATTR_NONNULL_ARG(1, 3, 4)
+{
+ // TODO(vim): find a generic solution to make line-joining operations more
+ // efficient, avoid allocating a string that grows in size.
+ if (pat != NULL
+ && strcmp((const char *)pat, "\\n") == 0
+ && *sub == NUL
+ && (*cmd == NUL || (cmd[1] == NUL
+ && (*cmd == 'g'
+ || *cmd == 'l'
+ || *cmd == 'p'
+ || *cmd == '#')))) {
+ curwin->w_cursor.lnum = eap->line1;
+ if (*cmd == 'l') {
+ eap->flags = EXFLAG_LIST;
+ } else if (*cmd == '#') {
+ eap->flags = EXFLAG_NR;
+ } else if (*cmd == 'p') {
+ eap->flags = EXFLAG_PRINT;
+ }
+
+ // The number of lines joined is the number of lines in the range
+ linenr_T joined_lines_count = eap->line2 - eap->line1 + 1
+ // plus one extra line if not at the end of file.
+ + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
+ if (joined_lines_count > 1) {
+ do_join(joined_lines_count, FALSE, TRUE, FALSE, true);
+ sub_nsubs = joined_lines_count - 1;
+ sub_nlines = 1;
+ do_sub_msg(false);
+ ex_may_print(eap);
+ }
+
+ if (!cmdmod.keeppatterns) {
+ save_re_pat(RE_SUBST, pat, p_magic);
+ }
+ add_to_history(HIST_SEARCH, pat, TRUE, NUL);
+
+ return true;
+ }
+
+ return false;
+}
+
+/// Allocate memory to store the replacement text for :substitute.
+///
+/// Slightly more memory that is strictly necessary is allocated to reduce the
+/// frequency of memory (re)allocation.
+///
+/// @param[in,out] new_start pointer to the memory for the replacement text
+/// @param[in] needed_len amount of memory needed
+///
+/// @returns pointer to the end of the allocated memory
+static char_u *sub_grow_buf(char_u **new_start, int needed_len)
+ FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_RET
+{
+ int new_start_len = 0;
+ char_u *new_end;
+ if (*new_start == NULL) {
+ // Get some space for a temporary buffer to do the
+ // substitution into (and some extra space to avoid
+ // too many calls to xmalloc()/free()).
+ new_start_len = needed_len + 50;
+ *new_start = xmalloc(new_start_len);
+ **new_start = NUL;
+ new_end = *new_start;
+ } else {
+ // Check if the temporary buffer is long enough to do the
+ // substitution into. If not, make it larger (with a bit
+ // extra to avoid too many calls to xmalloc()/free()).
+ size_t len = STRLEN(*new_start);
+ needed_len += len;
+ if (needed_len > new_start_len) {
+ new_start_len = needed_len + 50;
+ *new_start = xrealloc(*new_start, new_start_len);
+ }
+ new_end = *new_start + len;
+ }
+
+ return new_end;
+}
+
+/// Parse cmd string for :substitute's {flags} and update subflags accordingly
+///
+/// @param[in] cmd command string
+/// @param[in,out] subflags current flags defined for the :substitute command
+/// @param[in,out] which_pat pattern type from which to get default search
+///
+/// @returns pointer to the end of the flags, which may be the end of the string
+static char_u *sub_parse_flags(char_u *cmd, subflags_T *subflags,
+ int *which_pat)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
+{
+ // Find trailing options. When '&' is used, keep old options.
+ if (*cmd == '&') {
+ cmd++;
+ } else {
+ subflags->do_all = p_gd;
+ subflags->do_ask = false;
+ subflags->do_error = true;
+ subflags->do_print = false;
+ subflags->do_count = false;
+ subflags->do_number = false;
+ subflags->do_ic = kSubHonorOptions;
+ }
+ while (*cmd) {
+ // Note that 'g' and 'c' are always inverted.
+ // 'r' is never inverted.
+ if (*cmd == 'g') {
+ subflags->do_all = !subflags->do_all;
+ } else if (*cmd == 'c') {
+ subflags->do_ask = !subflags->do_ask;
+ } else if (*cmd == 'n') {
+ subflags->do_count = true;
+ } else if (*cmd == 'e') {
+ subflags->do_error = !subflags->do_error;
+ } else if (*cmd == 'r') { // use last used regexp
+ *which_pat = RE_LAST;
+ } else if (*cmd == 'p') {
+ subflags->do_print = true;
+ } else if (*cmd == '#') {
+ subflags->do_print = true;
+ subflags->do_number = true;
+ } else if (*cmd == 'l') {
+ subflags->do_print = true;
+ subflags->do_list = true;
+ } else if (*cmd == 'i') { // ignore case
+ subflags->do_ic = kSubIgnoreCase;
+ } else if (*cmd == 'I') { // don't ignore case
+ subflags->do_ic = kSubMatchCase;
+ } else {
+ break;
+ }
+ cmd++;
+ }
+ if (subflags->do_count) {
+ subflags->do_ask = false;
+ }
+
+ return cmd;
+}
+
/* do_sub()
*
* Perform a substitution from line eap->line1 to line eap->line2 using the
@@ -2912,41 +3092,35 @@ void sub_set_replacement(SubReplacementString sub)
*/
void do_sub(exarg_T *eap)
{
- linenr_T lnum;
long i = 0;
regmmatch_T regmatch;
- static int do_all = FALSE; /* do multiple substitutions per line */
- static int do_ask = FALSE; /* ask for confirmation */
- static bool do_count = false; /* count only */
- static int do_error = TRUE; /* if false, ignore errors */
- static int do_print = FALSE; /* print last line with subs. */
- static int do_list = FALSE; /* list last line with subs. */
- static int do_number = FALSE; /* list last line with line nr*/
- static int do_ic = 0; /* ignore case flag */
- int save_do_all; // remember user specified 'g' flag
- int save_do_ask; // remember user specified 'c' flag
- char_u *pat = NULL, *sub = NULL; /* init for GCC */
+ static subflags_T subflags = {
+ .do_all = false,
+ .do_ask = false,
+ .do_count = false,
+ .do_error = true,
+ .do_print = false,
+ .do_list = false,
+ .do_number = false,
+ .do_ic = kSubHonorOptions
+ };
+ char_u *pat = NULL, *sub = NULL; // init for GCC
int delimiter;
int sublen;
- int got_quit = FALSE;
- int got_match = FALSE;
- int temp;
+ int got_quit = false;
+ int got_match = false;
int which_pat;
- char_u *cmd;
- int save_State;
- linenr_T first_line = 0; /* first changed line */
- linenr_T last_line= 0; /* below last changed line AFTER the
- * change */
+ char_u *cmd = eap->arg;
+ linenr_T first_line = 0; // first changed line
+ linenr_T last_line= 0; // below last changed line AFTER the
+ // change
linenr_T old_line_count = curbuf->b_ml.ml_line_count;
- linenr_T line2;
- long nmatch; /* number of lines in match */
- char_u *sub_firstline; /* allocated copy of first sub line */
- int endcolumn = FALSE; /* cursor in last column when done */
+ char_u *sub_firstline; // allocated copy of first sub line
+ bool endcolumn = false; // cursor in last column when done
pos_T old_cursor = curwin->w_cursor;
int start_nsubs;
int save_ma = 0;
- cmd = eap->arg;
if (!global_busy) {
sub_nsubs = 0;
sub_nlines = 0;
@@ -3028,104 +3202,20 @@ void do_sub(exarg_T *eap)
endcolumn = (curwin->w_curswant == MAXCOL);
}
- // Recognize ":%s/\n//" and turn it into a join command, which is much
- // more efficient.
- // TODO: find a generic solution to make line-joining operations more
- // efficient, avoid allocating a string that grows in size.
- if (pat != NULL
- && strcmp((const char *)pat, "\\n") == 0
- && *sub == NUL
- && (*cmd == NUL || (cmd[1] == NUL
- && (*cmd == 'g'
- || *cmd == 'l'
- || *cmd == 'p'
- || *cmd == '#')))) {
- curwin->w_cursor.lnum = eap->line1;
- if (*cmd == 'l') {
- eap->flags = EXFLAG_LIST;
- } else if (*cmd == '#') {
- eap->flags = EXFLAG_NR;
- } else if (*cmd == 'p') {
- eap->flags = EXFLAG_PRINT;
- }
-
- // The number of lines joined is the number of lines in the range
- linenr_T joined_lines_count = eap->line2 - eap->line1 + 1
- // plus one extra line if not at the end of file.
- + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
- if (joined_lines_count > 1) {
- do_join(joined_lines_count, FALSE, TRUE, FALSE, true);
- sub_nsubs = joined_lines_count - 1;
- sub_nlines = 1;
- do_sub_msg(false);
- ex_may_print(eap);
- }
-
- if (!cmdmod.keeppatterns) {
- save_re_pat(RE_SUBST, pat, p_magic);
- }
- add_to_history(HIST_SEARCH, pat, TRUE, NUL);
-
+ if (sub_joining_lines(eap, pat, sub, cmd)) {
return;
}
- /*
- * Find trailing options. When '&' is used, keep old options.
- */
- if (*cmd == '&') {
- ++cmd;
- } else {
- // default is global on
- do_all = p_gd ? TRUE : FALSE;
-
- do_ask = FALSE;
- do_error = TRUE;
- do_print = FALSE;
- do_count = false;
- do_number = FALSE;
- do_ic = 0;
- }
- while (*cmd) {
- // Note that 'g' and 'c' are always inverted.
- // 'r' is never inverted.
- if (*cmd == 'g')
- do_all = !do_all;
- else if (*cmd == 'c')
- do_ask = !do_ask;
- else if (*cmd == 'n')
- do_count = true;
- else if (*cmd == 'e')
- do_error = !do_error;
- else if (*cmd == 'r') /* use last used regexp */
- which_pat = RE_LAST;
- else if (*cmd == 'p')
- do_print = TRUE;
- else if (*cmd == '#') {
- do_print = TRUE;
- do_number = TRUE;
- } else if (*cmd == 'l') {
- do_print = TRUE;
- do_list = TRUE;
- } else if (*cmd == 'i') /* ignore case */
- do_ic = 'i';
- else if (*cmd == 'I') /* don't ignore case */
- do_ic = 'I';
- else
- break;
- ++cmd;
- }
- if (do_count) {
- do_ask = FALSE;
- }
+ cmd = sub_parse_flags(cmd, &subflags, &which_pat);
- save_do_all = do_all;
- save_do_ask = do_ask;
+ bool save_do_all = subflags.do_all; // remember user specified 'g' flag
+ bool save_do_ask = subflags.do_ask; // remember user specified 'c' flag
// check for a trailing count
cmd = skipwhite(cmd);
if (ascii_isdigit(*cmd)) {
i = getdigits_long(&cmd);
- if (i <= 0 && !eap->skip && do_error) {
+ if (i <= 0 && !eap->skip && subflags.do_error) {
EMSG(_(e_zerocount));
return;
}
@@ -3150,24 +3240,25 @@ void do_sub(exarg_T *eap)
if (eap->skip) /* not executing commands, only parsing */
return;
- if (!do_count && !MODIFIABLE(curbuf)) {
- /* Substitution is not allowed in non-'modifiable' buffer */
+ if (!subflags.do_count && !MODIFIABLE(curbuf)) {
+ // Substitution is not allowed in non-'modifiable' buffer
EMSG(_(e_modifiable));
return;
}
- if (search_regcomp(pat, RE_SUBST, which_pat, SEARCH_HIS,
- &regmatch) == FAIL) {
- if (do_error)
+ if (search_regcomp(pat, RE_SUBST, which_pat, SEARCH_HIS, &regmatch) == FAIL) {
+ if (subflags.do_error) {
EMSG(_(e_invcmd));
+ }
return;
}
- /* the 'i' or 'I' flag overrules 'ignorecase' and 'smartcase' */
- if (do_ic == 'i')
- regmatch.rmm_ic = TRUE;
- else if (do_ic == 'I')
- regmatch.rmm_ic = FALSE;
+ // the 'i' or 'I' flag overrules 'ignorecase' and 'smartcase'
+ if (subflags.do_ic == kSubIgnoreCase) {
+ regmatch.rmm_ic = true;
+ } else if (subflags.do_ic == kSubMatchCase) {
+ regmatch.rmm_ic = false;
+ }
sub_firstline = NULL;
@@ -3179,29 +3270,25 @@ void do_sub(exarg_T *eap)
if (!(sub[0] == '\\' && sub[1] == '='))
sub = regtilde(sub, p_magic);
- /*
- * Check for a match on each line.
- */
- line2 = eap->line2;
- for (lnum = eap->line1; lnum <= line2 && !(got_quit
- || aborting()
- ); ++lnum) {
- nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
- (colnr_T)0, NULL);
+ // Check for a match on each line.
+ linenr_T line2 = eap->line2;
+ for (linenr_T lnum = eap->line1;
+ lnum <= line2 && !(got_quit || aborting());
+ lnum++) {
+ long nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+ (colnr_T)0, NULL);
if (nmatch) {
colnr_T copycol;
colnr_T matchcol;
colnr_T prev_matchcol = MAXCOL;
char_u *new_end, *new_start = NULL;
- unsigned new_start_len = 0;
char_u *p1;
int did_sub = FALSE;
int lastone;
- int len, copy_len, needed_len;
- long nmatch_tl = 0; /* nr of lines matched below lnum */
- int do_again; /* do it again after joining lines */
- int skip_match = FALSE;
- linenr_T sub_firstlnum; /* nr of first sub line */
+ long nmatch_tl = 0; // nr of lines matched below lnum
+ int do_again; // do it again after joining lines
+ int skip_match = false;
+ linenr_T sub_firstlnum; // nr of first sub line
/*
* The new text is build up step by step, to avoid too much
@@ -3241,8 +3328,7 @@ void do_sub(exarg_T *eap)
* accordingly.
*
* The new text is built up in new_start[]. It has some extra
- * room to avoid using xmalloc()/free() too often. new_start_len is
- * the length of the allocated memory at new_start.
+ * room to avoid using xmalloc()/free() too often.
*
* Make a copy of the old line, so it won't be taken away when
* updating the screen or handling a multi-line match. The "old_"
@@ -3261,9 +3347,9 @@ void do_sub(exarg_T *eap)
/*
* Loop until nothing more to replace in this line.
* 1. Handle match with empty string.
- * 2. If do_ask is set, ask for confirmation.
+ * 2. If subflags.do_ask is set, ask for confirmation.
* 3. substitute the string.
- * 4. if do_all is set, find next match
+ * 4. if subflags.do_all is set, find next match
* 5. break if there isn't another match in this line
*/
for (;; ) {
@@ -3314,15 +3400,13 @@ void do_sub(exarg_T *eap)
matchcol = regmatch.endpos[0].col;
prev_matchcol = matchcol;
- /*
- * 2. If do_count is set only increase the counter.
- * If do_ask is set, ask for confirmation.
- */
- if (do_count) {
- /* For a multi-line match, put matchcol at the NUL at
- * the end of the line and set nmatch to one, so that
- * we continue looking for a match on the next line.
- * Avoids that ":s/\nB\@=//gc" get stuck. */
+ // 2. If subflags.do_count is set only increase the counter.
+ // If do_ask is set, ask for confirmation.
+ if (subflags.do_count) {
+ // For a multi-line match, put matchcol at the NUL at
+ // the end of the line and set nmatch to one, so that
+ // we continue looking for a match on the next line.
+ // Avoids that ":s/\nB\@=//gc" get stuck.
if (nmatch > 1) {
matchcol = (colnr_T)STRLEN(sub_firstline);
nmatch = 1;
@@ -3336,12 +3420,12 @@ void do_sub(exarg_T *eap)
goto skip;
}
- if (do_ask) {
+ if (subflags.do_ask) {
int typed = 0;
/* change State to CONFIRM, so that the mouse works
* properly */
- save_State = State;
+ int save_State = State;
State = CONFIRM;
setmouse(); /* disable mouse in xterm */
curwin->w_cursor.col = regmatch.startpos[0].col;
@@ -3354,17 +3438,17 @@ void do_sub(exarg_T *eap)
/*
* Loop until 'y', 'n', 'q', CTRL-E or CTRL-Y typed.
*/
- while (do_ask) {
+ while (subflags.do_ask) {
if (exmode_active) {
char_u *resp;
colnr_T sc, ec;
- print_line_no_prefix(lnum, do_number, do_list);
+ print_line_no_prefix(lnum, subflags.do_number, subflags.do_list);
getvcol(curwin, &curwin->w_cursor, &sc, NULL, NULL);
curwin->w_cursor.col = regmatch.endpos[0].col - 1;
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &ec);
- if (do_number || curwin->w_p_nu) {
+ if (subflags.do_number || curwin->w_p_nu) {
int numw = number_width(curwin) + 1;
sc += numw;
ec += numw;
@@ -3388,7 +3472,7 @@ void do_sub(exarg_T *eap)
curwin->w_p_fen = FALSE;
/* Invert the matched string.
* Remove the inversion afterwards. */
- temp = RedrawingDisabled;
+ int temp = RedrawingDisabled;
RedrawingDisabled = 0;
if (new_start != NULL) {
@@ -3468,13 +3552,13 @@ void do_sub(exarg_T *eap)
if (typed == 'y')
break;
if (typed == 'l') {
- /* last: replace and then stop */
- do_all = FALSE;
+ // last: replace and then stop
+ subflags.do_all = false;
line2 = lnum;
break;
}
if (typed == 'a') {
- do_ask = FALSE;
+ subflags.do_ask = false;
break;
}
if (typed == Ctrl_E)
@@ -3510,19 +3594,26 @@ void do_sub(exarg_T *eap)
/*
* 3. substitute the string.
*/
- if (do_count) {
- /* prevent accidentally changing the buffer by a function */
+ if (subflags.do_count) {
+ // prevent accidentally changing the buffer by a function
save_ma = curbuf->b_p_ma;
- curbuf->b_p_ma = FALSE;
+ curbuf->b_p_ma = false;
sandbox++;
}
- /* get length of substitution part */
+ // Save flags for recursion. They can change for e.g.
+ // :s/^/\=execute("s#^##gn")
+ subflags_T subflags_save = subflags;
+ // get length of substitution part
sublen = vim_regsub_multi(&regmatch,
- sub_firstlnum - regmatch.startpos[0].lnum,
- sub, sub_firstline, FALSE, p_magic, TRUE);
- if (do_count) {
+ sub_firstlnum - regmatch.startpos[0].lnum,
+ sub, sub_firstline, false, p_magic, true);
+ // Don't keep flags set by a recursive call
+ subflags = subflags_save;
+ if (subflags.do_count) {
curbuf->b_p_ma = save_ma;
- sandbox--;
+ if (sandbox > 0) {
+ sandbox--;
+ }
goto skip;
}
@@ -3545,33 +3636,10 @@ void do_sub(exarg_T *eap)
p1 = ml_get(sub_firstlnum + nmatch - 1);
nmatch_tl += nmatch - 1;
}
- copy_len = regmatch.startpos[0].col - copycol;
- needed_len = copy_len + ((unsigned)STRLEN(p1)
- - regmatch.endpos[0].col) + sublen + 1;
- if (new_start == NULL) {
- /*
- * Get some space for a temporary buffer to do the
- * substitution into (and some extra space to avoid
- * too many calls to xmalloc()/free()).
- */
- new_start_len = needed_len + 50;
- new_start = xmalloc(new_start_len);
- *new_start = NUL;
- new_end = new_start;
- } else {
- /*
- * Check if the temporary buffer is long enough to do the
- * substitution into. If not, make it larger (with a bit
- * extra to avoid too many calls to xmalloc()/free()).
- */
- len = (unsigned)STRLEN(new_start);
- needed_len += len;
- if (needed_len > (int)new_start_len) {
- new_start_len = needed_len + 50;
- new_start = xrealloc(new_start, new_start_len);
- }
- new_end = new_start + len;
- }
+ size_t copy_len = regmatch.startpos[0].col - copycol;
+ new_end = sub_grow_buf(&new_start,
+ copy_len + (STRLEN(p1) - regmatch.endpos[0].col)
+ + sublen + 1);
/*
* copy the text up to the part that matched
@@ -3595,11 +3663,12 @@ void do_sub(exarg_T *eap)
sub_firstlnum += nmatch - 1;
xfree(sub_firstline);
sub_firstline = vim_strsave(ml_get(sub_firstlnum));
- /* When going beyond the last line, stop substituting. */
- if (sub_firstlnum <= line2)
- do_again = TRUE;
- else
- do_all = FALSE;
+ // When going beyond the last line, stop substituting.
+ if (sub_firstlnum <= line2) {
+ do_again = true;
+ } else {
+ subflags.do_all = false;
+ }
}
/* Remember next character to be copied. */
@@ -3630,11 +3699,12 @@ void do_sub(exarg_T *eap)
ml_append(lnum - 1, new_start,
(colnr_T)(p1 - new_start + 1), FALSE);
mark_adjust(lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
- if (do_ask)
+ if (subflags.do_ask) {
appended_lines(lnum - 1, 1L);
- else {
- if (first_line == 0)
+ } else {
+ if (first_line == 0) {
first_line = lnum;
+ }
last_line = lnum + 1;
}
/* All line numbers increase. */
@@ -3651,12 +3721,10 @@ void do_sub(exarg_T *eap)
p1 += (*mb_ptr2len)(p1) - 1;
}
- /*
- * 4. If do_all is set, find next match.
- * Prevent endless loop with patterns that match empty
- * strings, e.g. :s/$/pat/g or :s/[a-z]* /(&)/g.
- * But ":s/\n/#/" is OK.
- */
+ // 4. If subflags.do_all is set, find next match.
+ // Prevent endless loop with patterns that match empty
+ // strings, e.g. :s/$/pat/g or :s/[a-z]* /(&)/g.
+ // But ":s/\n/#/" is OK.
skip:
/* We already know that we did the last subst when we are at
* the end of the line, except that a pattern like
@@ -3667,7 +3735,7 @@ skip:
|| got_int
|| got_quit
|| lnum > line2
- || !(do_all || do_again)
+ || !(subflags.do_all || do_again)
|| (sub_firstline[matchcol] == NUL && nmatch <= 1
&& !re_multiline(regmatch.regprog)));
nmatch = -1;
@@ -3717,21 +3785,23 @@ skip:
for (i = 0; i < nmatch_tl; ++i)
ml_delete(lnum, (int)FALSE);
mark_adjust(lnum, lnum + nmatch_tl - 1,
- (long)MAXLNUM, -nmatch_tl);
- if (do_ask)
+ (long)MAXLNUM, -nmatch_tl);
+ if (subflags.do_ask) {
deleted_lines(lnum, nmatch_tl);
- --lnum;
- line2 -= nmatch_tl; /* nr of lines decreases */
+ }
+ lnum--;
+ line2 -= nmatch_tl; // nr of lines decreases
nmatch_tl = 0;
}
/* When asking, undo is saved each time, must also set
* changed flag each time. */
- if (do_ask)
+ if (subflags.do_ask) {
changed_bytes(lnum, 0);
- else {
- if (first_line == 0)
+ } else {
+ if (first_line == 0) {
first_line = lnum;
+ }
last_line = lnum + 1;
}
@@ -3784,9 +3854,10 @@ skip:
xfree(sub_firstline); /* may have to free allocated copy of the line */
- /* ":s/pat//n" doesn't move the cursor */
- if (do_count)
+ // ":s/pat//n" doesn't move the cursor
+ if (subflags.do_count) {
curwin->w_cursor = old_cursor;
+ }
if (sub_nsubs > start_nsubs) {
/* Set the '[ and '] marks. */
@@ -3795,28 +3866,37 @@ skip:
curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
if (!global_busy) {
- if (!do_ask) { /* when interactive leave cursor on the match */
- if (endcolumn)
+ // when interactive leave cursor on the match
+ if (!subflags.do_ask) {
+ if (endcolumn) {
coladvance((colnr_T)MAXCOL);
- else
+ } else {
beginline(BL_WHITE | BL_FIX);
+ }
}
- if (!do_sub_msg(do_count) && do_ask)
+ if (!do_sub_msg(subflags.do_count) && subflags.do_ask) {
MSG("");
- } else
- global_need_beginline = TRUE;
- if (do_print)
- print_line(curwin->w_cursor.lnum, do_number, do_list);
+ }
+ } else {
+ global_need_beginline = true;
+ }
+ if (subflags.do_print) {
+ print_line(curwin->w_cursor.lnum, subflags.do_number, subflags.do_list);
+ }
} else if (!global_busy) {
- if (got_int) /* interrupted */
+ if (got_int) {
+ // interrupted
EMSG(_(e_interr));
- else if (got_match) /* did find something but nothing substituted */
+ } else if (got_match) {
+ // did find something but nothing substituted
MSG("");
- else if (do_error) /* nothing found */
+ } else if (subflags.do_error) {
+ // nothing found
EMSG2(_(e_patnotf2), get_search_pat());
+ }
}
- if (do_ask && hasAnyFolding(curwin)) {
+ if (subflags.do_ask && hasAnyFolding(curwin)) {
// Cursor position may require updating
changed_window_setting();
}
@@ -3824,9 +3904,9 @@ skip:
vim_regfree(regmatch.regprog);
// Restore the flag values, they can be used for ":&&".
- do_all = save_do_all;
- do_ask = save_do_ask;
-}
+ subflags.do_all = save_do_all;
+ subflags.do_ask = save_do_ask;
+} // NOLINT(readability/fn_size)
/*
* Give message for number of substitutions.
@@ -3982,9 +4062,7 @@ void ex_global(exarg_T *eap)
smsg(_("Pattern not found: %s"), pat);
}
} else {
- start_global_changes();
global_exe(cmd);
- end_global_changes();
}
ml_clearmarked(); /* clear rest of the marks */
vim_regfree(regmatch.regprog);
@@ -4494,12 +4572,15 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la
break;
}
- /*
- * If tag starts with ', toss everything after a second '. Fixes
- * CTRL-] on 'option'. (would include the trailing '.').
- */
- if (*s == '\'' && s > arg && *arg == '\'')
+ // If tag starts with ', toss everything after a second '. Fixes
+ // CTRL-] on 'option'. (would include the trailing '.').
+ if (*s == '\'' && s > arg && *arg == '\'') {
break;
+ }
+ // Also '{' and '}'. Fixes CTRL-] on '{address}'.
+ if (*s == '}' && s > arg && *arg == '{') {
+ break;
+ }
}
*d = NUL;
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 6d24ba91f2..f68663c60c 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -27,7 +27,6 @@
#include "nvim/mbyte.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
#include "nvim/move.h"
@@ -1983,8 +1982,6 @@ void ex_listdo(exarg_T *eap)
save_ei = au_event_disable(",Syntax");
}
- start_global_changes();
-
if (eap->cmdidx == CMD_windo
|| eap->cmdidx == CMD_tabdo
|| P_HID(curbuf)
@@ -2181,7 +2178,6 @@ void ex_listdo(exarg_T *eap)
apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
curbuf->b_fname, true, curbuf);
}
- end_global_changes();
}
/// Add files[count] to the arglist of the current window after arg "after".
diff --git a/src/nvim/ex_cmds_defs.h b/src/nvim/ex_cmds_defs.h
index f46d1e6d47..8148eb5cee 100644
--- a/src/nvim/ex_cmds_defs.h
+++ b/src/nvim/ex_cmds_defs.h
@@ -126,57 +126,53 @@ struct exarg {
struct condstack *cstack; ///< condition stack for ":if" etc.
};
-#define FORCE_BIN 1 /* ":edit ++bin file" */
-#define FORCE_NOBIN 2 /* ":edit ++nobin file" */
-
-/* Values for "flags" */
-#define EXFLAG_LIST 0x01 /* 'l': list */
-#define EXFLAG_NR 0x02 /* '#': number */
-#define EXFLAG_PRINT 0x04 /* 'p': print */
-
-/*
- * used for completion on the command line
- */
-typedef struct expand {
- int xp_context; /* type of expansion */
- char_u *xp_pattern; /* start of item to expand */
- int xp_pattern_len; /* bytes in xp_pattern before cursor */
- char_u *xp_arg; /* completion function */
- int xp_scriptID; /* SID for completion function */
- int xp_backslash; /* one of the XP_BS_ values */
+#define FORCE_BIN 1 // ":edit ++bin file"
+#define FORCE_NOBIN 2 // ":edit ++nobin file"
+
+// Values for "flags"
+#define EXFLAG_LIST 0x01 // 'l': list
+#define EXFLAG_NR 0x02 // '#': number
+#define EXFLAG_PRINT 0x04 // 'p': print
+
+// used for completion on the command line
+struct expand {
+ int xp_context; // type of expansion
+ char_u *xp_pattern; // start of item to expand
+ int xp_pattern_len; // bytes in xp_pattern before cursor
+ char_u *xp_arg; // completion function
+ int xp_scriptID; // SID for completion function
+ int xp_backslash; // one of the XP_BS_ values
#ifndef BACKSLASH_IN_FILENAME
- int xp_shell; /* TRUE for a shell command, more
- characters need to be escaped */
+ int xp_shell; // TRUE for a shell command, more
+ // characters need to be escaped
#endif
- int xp_numfiles; /* number of files found by
- file name completion */
- char_u **xp_files; /* list of files */
- char_u *xp_line; /* text being completed */
- int xp_col; /* cursor position in line */
-} expand_T;
-
-/* values for xp_backslash */
-#define XP_BS_NONE 0 /* nothing special for backslashes */
-#define XP_BS_ONE 1 /* uses one backslash before a space */
-#define XP_BS_THREE 2 /* uses three backslashes before a space */
+ int xp_numfiles; // number of files found by file name completion
+ char_u **xp_files; // list of files
+ char_u *xp_line; // text being completed
+ int xp_col; // cursor position in line
+};
-/*
- * Command modifiers ":vertical", ":browse", ":confirm" and ":hide" set a flag.
- * This needs to be saved for recursive commands, put them in a structure for
- * easy manipulation.
- */
+// values for xp_backslash
+#define XP_BS_NONE 0 // nothing special for backslashes
+#define XP_BS_ONE 1 // uses one backslash before a space
+#define XP_BS_THREE 2 // uses three backslashes before a space
+
+/// Command modifiers ":vertical", ":browse", ":confirm", ":hide", etc. set a
+/// flag. This needs to be saved for recursive commands, put them in a
+/// structure for easy manipulation.
typedef struct {
- int hide; /* TRUE when ":hide" was used */
- int split; /* flags for win_split() */
- int tab; /* > 0 when ":tab" was used */
- int confirm; /* TRUE to invoke yes/no dialog */
- int keepalt; /* TRUE when ":keepalt" was used */
- int keepmarks; /* TRUE when ":keepmarks" was used */
- int keepjumps; /* TRUE when ":keepjumps" was used */
- int lockmarks; /* TRUE when ":lockmarks" was used */
- int keeppatterns; /* TRUE when ":keeppatterns" was used */
- bool noswapfile; /* true when ":noswapfile" was used */
- char_u *save_ei; /* saved value of 'eventignore' */
+ int split; ///< flags for win_split()
+ int tab; ///< > 0 when ":tab" was used
+ bool browse; ///< true to invoke file dialog
+ bool confirm; ///< true to invoke yes/no dialog
+ bool hide; ///< true when ":hide" was used
+ bool keepalt; ///< true when ":keepalt" was used
+ bool keepjumps; ///< true when ":keepjumps" was used
+ bool keepmarks; ///< true when ":keepmarks" was used
+ bool keeppatterns; ///< true when ":keeppatterns" was used
+ bool lockmarks; ///< true when ":lockmarks" was used
+ bool noswapfile; ///< true when ":noswapfile" was used
+ char_u *save_ei; ///< saved value of 'eventignore'
} cmdmod_T;
#endif // NVIM_EX_CMDS_DEFS_H
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 8bae817211..45407b7f12 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -36,7 +36,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
@@ -345,7 +344,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
msg_list = saved_msg_list;
return FAIL;
}
- ++call_depth;
+ call_depth++;
+ start_batch_changes();
cstack.cs_idx = -1;
cstack.cs_looplevel = 0;
@@ -952,7 +952,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
did_endif = FALSE; /* in case do_cmdline used recursively */
- --call_depth;
+ call_depth--;
+ end_batch_changes();
return retval;
}
@@ -1313,8 +1314,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
case 'b': if (checkforcmd(&ea.cmd, "belowright", 3)) {
cmdmod.split |= WSP_BELOW;
continue;
- }
+ }
if (checkforcmd(&ea.cmd, "browse", 3)) {
+ cmdmod.browse = true;
continue;
}
if (!checkforcmd(&ea.cmd, "botright", 2))
@@ -1324,24 +1326,24 @@ static char_u * do_one_cmd(char_u **cmdlinep,
case 'c': if (!checkforcmd(&ea.cmd, "confirm", 4))
break;
- cmdmod.confirm = TRUE;
+ cmdmod.confirm = true;
continue;
case 'k': if (checkforcmd(&ea.cmd, "keepmarks", 3)) {
- cmdmod.keepmarks = TRUE;
+ cmdmod.keepmarks = true;
continue;
}
if (checkforcmd(&ea.cmd, "keepalt", 5)) {
- cmdmod.keepalt = TRUE;
+ cmdmod.keepalt = true;
continue;
}
if (checkforcmd(&ea.cmd, "keeppatterns", 5)) {
- cmdmod.keeppatterns = TRUE;
+ cmdmod.keeppatterns = true;
continue;
}
if (!checkforcmd(&ea.cmd, "keepjumps", 5))
break;
- cmdmod.keepjumps = TRUE;
+ cmdmod.keepjumps = true;
continue;
/* ":hide" and ":hide | cmd" are not modifiers */
@@ -1349,11 +1351,11 @@ static char_u * do_one_cmd(char_u **cmdlinep,
|| *p == NUL || ends_excmd(*p))
break;
ea.cmd = p;
- cmdmod.hide = TRUE;
+ cmdmod.hide = true;
continue;
case 'l': if (checkforcmd(&ea.cmd, "lockmarks", 3)) {
- cmdmod.lockmarks = TRUE;
+ cmdmod.lockmarks = true;
continue;
}
@@ -4361,12 +4363,15 @@ static void ex_autocmd(exarg_T *eap)
*/
static void ex_doautocmd(exarg_T *eap)
{
- char_u *arg = eap->arg;
+ char_u *arg = eap->arg;
int call_do_modelines = check_nomodeline(&arg);
+ bool did_aucmd;
- (void)do_doautocmd(arg, TRUE);
- if (call_do_modelines) /* Only when there is no <nomodeline>. */
+ (void)do_doautocmd(arg, true, &did_aucmd);
+ // Only when there is no <nomodeline>.
+ if (call_do_modelines && did_aucmd) {
do_modelines(0);
+ }
}
/*
@@ -5153,6 +5158,24 @@ static char_u *uc_split_args(char_u *arg, size_t *lenp)
return buf;
}
+static size_t add_cmd_modifier(char_u *buf, char *mod_str, bool *multi_mods)
+{
+ size_t result = STRLEN(mod_str);
+ if (*multi_mods) {
+ result++;
+ }
+
+ if (buf != NULL) {
+ if (*multi_mods) {
+ STRCAT(buf, " ");
+ }
+ STRCAT(buf, mod_str);
+ }
+
+ *multi_mods = true;
+ return result;
+}
+
/*
* Check for a <> code in a user command.
* "code" points to the '<'. "len" the length of the <> (inclusive).
@@ -5177,8 +5200,8 @@ uc_check_code (
char_u *p = code + 1;
size_t l = len - 2;
int quote = 0;
- enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_REGISTER,
- ct_LT, ct_NONE } type = ct_NONE;
+ enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_MODS,
+ ct_REGISTER, ct_LT, ct_NONE } type = ct_NONE;
if ((vim_strchr((char_u *)"qQfF", *p) != NULL) && p[1] == '-') {
quote = (*p == 'q' || *p == 'Q') ? 1 : 2;
@@ -5186,23 +5209,26 @@ uc_check_code (
l -= 2;
}
- ++l;
- if (l <= 1)
+ l++;
+ if (l <= 1) {
type = ct_NONE;
- else if (STRNICMP(p, "args>", l) == 0)
+ } else if (STRNICMP(p, "args>", l) == 0) {
type = ct_ARGS;
- else if (STRNICMP(p, "bang>", l) == 0)
+ } else if (STRNICMP(p, "bang>", l) == 0) {
type = ct_BANG;
- else if (STRNICMP(p, "count>", l) == 0)
+ } else if (STRNICMP(p, "count>", l) == 0) {
type = ct_COUNT;
- else if (STRNICMP(p, "line1>", l) == 0)
+ } else if (STRNICMP(p, "line1>", l) == 0) {
type = ct_LINE1;
- else if (STRNICMP(p, "line2>", l) == 0)
+ } else if (STRNICMP(p, "line2>", l) == 0) {
type = ct_LINE2;
- else if (STRNICMP(p, "lt>", l) == 0)
+ } else if (STRNICMP(p, "lt>", l) == 0) {
type = ct_LT;
- else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0)
+ } else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0) {
type = ct_REGISTER;
+ } else if (STRNICMP(p, "mods>", l) == 0) {
+ type = ct_MODS;
+ }
switch (type) {
case ct_ARGS:
@@ -5310,6 +5336,87 @@ uc_check_code (
break;
}
+ case ct_MODS:
+ {
+ result = quote ? 2 : 0;
+ if (buf != NULL) {
+ if (quote) {
+ *buf++ = '"';
+ }
+ *buf = '\0';
+ }
+
+ bool multi_mods = false;
+
+ // :aboveleft and :leftabove
+ if (cmdmod.split & WSP_ABOVE) {
+ result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
+ }
+ // :belowright and :rightbelow
+ if (cmdmod.split & WSP_BELOW) {
+ result += add_cmd_modifier(buf, "belowright", &multi_mods);
+ }
+ // :botright
+ if (cmdmod.split & WSP_BOT) {
+ result += add_cmd_modifier(buf, "botright", &multi_mods);
+ }
+
+ typedef struct {
+ bool *set;
+ char *name;
+ } mod_entry_T;
+ static mod_entry_T mod_entries[] = {
+ { &cmdmod.browse, "browse" },
+ { &cmdmod.confirm, "confirm" },
+ { &cmdmod.hide, "hide" },
+ { &cmdmod.keepalt, "keepalt" },
+ { &cmdmod.keepjumps, "keepjumps" },
+ { &cmdmod.keepmarks, "keepmarks" },
+ { &cmdmod.keeppatterns, "keeppatterns" },
+ { &cmdmod.lockmarks, "lockmarks" },
+ { &cmdmod.noswapfile, "noswapfile" }
+ };
+ // the modifiers that are simple flags
+ for (size_t i = 0; i < ARRAY_SIZE(mod_entries); i++) {
+ if (*mod_entries[i].set) {
+ result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods);
+ }
+ }
+
+ // TODO(vim): How to support :noautocmd?
+ // TODO(vim): How to support :sandbox?
+
+ // :silent
+ if (msg_silent > 0) {
+ result += add_cmd_modifier(buf, emsg_silent > 0 ? "silent!" : "silent",
+ &multi_mods);
+ }
+ // :tab
+ if (cmdmod.tab > 0) {
+ result += add_cmd_modifier(buf, "tab", &multi_mods);
+ }
+ // :topleft
+ if (cmdmod.split & WSP_TOP) {
+ result += add_cmd_modifier(buf, "topleft", &multi_mods);
+ }
+
+ // TODO(vim): How to support :unsilent?
+
+ // :verbose
+ if (p_verbose > 0) {
+ result += add_cmd_modifier(buf, "verbose", &multi_mods);
+ }
+ // :vertical
+ if (cmdmod.split & WSP_VERT) {
+ result += add_cmd_modifier(buf, "vertical", &multi_mods);
+ }
+ if (quote && buf != NULL) {
+ buf += result - 2;
+ *buf = '"';
+ }
+ break;
+ }
+
case ct_REGISTER:
result = eap->regname ? 1 : 0;
if (quote)
@@ -9359,7 +9466,7 @@ static void ex_filetype(exarg_T *eap)
}
}
if (*arg == 'd') {
- (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE);
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", true, NULL);
do_modelines(0);
}
} else if (STRCMP(arg, "off") == 0) {
@@ -9510,20 +9617,15 @@ static void ex_foldopen(exarg_T *eap)
static void ex_folddo(exarg_T *eap)
{
- linenr_T lnum;
-
- start_global_changes();
-
- /* First set the marks for all lines closed/open. */
- for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
- if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
+ // First set the marks for all lines closed/open.
+ for (linenr_T lnum = eap->line1; lnum <= eap->line2; ++lnum) {
+ if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed)) {
ml_setmarked(lnum);
+ }
+ }
- /* Execute the command on the marked lines. */
- global_exe(eap->arg);
- ml_clearmarked(); /* clear rest of the marks */
-
- end_global_changes();
+ global_exe(eap->arg); // Execute the command on the marked lines.
+ ml_clearmarked(); // clear rest of the marks
}
static void ex_terminal(exarg_T *eap)
diff --git a/src/nvim/ex_eval.c b/src/nvim/ex_eval.c
index 82d4c2b2d5..f518fa0d66 100644
--- a/src/nvim/ex_eval.c
+++ b/src/nvim/ex_eval.c
@@ -15,7 +15,6 @@
#include "nvim/ex_cmds2.h"
#include "nvim/ex_docmd.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/regexp.h"
#include "nvim/strings.h"
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index cd28554970..1a97dc3d6f 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -34,7 +34,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/cursor_shape.h"
#include "nvim/keymap.h"
diff --git a/src/nvim/farsi.c b/src/nvim/farsi.c
index 61e17128ea..eb22ad1428 100644
--- a/src/nvim/farsi.c
+++ b/src/nvim/farsi.c
@@ -15,7 +15,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
#include "nvim/vim.h"
diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c
index 78b224f04c..c6cfba8142 100644
--- a/src/nvim/file_search.c
+++ b/src/nvim/file_search.c
@@ -1,48 +1,44 @@
-/* TODO: make some #ifdef for this */
-/*--------[ file searching ]-------------------------------------------------*/
-/*
- * File searching functions for 'path', 'tags' and 'cdpath' options.
- * External visible functions:
- * vim_findfile_init() creates/initialises the search context
- * vim_findfile_free_visited() free list of visited files/dirs of search
- * context
- * vim_findfile() find a file in the search context
- * vim_findfile_cleanup() cleanup/free search context created by
- * vim_findfile_init()
- *
- * All static functions and variables start with 'ff_'
- *
- * In general it works like this:
- * First you create yourself a search context by calling vim_findfile_init().
- * It is possible to give a search context from a previous call to
- * vim_findfile_init(), so it can be reused. After this you call vim_findfile()
- * until you are satisfied with the result or it returns NULL. On every call it
- * returns the next file which matches the conditions given to
- * vim_findfile_init(). If it doesn't find a next file it returns NULL.
- *
- * It is possible to call vim_findfile_init() again to reinitialise your search
- * with some new parameters. Don't forget to pass your old search context to
- * it, so it can reuse it and especially reuse the list of already visited
- * directories. If you want to delete the list of already visited directories
- * simply call vim_findfile_free_visited().
- *
- * When you are done call vim_findfile_cleanup() to free the search context.
- *
- * The function vim_findfile_init() has a long comment, which describes the
- * needed parameters.
- *
- *
- *
- * ATTENTION:
- * ==========
- * Also we use an allocated search context here, this functions are NOT
- * thread-safe!!!!!
- *
- * To minimize parameter passing (or because I'm to lazy), only the
- * external visible functions get a search context as a parameter. This is
- * then assigned to a static global, which is used throughout the local
- * functions.
- */
+// File searching functions for 'path', 'tags' and 'cdpath' options.
+//
+// External visible functions:
+// vim_findfile_init() creates/initialises the search context
+// vim_findfile_free_visited() free list of visited files/dirs of search
+// context
+// vim_findfile() find a file in the search context
+// vim_findfile_cleanup() cleanup/free search context created by
+// vim_findfile_init()
+//
+// All static functions and variables start with 'ff_'
+//
+// In general it works like this:
+// First you create yourself a search context by calling vim_findfile_init().
+// It is possible to give a search context from a previous call to
+// vim_findfile_init(), so it can be reused. After this you call vim_findfile()
+// until you are satisfied with the result or it returns NULL. On every call it
+// returns the next file which matches the conditions given to
+// vim_findfile_init(). If it doesn't find a next file it returns NULL.
+//
+// It is possible to call vim_findfile_init() again to reinitialise your search
+// with some new parameters. Don't forget to pass your old search context to
+// it, so it can reuse it and especially reuse the list of already visited
+// directories. If you want to delete the list of already visited directories
+// simply call vim_findfile_free_visited().
+//
+// When you are done call vim_findfile_cleanup() to free the search context.
+//
+// The function vim_findfile_init() has a long comment, which describes the
+// needed parameters.
+//
+//
+//
+// ATTENTION:
+// ==========
+// We use an allocated search context, these functions are NOT thread-safe!!!!!
+//
+// To minimize parameter passing (or because I'm too lazy), only the
+// external visible functions get a search context as a parameter. This is
+// then assigned to a static global, which is used throughout the local
+// functions.
#include <assert.h>
#include <string.h>
@@ -59,7 +55,7 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
+#include "nvim/option.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
#include "nvim/strings.h"
@@ -1526,3 +1522,28 @@ theend:
return file_name;
}
+/// Change to a file's directory.
+/// Caller must call shorten_fnames()!
+/// @return OK or FAIL
+int vim_chdirfile(char_u *fname)
+{
+ char_u dir[MAXPATHL];
+
+ STRLCPY(dir, fname, MAXPATHL);
+ *path_tail_with_sep(dir) = NUL;
+ return os_chdir((char *)dir) == 0 ? OK : FAIL;
+}
+
+/// Change directory to "new_dir". Search 'cdpath' for relative directory names.
+int vim_chdir(char_u *new_dir)
+{
+ char_u *dir_name = find_directory_in_path(new_dir, STRLEN(new_dir),
+ FNAME_MESS, curbuf->b_ffname);
+ if (dir_name == NULL) {
+ return -1;
+ }
+ int r = os_chdir((char *)dir_name);
+ xfree(dir_name);
+ return r;
+}
+
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 154558b332..c0d4a71b35 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -32,7 +32,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -44,6 +43,7 @@
#include "nvim/screen.h"
#include "nvim/search.h"
#include "nvim/sha256.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
#include "nvim/types.h"
@@ -282,11 +282,9 @@ readfile (
int error = FALSE; /* errors encountered */
int ff_error = EOL_UNKNOWN; /* file format with errors */
long linerest = 0; /* remaining chars in line */
-#ifdef UNIX
int perm = 0;
+#ifdef UNIX
int swap_mode = -1; /* protection bits for swap file */
-#else
- int perm;
#endif
int fileformat = 0; /* end-of-line format */
int keep_fileformat = FALSE;
@@ -418,23 +416,21 @@ readfile (
}
}
- if (!read_stdin && !read_buffer) {
-#ifdef UNIX
- /*
- * On Unix it is possible to read a directory, so we have to
- * check for it before os_open().
- */
+ if (!read_buffer && !read_stdin) {
perm = os_getperm(fname);
- if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */
+#ifdef UNIX
+ // On Unix it is possible to read a directory, so we have to
+ // check for it before os_open().
+ if (perm >= 0 && !S_ISREG(perm) // not a regular file ...
# ifdef S_ISFIFO
- && !S_ISFIFO(perm) /* ... or fifo */
+ && !S_ISFIFO(perm) // ... or fifo
# endif
# ifdef S_ISSOCK
- && !S_ISSOCK(perm) /* ... or socket */
+ && !S_ISSOCK(perm) // ... or socket
# endif
# ifdef OPEN_CHR_FILES
&& !(S_ISCHR(perm) && is_dev_fd_file(fname))
- /* ... or a character special file named /dev/fd/<n> */
+ // ... or a character special file named /dev/fd/<n>
# endif
) {
if (S_ISDIR(perm))
@@ -493,44 +489,31 @@ readfile (
curbuf->b_flags &= ~(BF_NEW | BF_NEW_W);
}
- /*
- * Check readonly by trying to open the file for writing.
- * If this fails, we know that the file is readonly.
- */
- file_readonly = FALSE;
+ // Check readonly.
+ file_readonly = false;
if (!read_buffer && !read_stdin) {
- if (!newfile || readonlymode) {
- file_readonly = TRUE;
- } else if ((fd = os_open((char *)fname, O_RDWR, 0)) < 0) {
- // opening in readwrite mode failed => file is readonly
- file_readonly = TRUE;
- }
- if (file_readonly == TRUE) {
- // try to open readonly
- fd = os_open((char *)fname, O_RDONLY, 0);
+ if (!newfile || readonlymode || !(perm & 0222)
+ || !os_file_is_writable((char *)fname)) {
+ file_readonly = true;
}
+ fd = os_open((char *)fname, O_RDONLY, 0);
}
- if (fd < 0) { /* cannot open at all */
+ if (fd < 0) { // cannot open at all
msg_scroll = msg_save;
#ifndef UNIX
- /*
- * On non-unix systems we can't open a directory, check here.
- */
- perm = os_getperm(fname); /* check if the file exists */
+ // On non-unix systems we can't open a directory, check here.
if (os_isdir(fname)) {
filemess(curbuf, sfname, (char_u *)_("is a directory"), 0);
- curbuf->b_p_ro = TRUE; /* must use "w!" now */
- } else
+ curbuf->b_p_ro = true; // must use "w!" now
+ } else {
#endif
if (!newfile) {
return FAIL;
}
- if (perm == UV_ENOENT) {
- /*
- * Set the 'new-file' flag, so that when the file has
- * been created by someone else, a ":w" will complain.
- */
+ if (perm == UV_ENOENT) { // check if the file exists
+ // Set the 'new-file' flag, so that when the file has
+ // been created by someone else, a ":w" will complain.
curbuf->b_flags |= BF_NEW;
/* Create a swap file now, so that other Vims are warned
@@ -581,6 +564,9 @@ readfile (
return FAIL;
}
+#ifndef UNIX
+ }
+#endif
/*
* Only set the 'ro' flag for readonly files the first time they are
@@ -3787,8 +3773,9 @@ static int set_rw_fname(char_u *fname, char_u *sfname)
/* Do filetype detection now if 'filetype' is empty. */
if (*curbuf->b_p_ft == NUL) {
- if (au_has_group((char_u *)"filetypedetect"))
- (void)do_doautocmd((char_u *)"filetypedetect BufRead", FALSE);
+ if (au_has_group((char_u *)"filetypedetect")) {
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", false, NULL);
+ }
do_modelines(0);
}
@@ -4460,11 +4447,95 @@ bool vim_fgets(char_u *buf, int size, FILE *fp) FUNC_ATTR_NONNULL_ALL
return eof == NULL;
}
-/*
- * os_rename() only works if both files are on the same file system, this
- * function will (attempts to?) copy the file across if rename fails -- webb
- * Return -1 for failure, 0 for success.
- */
+/// Read 2 bytes from "fd" and turn them into an int, MSB first.
+int get2c(FILE *fd)
+{
+ int n;
+
+ n = getc(fd);
+ n = (n << 8) + getc(fd);
+ return n;
+}
+
+/// Read 3 bytes from "fd" and turn them into an int, MSB first.
+int get3c(FILE *fd)
+{
+ int n;
+
+ n = getc(fd);
+ n = (n << 8) + getc(fd);
+ n = (n << 8) + getc(fd);
+ return n;
+}
+
+/// Read 4 bytes from "fd" and turn them into an int, MSB first.
+int get4c(FILE *fd)
+{
+ // Use unsigned rather than int otherwise result is undefined
+ // when left-shift sets the MSB.
+ unsigned n;
+
+ n = (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ return (int)n;
+}
+
+/// Read 8 bytes from `fd` and turn them into a time_t, MSB first.
+time_t get8ctime(FILE *fd)
+{
+ time_t n = 0;
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ n = (n << 8) + getc(fd);
+ }
+ return n;
+}
+
+/// Reads a string of length "cnt" from "fd" into allocated memory.
+/// @return pointer to the string or NULL when unable to read that many bytes.
+char *read_string(FILE *fd, size_t cnt)
+{
+ char *str = xmallocz(cnt);
+ for (size_t i = 0; i < cnt; i++) {
+ int c = getc(fd);
+ if (c == EOF) {
+ xfree(str);
+ return NULL;
+ }
+ str[i] = (char)c;
+ }
+ return str;
+}
+
+/// Writes a number to file "fd", most significant bit first, in "len" bytes.
+/// @returns false in case of an error.
+bool put_bytes(FILE *fd, uintmax_t number, size_t len)
+{
+ assert(len > 0);
+ for (size_t i = len - 1; i < len; i--) {
+ if (putc((int)(number >> (i * 8)), fd) == EOF) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/// Writes time_t to file "fd" in 8 bytes.
+/// @returns FAIL when the write failed.
+int put_time(FILE *fd, time_t time_)
+{
+ uint8_t buf[8];
+ time_to_bytes(time_, buf);
+ return fwrite(buf, sizeof(uint8_t), ARRAY_SIZE(buf), fd) == 1 ? OK : FAIL;
+}
+
+/// os_rename() only works if both files are on the same file system, this
+/// function will (attempts to?) copy the file across if rename fails -- webb
+//
+/// @return -1 for failure, 0 for success
int vim_rename(char_u *from, char_u *to)
{
int fd_in;
@@ -6072,13 +6143,18 @@ static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd,
int
do_doautocmd (
char_u *arg,
- int do_msg /* give message for no matching autocmds? */
+ int do_msg, // give message for no matching autocmds?
+ bool *did_something
)
{
char_u *fname;
int nothing_done = TRUE;
int group;
+ if (did_something != NULL) {
+ *did_something = false;
+ }
+
/*
* Check for a legal group name. If not, use AUGROUP_ALL.
*/
@@ -6107,8 +6183,12 @@ do_doautocmd (
fname, NULL, TRUE, group, curbuf, NULL))
nothing_done = FALSE;
- if (nothing_done && do_msg)
+ if (nothing_done && do_msg) {
MSG(_("No matching autocommands"));
+ }
+ if (did_something != NULL) {
+ *did_something = !nothing_done;
+ }
return aborting() ? FAIL : OK;
}
@@ -6137,13 +6217,14 @@ void ex_doautoall(exarg_T *eap)
/* find a window for this buffer and save some values */
aucmd_prepbuf(&aco, buf);
- /* execute the autocommands for this buffer */
- retval = do_doautocmd(arg, FALSE);
+ bool did_aucmd;
+ // execute the autocommands for this buffer
+ retval = do_doautocmd(arg, false, &did_aucmd);
- if (call_do_modelines) {
- /* Execute the modeline settings, but don't set window-local
- * options if we are using the current window for another
- * buffer. */
+ if (call_do_modelines && did_aucmd) {
+ // Execute the modeline settings, but don't set window-local
+ // options if we are using the current window for another
+ // buffer.
do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
}
diff --git a/src/nvim/fileio.h b/src/nvim/fileio.h
index d93f3f3eb3..ceb101167d 100644
--- a/src/nvim/fileio.h
+++ b/src/nvim/fileio.h
@@ -12,6 +12,8 @@
#define READ_DUMMY 0x10 /* reading into a dummy buffer */
#define READ_KEEP_UNDO 0x20 /* keep undo info*/
+#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))
+
/*
* Struct to save values in before executing autocommands for a buffer that is
* not the current buffer.
diff --git a/src/nvim/fold.c b/src/nvim/fold.c
index ac3cf959c8..70030b8525 100644
--- a/src/nvim/fold.c
+++ b/src/nvim/fold.c
@@ -22,7 +22,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/option.h"
@@ -762,16 +761,12 @@ void clearFolding(win_T *win)
*/
void foldUpdate(win_T *wp, linenr_T top, linenr_T bot)
{
- if (compl_busy) {
- return;
- }
-
- fold_T *fp;
- if (wp->w_buffer->terminal) {
+ if (compl_busy || State & INSERT) {
return;
}
// Mark all folds from top to bot as maybe-small.
+ fold_T *fp;
(void)foldFind(&wp->w_folds, top, &fp);
while (fp < (fold_T *)wp->w_folds.ga_data + wp->w_folds.ga_len
&& fp->fd_top < bot) {
diff --git a/src/nvim/func_attr.h b/src/nvim/func_attr.h
index ea017ab0c8..d98fe5b22b 100644
--- a/src/nvim/func_attr.h
+++ b/src/nvim/func_attr.h
@@ -185,6 +185,7 @@
#ifdef DEFINE_FUNC_ATTRIBUTES
# define FUNC_API_ASYNC
# define FUNC_API_NOEXPORT
+# define FUNC_API_NOEVAL
# define FUNC_ATTR_MALLOC REAL_FATTR_MALLOC
# define FUNC_ATTR_ALLOC_SIZE(x) REAL_FATTR_ALLOC_SIZE(x)
# define FUNC_ATTR_ALLOC_SIZE_PROD(x, y) REAL_FATTR_ALLOC_SIZE_PROD(x, y)
diff --git a/src/nvim/garray.c b/src/nvim/garray.c
index 98cec69b54..9ed3b901ef 100644
--- a/src/nvim/garray.c
+++ b/src/nvim/garray.c
@@ -8,7 +8,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/log.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/path.h"
#include "nvim/garray.h"
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index ae1857f318..dad0ac33cd 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -29,7 +29,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/move.h"
@@ -38,6 +37,7 @@
#include "nvim/option.h"
#include "nvim/regexp.h"
#include "nvim/screen.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
#include "nvim/undo.h"
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 950ceb4c74..57d12d396e 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -442,59 +442,60 @@ EXTERN int no_check_timestamps INIT(= 0); /* Don't check timestamps */
typedef enum {
HLF_8 = 0 /* Meta & special keys listed with ":map", text that is
displayed different from what it is */
- , HLF_EOB //< after the last line in the buffer
- , HLF_TERM //< terminal cursor focused
- , HLF_TERMNC //< terminal cursor unfocused
- , HLF_AT /* @ characters at end of screen, characters that
- don't really exist in the text */
- , HLF_D /* directories in CTRL-D listing */
- , HLF_E /* error messages */
- , HLF_I /* incremental search */
- , HLF_L /* last search string */
- , HLF_M /* "--More--" message */
- , HLF_CM /* Mode (e.g., "-- INSERT --") */
- , HLF_N /* line number for ":number" and ":#" commands */
- , HLF_CLN /* current line number */
- , HLF_R /* return to continue message and yes/no questions */
- , HLF_S /* status lines */
- , HLF_SNC /* status lines of not-current windows */
- , HLF_C /* column to separate vertically split windows */
- , HLF_T /* Titles for output from ":set all", ":autocmd" etc. */
- , HLF_V /* Visual mode */
- , HLF_VNC /* Visual mode, autoselecting and not clipboard owner */
- , HLF_W /* warning messages */
- , HLF_WM /* Wildmenu highlight */
- , HLF_FL /* Folded line */
- , HLF_FC /* Fold column */
- , HLF_ADD /* Added diff line */
- , HLF_CHD /* Changed diff line */
- , HLF_DED /* Deleted diff line */
- , HLF_TXD /* Text Changed in diff line */
- , HLF_CONCEAL /* Concealed text */
- , HLF_SC /* Sign column */
- , HLF_SPB /* SpellBad */
- , HLF_SPC /* SpellCap */
- , HLF_SPR /* SpellRare */
- , HLF_SPL /* SpellLocal */
- , HLF_PNI /* popup menu normal item */
- , HLF_PSI /* popup menu selected item */
- , HLF_PSB /* popup menu scrollbar */
- , HLF_PST /* popup menu scrollbar thumb */
- , HLF_TP /* tabpage line */
- , HLF_TPS /* tabpage line selected */
- , HLF_TPF /* tabpage line filler */
- , HLF_CUC /* 'cursurcolumn' */
- , HLF_CUL /* 'cursurline' */
- , HLF_MC /* 'colorcolumn' */
- , HLF_COUNT /* MUST be the last one */
+ , HLF_EOB // after the last line in the buffer
+ , HLF_TERM // terminal cursor focused
+ , HLF_TERMNC // terminal cursor unfocused
+ , HLF_AT // @ characters at end of screen, characters that
+ // don't really exist in the text
+ , HLF_D // directories in CTRL-D listing
+ , HLF_E // error messages
+ , HLF_I // incremental search
+ , HLF_L // last search string
+ , HLF_M // "--More--" message
+ , HLF_CM // Mode (e.g., "-- INSERT --")
+ , HLF_N // line number for ":number" and ":#" commands
+ , HLF_CLN // current line number
+ , HLF_R // return to continue message and yes/no questions
+ , HLF_S // status lines
+ , HLF_SNC // status lines of not-current windows
+ , HLF_C // column to separate vertically split windows
+ , HLF_T // Titles for output from ":set all", ":autocmd" etc.
+ , HLF_V // Visual mode
+ , HLF_VNC // Visual mode, autoselecting and not clipboard owner
+ , HLF_W // warning messages
+ , HLF_WM // Wildmenu highlight
+ , HLF_FL // Folded line
+ , HLF_FC // Fold column
+ , HLF_ADD // Added diff line
+ , HLF_CHD // Changed diff line
+ , HLF_DED // Deleted diff line
+ , HLF_TXD // Text Changed in diff line
+ , HLF_CONCEAL // Concealed text
+ , HLF_SC // Sign column
+ , HLF_SPB // SpellBad
+ , HLF_SPC // SpellCap
+ , HLF_SPR // SpellRare
+ , HLF_SPL // SpellLocal
+ , HLF_PNI // popup menu normal item
+ , HLF_PSI // popup menu selected item
+ , HLF_PSB // popup menu scrollbar
+ , HLF_PST // popup menu scrollbar thumb
+ , HLF_TP // tabpage line
+ , HLF_TPS // tabpage line selected
+ , HLF_TPF // tabpage line filler
+ , HLF_CUC // 'cursurcolumn'
+ , HLF_CUL // 'cursurline'
+ , HLF_MC // 'colorcolumn'
+ , HLF_QFL // selected quickfix line
+ , HLF_COUNT // MUST be the last one
} hlf_T;
/* The HL_FLAGS must be in the same order as the HLF_ enums!
* When changing this also adjust the default for 'highlight'. */
-#define HL_FLAGS {'8', '~', 'z', 'Z', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', \
- 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', \
- 'A', 'C', 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', \
- 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+#define HL_FLAGS { '8', '~', 'z', 'Z', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', \
+ 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', \
+ 'A', 'C', 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', \
+ 'x', 'X', '*', '#', '_', '!', '.', 'o', 'q' }
EXTERN int highlight_attr[HLF_COUNT]; /* Highl. attr for each context. */
EXTERN int highlight_user[9]; /* User[1-9] attributes */
@@ -1244,6 +1245,9 @@ EXTERN char *ignoredp;
// If a msgpack-rpc channel should be started over stdin/stdout
EXTERN bool embedded_mode INIT(= false);
+/// next free id for a job or rpc channel
+EXTERN uint64_t next_chan_id INIT(= 1);
+
/// Used to track the status of external functions.
/// Currently only used for iconv().
typedef enum {
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c
index 1c9b8e18ef..7d4bfd0290 100644
--- a/src/nvim/hardcopy.c
+++ b/src/nvim/hardcopy.c
@@ -23,7 +23,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/option.h"
#include "nvim/path.h"
diff --git a/src/nvim/hashtab.c b/src/nvim/hashtab.c
index 2da937633e..7d4ae61fc4 100644
--- a/src/nvim/hashtab.c
+++ b/src/nvim/hashtab.c
@@ -28,7 +28,6 @@
#include "nvim/hashtab.h"
#include "nvim/message.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
// Magic value for algorithm that walks through the array.
#define PERTURB_SHIFT 5
diff --git a/src/nvim/iconv.h b/src/nvim/iconv.h
index 4ac0d3fdd4..bf29b15247 100644
--- a/src/nvim/iconv.h
+++ b/src/nvim/iconv.h
@@ -24,10 +24,10 @@
// defined, we provide a type shim (pull in errno.h and define iconv_t).
// This enables us to still load and use iconv dynamically at runtime.
#ifdef USE_ICONV
+# include <errno.h>
# ifdef HAVE_ICONV_H
# include <iconv.h>
# else
-# include <errno.h>
typedef void *iconv_t;
# endif
#endif
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index f2432dd71d..3ed85677fc 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -20,7 +20,6 @@
#include "nvim/eval.h"
#include "nvim/fileio.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/os/time.h"
#include "nvim/path.h"
@@ -52,7 +51,7 @@ static cscmd_T cs_cmds[] =
{ "add", cs_add,
N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 },
{ "find", cs_find,
- N_("Query for a pattern"), "find c|d|e|f|g|i|s|t name", 1 },
+ N_("Query for a pattern"), "find a|c|d|e|f|g|i|s|t name", 1 },
{ "help", cs_help,
N_("Show this message"), "help", 0 },
{ "kill", cs_kill,
@@ -105,13 +104,13 @@ char_u *get_cscope_name(expand_T *xp, int idx)
{
const char *query_type[] =
{
- "c", "d", "e", "f", "g", "i", "s", "t", NULL
+ "a", "c", "d", "e", "f", "g", "i", "s", "t", NULL
};
- /* Complete with query type of ":cscope find {query_type}".
- * {query_type} can be letters (c, d, ... t) or numbers (0, 1,
- * ..., 8) but only complete with letters, since numbers are
- * redundant. */
+ // Complete with query type of ":cscope find {query_type}".
+ // {query_type} can be letters (c, d, ... a) or numbers (0, 1,
+ // ..., 9) but only complete with letters, since numbers are
+ // redundant.
return (char_u *)query_type[idx];
}
case EXP_CSCOPE_KILL:
@@ -674,6 +673,9 @@ static char *cs_create_cmd(char *csoption, char *pattern)
case '8': case 'i':
search = 8;
break;
+ case '9': case 'a':
+ search = 9;
+ break;
default:
(void)EMSG(_("E561: unknown cscope search type"));
cs_usage_msg(Find);
@@ -970,6 +972,9 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose,
case '8':
cmdletter = 'i';
break;
+ case '9':
+ cmdletter = 'a';
+ break;
default:
cmdletter = opt[0];
}
@@ -1126,14 +1131,15 @@ static int cs_help(exarg_T *eap)
cmdp->usage);
if (strcmp(cmdp->name, "find") == 0)
MSG_PUTS(_("\n"
- " c: Find functions calling this function\n"
- " d: Find functions called by this function\n"
- " e: Find this egrep pattern\n"
- " f: Find this file\n"
- " g: Find this definition\n"
- " i: Find files #including this file\n"
- " s: Find this C symbol\n"
- " t: Find this text string\n"));
+ " a: Find assignments to this symbol\n"
+ " c: Find functions calling this function\n"
+ " d: Find functions called by this function\n"
+ " e: Find this egrep pattern\n"
+ " f: Find this file\n"
+ " g: Find this definition\n"
+ " i: Find files #including this file\n"
+ " s: Find this C symbol\n"
+ " t: Find this text string\n"));
cmdp++;
}
diff --git a/src/nvim/if_cscope_defs.h b/src/nvim/if_cscope_defs.h
index 8cd74c74e6..f9d06eaea3 100644
--- a/src/nvim/if_cscope_defs.h
+++ b/src/nvim/if_cscope_defs.h
@@ -25,18 +25,7 @@
#define CSCOPE_DBFILE "cscope.out"
#define CSCOPE_PROMPT ">> "
-/*
- * s 0name Find this C symbol
- * g 1name Find this definition
- * d 2name Find functions called by this function
- * c 3name Find functions calling this function
- * t 4string find text string (cscope 12.9)
- * t 4name Find assignments to (cscope 13.3)
- * 5pattern change pattern -- NOT USED
- * e 6pattern Find this egrep pattern
- * f 7name Find this file
- * i 8name Find files #including this file
- */
+// See ":help cscope-find" for the possible queries.
typedef struct {
char * name;
diff --git a/src/nvim/indent.c b/src/nvim/indent.c
index f197669a97..7f31bb8c5c 100644
--- a/src/nvim/indent.c
+++ b/src/nvim/indent.c
@@ -10,7 +10,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/option.h"
#include "nvim/regexp.h"
diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c
index efe8e73a3c..6f03cf6037 100644
--- a/src/nvim/indent_c.c
+++ b/src/nvim/indent_c.c
@@ -12,7 +12,6 @@
#include "nvim/indent_c.h"
#include "nvim/memline.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/search.h"
#include "nvim/strings.h"
diff --git a/src/nvim/main.c b/src/nvim/main.c
index e052d0d315..a153931d8a 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -30,7 +30,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/log.h"
#include "nvim/memory.h"
@@ -58,13 +57,13 @@
#include "nvim/event/loop.h"
#include "nvim/os/signal.h"
#include "nvim/event/process.h"
-#include "nvim/msgpack_rpc/defs.h"
#include "nvim/msgpack_rpc/helpers.h"
#include "nvim/msgpack_rpc/server.h"
#include "nvim/msgpack_rpc/channel.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/private/helpers.h"
#include "nvim/api/private/handle.h"
+#include "nvim/api/private/dispatch.h"
/* Maximum number of commands from + or -c arguments. */
#define MAX_ARG_CMDS 10
@@ -251,8 +250,9 @@ int main(int argc, char **argv)
*/
command_line_scan(&params);
- if (GARGCOUNT > 0)
- fname = get_fname(&params);
+ if (GARGCOUNT > 0) {
+ fname = get_fname(&params, cwd);
+ }
TIME_MSG("expanding arguments");
@@ -1196,7 +1196,7 @@ static void check_and_set_isatty(mparm_T *paramp)
/*
* Get filename from command line, given that there is one.
*/
-static char_u *get_fname(mparm_T *parmp)
+static char_u *get_fname(mparm_T *parmp, char_u *cwd)
{
#if !defined(UNIX)
/*
diff --git a/src/nvim/map.c b/src/nvim/map.c
index 398e74268f..73af487f90 100644
--- a/src/nvim/map.c
+++ b/src/nvim/map.c
@@ -6,7 +6,7 @@
#include "nvim/map_defs.h"
#include "nvim/vim.h"
#include "nvim/memory.h"
-#include "nvim/msgpack_rpc/defs.h"
+#include "nvim/api/private/dispatch.h"
#include "nvim/lib/khash.h"
@@ -20,6 +20,8 @@
#define int_eq kh_int_hash_equal
#define linenr_T_hash kh_int_hash_func
#define linenr_T_eq kh_int_hash_equal
+#define handle_T_hash kh_int_hash_func
+#define handle_T_eq kh_int_hash_equal
#if defined(ARCH_64)
@@ -141,7 +143,8 @@ MAP_IMPL(cstr_t, uint64_t, DEFAULT_INITIALIZER)
MAP_IMPL(cstr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(ptr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(uint64_t, ptr_t, DEFAULT_INITIALIZER)
-#define MSGPACK_HANDLER_INITIALIZER {.fn = NULL, .async = false}
+MAP_IMPL(handle_T, ptr_t, DEFAULT_INITIALIZER)
+#define MSGPACK_HANDLER_INITIALIZER { .fn = NULL, .async = false }
MAP_IMPL(String, MsgpackRpcRequestHandler, MSGPACK_HANDLER_INITIALIZER)
#define KVEC_INITIALIZER { .size = 0, .capacity = 0, .items = NULL }
MAP_IMPL(linenr_T, bufhl_vec_T, KVEC_INITIALIZER)
diff --git a/src/nvim/map.h b/src/nvim/map.h
index c7d9894bd1..ba3e84cb31 100644
--- a/src/nvim/map.h
+++ b/src/nvim/map.h
@@ -5,7 +5,7 @@
#include "nvim/map_defs.h"
#include "nvim/api/private/defs.h"
-#include "nvim/msgpack_rpc/defs.h"
+#include "nvim/api/private/dispatch.h"
#include "nvim/bufhl_defs.h"
#define MAP_DECLS(T, U) \
@@ -29,6 +29,7 @@ MAP_DECLS(cstr_t, uint64_t)
MAP_DECLS(cstr_t, ptr_t)
MAP_DECLS(ptr_t, ptr_t)
MAP_DECLS(uint64_t, ptr_t)
+MAP_DECLS(handle_T, ptr_t)
MAP_DECLS(String, MsgpackRpcRequestHandler)
MAP_DECLS(linenr_T, bufhl_vec_T)
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index fe802e48ba..2a65cf396b 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -21,7 +21,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/normal.h"
#include "nvim/option.h"
#include "nvim/path.h"
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index 26d94aa6fa..f577fd847e 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -84,7 +84,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/option.h"
#include "nvim/screen.h"
diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c
index 9fb03c4ac7..43412e3916 100644
--- a/src/nvim/memfile.c
+++ b/src/nvim/memfile.c
@@ -48,7 +48,6 @@
#include "nvim/fileio.h"
#include "nvim/memline.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index 08e82071d7..5505335769 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -55,7 +55,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
@@ -3964,20 +3963,19 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp)
return size;
}
-/*
- * Goto byte in buffer with offset 'cnt'.
- */
+/// Goto byte in buffer with offset 'cnt'.
void goto_byte(long cnt)
{
long boff = cnt;
linenr_T lnum;
- ml_flush_line(curbuf); /* cached line may be dirty */
+ ml_flush_line(curbuf); // cached line may be dirty
setpcmark();
- if (boff)
- --boff;
+ if (boff) {
+ boff--;
+ }
lnum = ml_find_line_or_offset(curbuf, (linenr_T)0, &boff);
- if (lnum < 1) { /* past the end */
+ if (lnum < 1) { // past the end
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
curwin->w_curswant = MAXCOL;
coladvance((colnr_T)MAXCOL);
@@ -3989,7 +3987,84 @@ void goto_byte(long cnt)
}
check_cursor();
- /* Make sure the cursor is on the first byte of a multi-byte char. */
- if (has_mbyte)
+ // Make sure the cursor is on the first byte of a multi-byte char.
+ if (has_mbyte) {
mb_adjust_cursor();
+ }
+}
+
+/// Increment the line pointer "lp" crossing line boundaries as necessary.
+/// Return 1 when going to the next line.
+/// Return 2 when moving forward onto a NUL at the end of the line).
+/// Return -1 when at the end of file.
+/// Return 0 otherwise.
+int inc(pos_T *lp)
+{
+ char_u *p = ml_get_pos(lp);
+
+ if (*p != NUL) { // still within line, move to next char (may be NUL)
+ if (has_mbyte) {
+ int l = (*mb_ptr2len)(p);
+
+ lp->col += l;
+ return (p[l] != NUL) ? 0 : 2;
+ }
+ lp->col++;
+ lp->coladd = 0;
+ return (p[1] != NUL) ? 0 : 2;
+ }
+ if (lp->lnum != curbuf->b_ml.ml_line_count) { // there is a next line
+ lp->col = 0;
+ lp->lnum++;
+ lp->coladd = 0;
+ return 1;
+ }
+ return -1;
+}
+
+/// Same as inc(), but skip NUL at the end of non-empty lines.
+int incl(pos_T *lp)
+{
+ int r;
+
+ if ((r = inc(lp)) >= 1 && lp->col) {
+ r = inc(lp);
+ }
+ return r;
+}
+
+int dec(pos_T *lp)
+{
+ char_u *p;
+
+ lp->coladd = 0;
+ if (lp->col > 0) { // still within line
+ lp->col--;
+ if (has_mbyte) {
+ p = ml_get(lp->lnum);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ }
+ return 0;
+ }
+ if (lp->lnum > 1) { // there is a prior line
+ lp->lnum--;
+ p = ml_get(lp->lnum);
+ lp->col = (colnr_T)STRLEN(p);
+ if (has_mbyte) {
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ }
+ return 1;
+ }
+ return -1; // at start of file
+}
+
+/// Same as dec(), but skip NUL at the end of non-empty lines.
+int decl(pos_T *lp)
+{
+ int r;
+
+ if ((r = dec(lp)) == 1 && lp->col) {
+ r = dec(lp);
+ }
+ return r;
}
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 8db47b79c1..3e041be4d3 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -440,6 +440,16 @@ void do_outofmem_msg(size_t size)
}
}
+/// Writes time_t to "buf[8]".
+void time_to_bytes(time_t time_, uint8_t buf[8])
+{
+ // time_t can be up to 8 bytes in size, more than uintmax_t in 32 bits
+ // systems, thus we can't use put_bytes() here.
+ for (size_t i = 7, bufi = 0; bufi < 8; i--, bufi++) {
+ buf[bufi] = (uint8_t)((uint64_t)time_ >> (i * 8));
+ }
+}
+
#if defined(EXITFREE)
#include "nvim/file_search.h"
diff --git a/src/nvim/memory.h b/src/nvim/memory.h
index 7b477da2f5..62cc78360c 100644
--- a/src/nvim/memory.h
+++ b/src/nvim/memory.h
@@ -3,6 +3,7 @@
#include <stdint.h> // for uint8_t
#include <stddef.h> // for size_t
+#include <time.h> // for time_t
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "memory.h.generated.h"
diff --git a/src/nvim/menu.c b/src/nvim/menu.c
index 3c2394d579..7c0eee64dd 100644
--- a/src/nvim/menu.c
+++ b/src/nvim/menu.c
@@ -18,9 +18,9 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 3c310ed309..1de2347b12 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -22,7 +22,6 @@
#include "nvim/mbyte.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/ops.h"
@@ -702,16 +701,9 @@ int delete_first_msg(void)
void ex_messages(exarg_T *eap)
{
struct msg_hist *p;
- const char *s;
msg_hist_off = TRUE;
- s = os_getenv("LANG");
- if (s)
- msg_attr((char_u *)
- _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
- hl_attr(HLF_T));
-
for (p = first_msg_hist; p != NULL && !got_int; p = p->next)
if (p->msg != NULL)
msg_attr(p->msg, p->attr);
diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c
index d72d8e8513..4ab059c923 100644
--- a/src/nvim/misc1.c
+++ b/src/nvim/misc1.c
@@ -31,7 +31,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
@@ -41,6 +40,7 @@
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/tag.h"
#include "nvim/ui.h"
@@ -742,10 +742,14 @@ open_line (
if (ml_append(curwin->w_cursor.lnum, p_extra, (colnr_T)0, FALSE)
== FAIL)
goto theend;
- /* Postpone calling changed_lines(), because it would mess up folding
- * with markers. */
- mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
- did_append = TRUE;
+ // Postpone calling changed_lines(), because it would mess up folding
+ // with markers.
+ // Skip mark_adjust when adding a line after the last one, there can't
+ // be marks there.
+ if (curwin->w_cursor.lnum + 1 < curbuf->b_ml.ml_line_count) {
+ mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
+ }
+ did_append = true;
} else {
/*
* In VREPLACE mode we are starting to replace the next line.
@@ -1742,18 +1746,6 @@ int gchar_pos(pos_T *pos)
}
/*
- * Skip to next part of an option argument: Skip space and comma.
- */
-char_u *skip_to_option_part(char_u *p)
-{
- if (*p == ',')
- ++p;
- while (*p == ' ')
- ++p;
- return p;
-}
-
-/*
* Call this function when something in the current buffer is changed.
*
* Most often called through changed_bytes() and changed_lines(), which also
@@ -1871,7 +1863,11 @@ void appended_lines(linenr_T lnum, long count)
*/
void appended_lines_mark(linenr_T lnum, long count)
{
- mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
+ // Skip mark_adjust when adding a line after the last one, there can't
+ // be marks there.
+ if (lnum + count < curbuf->b_ml.ml_line_count) {
+ mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
+ }
changed_lines(lnum + 1, 0, lnum + 1, count);
}
@@ -2683,6 +2679,42 @@ void fast_breakcheck(void)
}
}
+// Call shell. Calls os_call_shell, with 'shellxquote' added.
+int call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)
+{
+ int retval;
+ proftime_T wait_time;
+
+ if (p_verbose > 3) {
+ verbose_enter();
+ smsg(_("Calling shell to execute: \"%s\""),
+ cmd == NULL ? p_sh : cmd);
+ ui_putc('\n');
+ verbose_leave();
+ }
+
+ if (do_profiling == PROF_YES) {
+ prof_child_enter(&wait_time);
+ }
+
+ if (*p_sh == NUL) {
+ EMSG(_(e_shellempty));
+ retval = -1;
+ } else {
+ // The external command may update a tags file, clear cached tags.
+ tag_freematch();
+
+ retval = os_call_shell(cmd, opts, extra_shell_arg);
+ }
+
+ set_vim_var_nr(VV_SHELL_ERROR, (varnumber_T)retval);
+ if (do_profiling == PROF_YES) {
+ prof_child_exit(&wait_time);
+ }
+
+ return retval;
+}
+
/// Get the stdout of an external command.
/// If "ret_len" is NULL replace NUL characters with NL. When "ret_len" is not
/// NULL store the length there.
diff --git a/src/nvim/misc2.c b/src/nvim/misc2.c
deleted file mode 100644
index 368f83cfb5..0000000000
--- a/src/nvim/misc2.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * misc2.c: Various functions.
- */
-#include <assert.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include "nvim/vim.h"
-#include "nvim/ascii.h"
-#include "nvim/misc2.h"
-#include "nvim/file_search.h"
-#include "nvim/buffer.h"
-#include "nvim/charset.h"
-#include "nvim/cursor.h"
-#include "nvim/diff.h"
-#include "nvim/edit.h"
-#include "nvim/eval.h"
-#include "nvim/ex_cmds.h"
-#include "nvim/ex_docmd.h"
-#include "nvim/ex_getln.h"
-#include "nvim/fileio.h"
-#include "nvim/fold.h"
-#include "nvim/getchar.h"
-#include "nvim/macros.h"
-#include "nvim/mark.h"
-#include "nvim/mbyte.h"
-#include "nvim/memfile.h"
-#include "nvim/memline.h"
-#include "nvim/memory.h"
-#include "nvim/message.h"
-#include "nvim/misc1.h"
-#include "nvim/move.h"
-#include "nvim/option.h"
-#include "nvim/ops.h"
-#include "nvim/os_unix.h"
-#include "nvim/path.h"
-#include "nvim/quickfix.h"
-#include "nvim/regexp.h"
-#include "nvim/screen.h"
-#include "nvim/search.h"
-#include "nvim/spell.h"
-#include "nvim/strings.h"
-#include "nvim/syntax.h"
-#include "nvim/tag.h"
-#include "nvim/ui.h"
-#include "nvim/window.h"
-#include "nvim/os/os.h"
-#include "nvim/os/shell.h"
-
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "misc2.c.generated.h"
-#endif
-/*
- * Return TRUE if in the current mode we need to use virtual.
- */
-int virtual_active(void)
-{
- /* While an operator is being executed we return "virtual_op", because
- * VIsual_active has already been reset, thus we can't check for "block"
- * being used. */
- if (virtual_op != MAYBE)
- return virtual_op;
- return ve_flags == VE_ALL
- || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
- || ((ve_flags & VE_INSERT) && (State & INSERT));
-}
-
-/*
- * Increment the line pointer "lp" crossing line boundaries as necessary.
- * Return 1 when going to the next line.
- * Return 2 when moving forward onto a NUL at the end of the line).
- * Return -1 when at the end of file.
- * Return 0 otherwise.
- */
-int inc(pos_T *lp)
-{
- char_u *p = ml_get_pos(lp);
-
- if (*p != NUL) { /* still within line, move to next char (may be NUL) */
- if (has_mbyte) {
- int l = (*mb_ptr2len)(p);
-
- lp->col += l;
- return (p[l] != NUL) ? 0 : 2;
- }
- lp->col++;
- lp->coladd = 0;
- return (p[1] != NUL) ? 0 : 2;
- }
- if (lp->lnum != curbuf->b_ml.ml_line_count) { /* there is a next line */
- lp->col = 0;
- lp->lnum++;
- lp->coladd = 0;
- return 1;
- }
- return -1;
-}
-
-/*
- * incl(lp): same as inc(), but skip the NUL at the end of non-empty lines
- */
-int incl(pos_T *lp)
-{
- int r;
-
- if ((r = inc(lp)) >= 1 && lp->col)
- r = inc(lp);
- return r;
-}
-
-int dec(pos_T *lp)
-{
- char_u *p;
-
- lp->coladd = 0;
- if (lp->col > 0) { /* still within line */
- lp->col--;
- if (has_mbyte) {
- p = ml_get(lp->lnum);
- lp->col -= (*mb_head_off)(p, p + lp->col);
- }
- return 0;
- }
- if (lp->lnum > 1) { /* there is a prior line */
- lp->lnum--;
- p = ml_get(lp->lnum);
- lp->col = (colnr_T)STRLEN(p);
- if (has_mbyte)
- lp->col -= (*mb_head_off)(p, p + lp->col);
- return 1;
- }
- return -1; /* at start of file */
-}
-
-/*
- * decl(lp): same as dec(), but skip the NUL at the end of non-empty lines
- */
-int decl(pos_T *lp)
-{
- int r;
-
- if ((r = dec(lp)) == 1 && lp->col)
- r = dec(lp);
- return r;
-}
-
-/*
- * Return TRUE when 'shell' has "csh" in the tail.
- */
-int csh_like_shell(void)
-{
- return strstr((char *)path_tail(p_sh), "csh") != NULL;
-}
-
-/*
- * Isolate one part of a string option where parts are separated with
- * "sep_chars".
- * The part is copied into "buf[maxlen]".
- * "*option" is advanced to the next part.
- * The length is returned.
- */
-size_t copy_option_part(char_u **option, char_u *buf, size_t maxlen, char *sep_chars)
-{
- size_t len = 0;
- char_u *p = *option;
-
- /* skip '.' at start of option part, for 'suffixes' */
- if (*p == '.')
- buf[len++] = *p++;
- while (*p != NUL && vim_strchr((char_u *)sep_chars, *p) == NULL) {
- /*
- * Skip backslash before a separator character and space.
- */
- if (p[0] == '\\' && vim_strchr((char_u *)sep_chars, p[1]) != NULL)
- ++p;
- if (len < maxlen - 1)
- buf[len++] = *p;
- ++p;
- }
- buf[len] = NUL;
-
- if (*p != NUL && *p != ',') /* skip non-standard separator */
- ++p;
- p = skip_to_option_part(p); /* p points to next file name */
-
- *option = p;
- return len;
-}
-
-/*
- * Return the current end-of-line type: EOL_DOS, EOL_UNIX or EOL_MAC.
- */
-int get_fileformat(buf_T *buf)
-{
- int c = *buf->b_p_ff;
-
- if (buf->b_p_bin || c == 'u')
- return EOL_UNIX;
- if (c == 'm')
- return EOL_MAC;
- return EOL_DOS;
-}
-
-/*
- * Like get_fileformat(), but override 'fileformat' with "p" for "++opt=val"
- * argument.
- */
-int
-get_fileformat_force (
- buf_T *buf,
- exarg_T *eap /* can be NULL! */
-)
-{
- int c;
-
- if (eap != NULL && eap->force_ff != 0)
- c = eap->cmd[eap->force_ff];
- else {
- if ((eap != NULL && eap->force_bin != 0)
- ? (eap->force_bin == FORCE_BIN) : buf->b_p_bin)
- return EOL_UNIX;
- c = *buf->b_p_ff;
- }
- if (c == 'u')
- return EOL_UNIX;
- if (c == 'm')
- return EOL_MAC;
- return EOL_DOS;
-}
-
-/// Set the current end-of-line type to EOL_UNIX, EOL_MAC, or EOL_DOS.
-///
-/// Sets 'fileformat'.
-///
-/// @param eol_style End-of-line style.
-/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
-void set_fileformat(int eol_style, int opt_flags)
-{
- char *p = NULL;
-
- switch (eol_style) {
- case EOL_UNIX:
- p = FF_UNIX;
- break;
- case EOL_MAC:
- p = FF_MAC;
- break;
- case EOL_DOS:
- p = FF_DOS;
- break;
- }
-
- // p is NULL if "eol_style" is EOL_UNKNOWN.
- if (p != NULL) {
- set_string_option_direct((char_u *)"ff",
- -1,
- (char_u *)p,
- OPT_FREE | opt_flags,
- 0);
- }
-
- // This may cause the buffer to become (un)modified.
- check_status(curbuf);
- redraw_tabline = TRUE;
- need_maketitle = TRUE; // Set window title later.
-}
-
-/*
- * Return the default fileformat from 'fileformats'.
- */
-int default_fileformat(void)
-{
- switch (*p_ffs) {
- case 'm': return EOL_MAC;
- case 'd': return EOL_DOS;
- }
- return EOL_UNIX;
-}
-
-// Call shell. Calls os_call_shell, with 'shellxquote' added.
-int call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)
-{
- char_u *ncmd;
- int retval;
- proftime_T wait_time;
-
- if (p_verbose > 3) {
- verbose_enter();
- smsg(_("Calling shell to execute: \"%s\""),
- cmd == NULL ? p_sh : cmd);
- ui_putc('\n');
- verbose_leave();
- }
-
- if (do_profiling == PROF_YES)
- prof_child_enter(&wait_time);
-
- if (*p_sh == NUL) {
- EMSG(_(e_shellempty));
- retval = -1;
- } else {
- /* The external command may update a tags file, clear cached tags. */
- tag_freematch();
-
- if (cmd == NULL || *p_sxq == NUL)
- retval = os_call_shell(cmd, opts, extra_shell_arg);
- else {
- char_u *ecmd = cmd;
-
- if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0) {
- ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
- }
- ncmd = xmalloc(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1);
- STRCPY(ncmd, p_sxq);
- STRCAT(ncmd, ecmd);
- /* When 'shellxquote' is ( append ).
- * When 'shellxquote' is "( append )". */
- STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
- : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
- : p_sxq);
- retval = os_call_shell(ncmd, opts, extra_shell_arg);
- xfree(ncmd);
-
- if (ecmd != cmd)
- xfree(ecmd);
- }
- }
-
- set_vim_var_nr(VV_SHELL_ERROR, (varnumber_T) retval);
- if (do_profiling == PROF_YES) {
- prof_child_exit(&wait_time);
- }
-
- return retval;
-}
-
-/*
- * VISUAL, SELECTMODE and OP_PENDING State are never set, they are equal to
- * NORMAL State with a condition. This function returns the real State.
- */
-int get_real_state(void)
-{
- if (State & NORMAL) {
- if (VIsual_active) {
- if (VIsual_select)
- return SELECTMODE;
- return VISUAL;
- } else if (finish_op)
- return OP_PENDING;
- }
- return State;
-}
-
-/*
- * Change to a file's directory.
- * Caller must call shorten_fnames()!
- * Return OK or FAIL.
- */
-int vim_chdirfile(char_u *fname)
-{
- char_u dir[MAXPATHL];
-
- STRLCPY(dir, fname, MAXPATHL);
- *path_tail_with_sep(dir) = NUL;
- return os_chdir((char *)dir) == 0 ? OK : FAIL;
-}
-
-/*
- * Change directory to "new_dir". Search 'cdpath' for relative directory names.
- */
-int vim_chdir(char_u *new_dir)
-{
- char_u *dir_name;
- int r;
-
- dir_name = find_directory_in_path(new_dir, STRLEN(new_dir),
- FNAME_MESS, curbuf->b_ffname);
- if (dir_name == NULL)
- return -1;
- r = os_chdir((char *)dir_name);
- xfree(dir_name);
- return r;
-}
-
-/*
- * Read 2 bytes from "fd" and turn them into an int, MSB first.
- */
-int get2c(FILE *fd)
-{
- int n;
-
- n = getc(fd);
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/*
- * Read 3 bytes from "fd" and turn them into an int, MSB first.
- */
-int get3c(FILE *fd)
-{
- int n;
-
- n = getc(fd);
- n = (n << 8) + getc(fd);
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/*
- * Read 4 bytes from "fd" and turn them into an int, MSB first.
- */
-int get4c(FILE *fd)
-{
- /* Use unsigned rather than int otherwise result is undefined
- * when left-shift sets the MSB. */
- unsigned n;
-
- n = (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- return (int)n;
-}
-
-/*
- * Read 8 bytes from "fd" and turn them into a time_t, MSB first.
- */
-time_t get8ctime(FILE *fd)
-{
- time_t n = 0;
- int i;
-
- for (i = 0; i < 8; ++i)
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/// Reads a string of length "cnt" from "fd" into allocated memory.
-/// @return pointer to the string or NULL when unable to read that many bytes.
-char *read_string(FILE *fd, size_t cnt)
-{
- uint8_t *str = xmallocz(cnt);
- for (size_t i = 0; i < cnt; i++) {
- int c = getc(fd);
- if (c == EOF) {
- xfree(str);
- return NULL;
- }
- str[i] = (uint8_t)c;
- }
- return (char *)str;
-}
-
-/// Writes a number to file "fd", most significant bit first, in "len" bytes.
-/// @returns false in case of an error.
-bool put_bytes(FILE *fd, uintmax_t number, size_t len)
-{
- assert(len > 0);
- for (size_t i = len - 1; i < len; i--) {
- if (putc((int)(number >> (i * 8)), fd) == EOF) {
- return false;
- }
- }
- return true;
-}
-
-/// Writes time_t to file "fd" in 8 bytes.
-/// @returns FAIL when the write failed.
-int put_time(FILE *fd, time_t time_)
-{
- uint8_t buf[8];
- time_to_bytes(time_, buf);
- return fwrite(buf, sizeof(uint8_t), ARRAY_SIZE(buf), fd) == 1 ? OK : FAIL;
-}
-
-/// Writes time_t to "buf[8]".
-void time_to_bytes(time_t time_, uint8_t buf[8])
-{
- // time_t can be up to 8 bytes in size, more than uintmax_t in 32 bits
- // systems, thus we can't use put_bytes() here.
- for (size_t i = 7, bufi = 0; bufi < 8; i--, bufi++) {
- buf[bufi] = (uint8_t)((uint64_t)time_ >> (i * 8));
- }
-}
diff --git a/src/nvim/misc2.h b/src/nvim/misc2.h
deleted file mode 100644
index 28b5b775d2..0000000000
--- a/src/nvim/misc2.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef NVIM_MISC2_H
-#define NVIM_MISC2_H
-
-#include "nvim/os/shell.h"
-
-#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "misc2.h.generated.h"
-#endif
-
-#endif // NVIM_MISC2_H
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index 5efac2623c..2ebe199f47 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -4,6 +4,7 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/window.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/screen.h"
#include "nvim/syntax.h"
diff --git a/src/nvim/move.c b/src/nvim/move.c
index b129c5cb7a..4c814f3ae0 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -24,7 +24,6 @@
#include "nvim/mbyte.h"
#include "nvim/memline.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/popupmnu.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
index 5b249ee1c7..cd12f258b6 100644
--- a/src/nvim/msgpack_rpc/channel.c
+++ b/src/nvim/msgpack_rpc/channel.c
@@ -19,6 +19,7 @@
#include "nvim/main.h"
#include "nvim/ascii.h"
#include "nvim/memory.h"
+#include "nvim/eval.h"
#include "nvim/os_unix.h"
#include "nvim/message.h"
#include "nvim/map.h"
@@ -55,12 +56,7 @@ typedef struct {
msgpack_unpacker *unpacker;
union {
Stream stream;
- struct {
- LibuvProcess uvproc;
- Stream in;
- Stream out;
- Stream err;
- } process;
+ Process *proc;
struct {
Stream in;
Stream out;
@@ -79,7 +75,6 @@ typedef struct {
uint64_t request_id;
} RequestEvent;
-static uint64_t next_id = 1;
static PMap(uint64_t) *channels = NULL;
static PMap(cstr_t) *event_strings = NULL;
static msgpack_sbuffer out_buffer;
@@ -112,33 +107,20 @@ void channel_teardown(void)
}
/// Creates an API channel by starting a process and connecting to its
-/// stdin/stdout. stderr is forwarded to the editor error stream.
+/// stdin/stdout. stderr is handled by the job infrastructure.
///
/// @param argv The argument vector for the process. [consumed]
/// @return The channel id (> 0), on success.
/// 0, on error.
-uint64_t channel_from_process(char **argv)
-{
- Channel *channel = register_channel(kChannelTypeProc);
- channel->data.process.uvproc = libuv_process_init(&main_loop, channel);
- Process *proc = &channel->data.process.uvproc.process;
- proc->argv = argv;
- proc->in = &channel->data.process.in;
- proc->out = &channel->data.process.out;
- proc->err = &channel->data.process.err;
- proc->cb = process_exit;
- if (!process_spawn(proc)) {
- loop_poll_events(&main_loop, 0);
- decref(channel);
- return 0;
- }
-
+uint64_t channel_from_process(Process *proc, uint64_t id)
+{
+ Channel *channel = register_channel(kChannelTypeProc, id, proc->events);
incref(channel); // process channels are only closed by the exit_cb
+ channel->data.proc = proc;
+
wstream_init(proc->in, 0);
rstream_init(proc->out, 0);
- rstream_start(proc->out, parse_msgpack);
- rstream_init(proc->err, 0);
- rstream_start(proc->err, forward_stderr);
+ rstream_start(proc->out, parse_msgpack, channel);
return channel->id;
}
@@ -148,14 +130,14 @@ uint64_t channel_from_process(char **argv)
/// @param watcher The SocketWatcher ready to accept the connection
void channel_from_connection(SocketWatcher *watcher)
{
- Channel *channel = register_channel(kChannelTypeSocket);
- socket_watcher_accept(watcher, &channel->data.stream, channel);
+ Channel *channel = register_channel(kChannelTypeSocket, 0, NULL);
+ socket_watcher_accept(watcher, &channel->data.stream);
incref(channel); // close channel only after the stream is closed
channel->data.stream.internal_close_cb = close_cb;
channel->data.stream.internal_data = channel;
wstream_init(&channel->data.stream, 0);
rstream_init(&channel->data.stream, CHANNEL_BUFFER_SIZE);
- rstream_start(&channel->data.stream, parse_msgpack);
+ rstream_start(&channel->data.stream, parse_msgpack, channel);
}
/// Sends event/arguments to channel
@@ -314,30 +296,21 @@ bool channel_close(uint64_t id)
/// Neovim
void channel_from_stdio(void)
{
- Channel *channel = register_channel(kChannelTypeStdio);
+ Channel *channel = register_channel(kChannelTypeStdio, 0, NULL);
incref(channel); // stdio channels are only closed on exit
// read stream
- rstream_init_fd(&main_loop, &channel->data.std.in, 0, CHANNEL_BUFFER_SIZE,
- channel);
- rstream_start(&channel->data.std.in, parse_msgpack);
+ rstream_init_fd(&main_loop, &channel->data.std.in, 0, CHANNEL_BUFFER_SIZE);
+ rstream_start(&channel->data.std.in, parse_msgpack, channel);
// write stream
- wstream_init_fd(&main_loop, &channel->data.std.out, 1, 0, NULL);
+ wstream_init_fd(&main_loop, &channel->data.std.out, 1, 0);
}
-static void forward_stderr(Stream *stream, RBuffer *rbuf, size_t count,
- void *data, bool eof)
+void channel_process_exit(uint64_t id, int status)
{
- while (rbuffer_size(rbuf)) {
- char buf[256];
- size_t read = rbuffer_read(rbuf, buf, sizeof(buf) - 1);
- buf[read] = NUL;
- ELOG("Channel %" PRIu64 " stderr: %s", ((Channel *)data)->id, buf);
- }
-}
+ Channel *channel = pmap_get(uint64_t)(channels, id);
-static void process_exit(Process *proc, int status, void *data)
-{
- decref(data);
+ channel->closed = true;
+ decref(channel);
}
static void parse_msgpack(Stream *stream, RBuffer *rbuf, size_t c, void *data,
@@ -492,8 +465,7 @@ static void on_request_event(void **argv)
} else {
api_free_object(result);
}
- // All arguments were freed already, but we still need to free the array
- xfree(args.items);
+ api_free_array(args);
decref(channel);
xfree(e);
}
@@ -512,7 +484,7 @@ static bool channel_write(Channel *channel, WBuffer *buffer)
success = wstream_write(&channel->data.stream, buffer);
break;
case kChannelTypeProc:
- success = wstream_write(&channel->data.process.in, buffer);
+ success = wstream_write(channel->data.proc->in, buffer);
break;
case kChannelTypeStdio:
success = wstream_write(&channel->data.std.out, buffer);
@@ -637,16 +609,17 @@ static void close_channel(Channel *channel)
switch (channel->type) {
case kChannelTypeSocket:
- stream_close(&channel->data.stream, NULL);
+ stream_close(&channel->data.stream, NULL, NULL);
break;
case kChannelTypeProc:
- if (!channel->data.process.uvproc.process.closed) {
- process_stop(&channel->data.process.uvproc.process);
- }
+ // Only close the rpc channel part,
+ // there could be an error message on the stderr stream
+ process_close_in(channel->data.proc);
+ process_close_out(channel->data.proc);
break;
case kChannelTypeStdio:
- stream_close(&channel->data.std.in, NULL);
- stream_close(&channel->data.std.out, NULL);
+ stream_close(&channel->data.std.in, NULL, NULL);
+ stream_close(&channel->data.std.out, NULL, NULL);
queue_put(main_loop.fast_events, exit_event, 1, channel);
return;
default:
@@ -680,7 +653,9 @@ static void free_channel(Channel *channel)
pmap_free(cstr_t)(channel->subscribed_events);
kv_destroy(channel->call_stack);
kv_destroy(channel->delayed_notifications);
- queue_free(channel->events);
+ if (channel->type != kChannelTypeProc) {
+ queue_free(channel->events);
+ }
xfree(channel);
}
@@ -689,15 +664,15 @@ static void close_cb(Stream *stream, void *data)
decref(data);
}
-static Channel *register_channel(ChannelType type)
+static Channel *register_channel(ChannelType type, uint64_t id, Queue *events)
{
Channel *rv = xmalloc(sizeof(Channel));
- rv->events = queue_new_child(main_loop.events);
+ rv->events = events ? events : queue_new_child(main_loop.events);
rv->type = type;
rv->refcount = 1;
rv->closed = false;
rv->unpacker = msgpack_unpacker_new(MSGPACK_UNPACKER_INIT_BUFFER_SIZE);
- rv->id = next_id++;
+ rv->id = id > 0 ? id : next_chan_id++;
rv->pending_requests = 0;
rv->subscribed_events = pmap_new(cstr_t)();
rv->next_request_id = 1;
diff --git a/src/nvim/msgpack_rpc/channel.h b/src/nvim/msgpack_rpc/channel.h
index 104547a7b8..0d92976d02 100644
--- a/src/nvim/msgpack_rpc/channel.h
+++ b/src/nvim/msgpack_rpc/channel.h
@@ -6,6 +6,7 @@
#include "nvim/api/private/defs.h"
#include "nvim/event/socket.h"
+#include "nvim/event/process.h"
#include "nvim/vim.h"
#define METHOD_MAXLEN 512
diff --git a/src/nvim/msgpack_rpc/defs.h b/src/nvim/msgpack_rpc/defs.h
deleted file mode 100644
index 5611636d4f..0000000000
--- a/src/nvim/msgpack_rpc/defs.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef NVIM_MSGPACK_RPC_DEFS_H
-#define NVIM_MSGPACK_RPC_DEFS_H
-
-
-/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores
-/// functions of this type.
-typedef struct {
- Object (*fn)(uint64_t channel_id,
- uint64_t request_id,
- Array args,
- Error *error);
- bool async; // function is always safe to run immediately instead of being
- // put in a request queue for handling when nvim waits for input.
-} MsgpackRpcRequestHandler;
-
-/// Initializes the msgpack-rpc method table
-void msgpack_rpc_init_method_table(void);
-
-// Add a handler to the method table
-void msgpack_rpc_add_method_handler(String method,
- MsgpackRpcRequestHandler handler);
-
-void msgpack_rpc_init_function_metadata(Dictionary *metadata);
-
-MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name,
- size_t name_len)
- FUNC_ATTR_NONNULL_ARG(1);
-#endif // NVIM_MSGPACK_RPC_DEFS_H
diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c
index 9195b10614..33e9bb1c07 100644
--- a/src/nvim/msgpack_rpc/helpers.c
+++ b/src/nvim/msgpack_rpc/helpers.c
@@ -4,9 +4,9 @@
#include <msgpack.h>
+#include "nvim/api/private/dispatch.h"
#include "nvim/api/private/helpers.h"
#include "nvim/msgpack_rpc/helpers.h"
-#include "nvim/msgpack_rpc/defs.h"
#include "nvim/lib/kvec.h"
#include "nvim/vim.h"
#include "nvim/log.h"
@@ -40,7 +40,7 @@ static msgpack_sbuffer sbuffer;
return false; \
} \
\
- *arg = data.via.u64; \
+ *arg = (handle_T)data.via.i64; \
return true; \
} \
\
@@ -49,7 +49,7 @@ static msgpack_sbuffer sbuffer;
{ \
msgpack_packer pac; \
msgpack_packer_init(&pac, &sbuffer, msgpack_sbuffer_write); \
- msgpack_pack_uint64(&pac, o); \
+ msgpack_pack_int64(&pac, o); \
msgpack_pack_ext(res, sbuffer.size, kObjectType##t); \
msgpack_pack_ext_body(res, sbuffer.data, sbuffer.size); \
msgpack_sbuffer_clear(&sbuffer); \
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index c95e5e1a15..d0a9d3aca7 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -36,7 +36,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
@@ -2110,6 +2109,20 @@ static void op_function(oparg_T *oap)
}
}
+// Move the current tab to tab in same column as mouse or to end of the
+// tabline if there is no tab there.
+static void move_tab_to_mouse(void)
+{
+ int tabnr = tab_page_click_defs[mouse_col].tabnr;
+ if (tabnr <= 0) {
+ tabpage_move(9999);
+ } else if (tabnr < tabpage_index(curtab)) {
+ tabpage_move(tabnr - 1);
+ } else {
+ tabpage_move(tabnr);
+ }
+}
+
/*
* Do the appropriate action for the current mouse click in the current mode.
* Not used for Command-line mode.
@@ -2346,12 +2359,7 @@ do_mouse (
if (mouse_row == 0 && firstwin->w_winrow > 0) {
if (is_drag) {
if (in_tab_line) {
- if (tab_page_click_defs[mouse_col].type == kStlClickTabClose) {
- tabpage_move(9999);
- } else {
- int tabnr = tab_page_click_defs[mouse_col].tabnr;
- tabpage_move(tabnr < tabpage_index(curtab) ? tabnr - 1 : tabnr);
- }
+ move_tab_to_mouse();
}
return false;
}
@@ -2466,10 +2474,7 @@ do_mouse (
}
return true;
} else if (is_drag && in_tab_line) {
- tabpage_move(tab_page_click_defs[mouse_col].type == kStlClickTabClose
- ? 9999
- : tab_page_click_defs[mouse_col].tabnr - 1);
- in_tab_line = false;
+ move_tab_to_mouse();
return false;
}
@@ -5919,6 +5924,9 @@ static void nv_replace(cmdarg_T *cap)
curwin->w_set_curswant = true;
set_last_insert(cap->nchar);
}
+
+ foldUpdateAll(curwin);
+ foldOpenCursor();
}
/*
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index e8a79fa820..388a72adce 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -30,13 +30,13 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/normal.h"
#include "nvim/option.h"
#include "nvim/path.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/terminal.h"
#include "nvim/ui.h"
@@ -51,10 +51,10 @@ static yankreg_T *y_previous = NULL; /* ptr to last written yankreg */
static bool clipboard_didwarn_unnamed = false;
-// for behavior between start_global_changes() and end_global_changes())
+// for behavior between start_batch_changes() and end_batch_changes())
static bool clipboard_delay_update = false; // delay clipboard update
-static int global_change_count = 0; // if set, inside global changes
-static bool clipboard_needs_update = false; // the clipboard was updated
+static int batch_change_count = 0; // inside a script
+static bool clipboard_needs_update = false; // clipboard was updated
/*
* structure used by block_prep, op_delete and op_yank for blockwise operators
@@ -3110,8 +3110,13 @@ error:
if (dir == FORWARD)
curbuf->b_op_start.lnum++;
}
- mark_adjust(curbuf->b_op_start.lnum + (y_type == kMTCharWise),
- (linenr_T)MAXLNUM, nr_lines, 0L);
+ // Skip mark_adjust when adding lines after the last one, there
+ // can't be marks there.
+ if (curbuf->b_op_start.lnum + (y_type == kMTCharWise) - 1 + nr_lines
+ < curbuf->b_ml.ml_line_count) {
+ mark_adjust(curbuf->b_op_start.lnum + (y_type == kMTCharWise),
+ (linenr_T)MAXLNUM, nr_lines, 0L);
+ }
// note changed text for displaying and folding
if (y_type == kMTCharWise) {
@@ -5630,20 +5635,20 @@ static void set_clipboard(int name, yankreg_T *reg)
(void)eval_call_provider("clipboard", "set", args);
}
-/// Avoid clipboard (slow) during batch operations (:global).
-void start_global_changes(void)
+/// Avoid clipboard (slow) during batch operations (i.e., a script).
+void start_batch_changes(void)
{
- if (++global_change_count > 1) {
+ if (++batch_change_count > 1) {
return;
}
clipboard_delay_update = true;
clipboard_needs_update = false;
}
-/// Update the clipboard after :global changes finished.
-void end_global_changes(void)
+/// Update the clipboard after batch changes finished.
+void end_batch_changes(void)
{
- if (--global_change_count > 0) {
+ if (--batch_change_count > 0) {
// recursive
return;
}
diff --git a/src/nvim/option.c b/src/nvim/option.c
index de53b0b1f4..d8908cca90 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -236,6 +236,7 @@ typedef struct vimoption {
#define P_NO_ML 0x2000000U ///< not allowed in modeline
#define P_CURSWANT 0x4000000U ///< update curswant required; not needed
///< when there is a redraw flag
+#define P_NO_DEF_EXP 0x8000000U ///< Do not expand default value.
#define HIGHLIGHT_INIT \
"8:SpecialKey,~:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText," \
@@ -245,7 +246,7 @@ typedef struct vimoption {
"A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal," \
"B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel," \
"x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill," \
- "!:CursorColumn,.:CursorLine,o:ColorColumn"
+ "!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine"
/*
* options[] is initialized here.
@@ -520,6 +521,8 @@ static void set_runtimepath_default(void)
#undef SITE_SIZE
#undef AFTER_SIZE
set_string_default("runtimepath", rtp, true);
+ // Make a copy of 'rtp' for 'packpath'
+ set_string_default("packpath", rtp, false);
xfree(data_dirs);
xfree(config_dirs);
xfree(data_home);
@@ -676,15 +679,18 @@ void set_init_1(void)
#endif
false);
- char *backupdir = stdpaths_user_data_subpath("backup", 0);
+ char *backupdir = stdpaths_user_data_subpath("backup", 0, true);
const size_t backupdir_len = strlen(backupdir);
backupdir = xrealloc(backupdir, backupdir_len + 3);
memmove(backupdir + 2, backupdir, backupdir_len + 1);
memmove(backupdir, ".,", 2);
- set_string_default("viewdir", stdpaths_user_data_subpath("view", 0), true);
+ set_string_default("viewdir", stdpaths_user_data_subpath("view", 0, true),
+ true);
set_string_default("backupdir", backupdir, true);
- set_string_default("directory", stdpaths_user_data_subpath("swap", 2), true);
- set_string_default("undodir", stdpaths_user_data_subpath("undo", 0), true);
+ set_string_default("directory", stdpaths_user_data_subpath("swap", 2, true),
+ true);
+ set_string_default("undodir", stdpaths_user_data_subpath("undo", 0, true),
+ true);
// Set default for &runtimepath. All necessary expansions are performed in
// this function.
set_runtimepath_default();
@@ -726,6 +732,9 @@ void set_init_1(void)
* default.
*/
for (opt_idx = 0; options[opt_idx].fullname; opt_idx++) {
+ if (options[opt_idx].flags & P_NO_DEF_EXP) {
+ continue;
+ }
char *p;
if ((options[opt_idx].flags & P_GETTEXT)
&& options[opt_idx].var != NULL) {
@@ -1473,16 +1482,19 @@ do_set (
* default value was already expanded, only
* required when an environment variable was set
* later */
- if (newval == NULL)
+ new_value_alloced = true;
+ if (newval == NULL) {
newval = empty_option;
- else {
+ } else if (!(options[opt_idx].flags | P_NO_DEF_EXP)) {
s = option_expand(opt_idx, newval);
- if (s == NULL)
+ if (s == NULL) {
s = newval;
+ }
newval = vim_strsave(s);
+ } else {
+ newval = (char_u *)xstrdup((char *)newval);
}
- new_value_alloced = TRUE;
- } else if (nextchar == '<') { /* set to global val */
+ } else if (nextchar == '<') { // set to global val
newval = vim_strsave(*(char_u **)get_varp_scope(
&(options[opt_idx]), OPT_GLOBAL));
new_value_alloced = TRUE;
@@ -2020,13 +2032,15 @@ static char_u *option_expand(int opt_idx, char_u *val)
if (!(options[opt_idx].flags & P_EXPAND) || options[opt_idx].var == NULL)
return NULL;
- /* If val is longer than MAXPATHL no meaningful expansion can be done,
- * expand_env() would truncate the string. */
- if (val != NULL && STRLEN(val) > MAXPATHL)
- return NULL;
-
- if (val == NULL)
+ if (val == NULL) {
val = *(char_u **)options[opt_idx].var;
+ }
+
+ // If val is longer than MAXPATHL no meaningful expansion can be done,
+ // expand_env() would truncate the string.
+ if (val == NULL || STRLEN(val) > MAXPATHL) {
+ return NULL;
+ }
/*
* Expanding this with NameBuff, expand_env() must not be passed IObuff.
@@ -6571,10 +6585,8 @@ int get_sw_value(buf_T *buf)
return (int)result;
}
-/*
- * Return the effective softtabstop value for the current buffer, using the
- * 'tabstop' value when 'softtabstop' is negative.
- */
+// Return the effective softtabstop value for the current buffer,
+// using the effective shiftwidth value when 'softtabstop' is negative.
int get_sts_value(void)
{
long result = curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts;
@@ -6700,3 +6712,148 @@ unsigned int get_bkc_value(buf_T *buf)
{
return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
}
+
+/// Return the current end-of-line type: EOL_DOS, EOL_UNIX or EOL_MAC.
+int get_fileformat(buf_T *buf)
+{
+ int c = *buf->b_p_ff;
+
+ if (buf->b_p_bin || c == 'u') {
+ return EOL_UNIX;
+ }
+ if (c == 'm') {
+ return EOL_MAC;
+ }
+ return EOL_DOS;
+}
+
+/// Like get_fileformat(), but override 'fileformat' with "p" for "++opt=val"
+/// argument.
+///
+/// @param eap can be NULL!
+int get_fileformat_force(buf_T *buf, exarg_T *eap)
+{
+ int c;
+
+ if (eap != NULL && eap->force_ff != 0) {
+ c = eap->cmd[eap->force_ff];
+ } else {
+ if ((eap != NULL && eap->force_bin != 0)
+ ? (eap->force_bin == FORCE_BIN) : buf->b_p_bin) {
+ return EOL_UNIX;
+ }
+ c = *buf->b_p_ff;
+ }
+ if (c == 'u') {
+ return EOL_UNIX;
+ }
+ if (c == 'm') {
+ return EOL_MAC;
+ }
+ return EOL_DOS;
+}
+
+/// Return the default fileformat from 'fileformats'.
+int default_fileformat(void)
+{
+ switch (*p_ffs) {
+ case 'm': return EOL_MAC;
+ case 'd': return EOL_DOS;
+ }
+ return EOL_UNIX;
+}
+
+/// Set the current end-of-line type to EOL_UNIX, EOL_MAC, or EOL_DOS.
+///
+/// Sets 'fileformat'.
+///
+/// @param eol_style End-of-line style.
+/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
+void set_fileformat(int eol_style, int opt_flags)
+{
+ char *p = NULL;
+
+ switch (eol_style) {
+ case EOL_UNIX:
+ p = FF_UNIX;
+ break;
+ case EOL_MAC:
+ p = FF_MAC;
+ break;
+ case EOL_DOS:
+ p = FF_DOS;
+ break;
+ }
+
+ // p is NULL if "eol_style" is EOL_UNKNOWN.
+ if (p != NULL) {
+ set_string_option_direct((char_u *)"ff",
+ -1,
+ (char_u *)p,
+ OPT_FREE | opt_flags,
+ 0);
+ }
+
+ // This may cause the buffer to become (un)modified.
+ check_status(curbuf);
+ redraw_tabline = true;
+ need_maketitle = true; // Set window title later.
+}
+
+/// Skip to next part of an option argument: Skip space and comma.
+char_u *skip_to_option_part(char_u *p)
+{
+ if (*p == ',') {
+ p++;
+ }
+ while (*p == ' ') {
+ p++;
+ }
+ return p;
+}
+
+/// Isolate one part of a string option separated by `sep_chars`.
+///
+/// @param[in,out] option advanced to the next part
+/// @param[in,out] buf copy of the isolated part
+/// @param[in] maxlen length of `buf`
+/// @param[in] sep_chars chars that separate the option parts
+///
+/// @return length of `*option`
+size_t copy_option_part(char_u **option, char_u *buf, size_t maxlen,
+ char *sep_chars)
+{
+ size_t len = 0;
+ char_u *p = *option;
+
+ // skip '.' at start of option part, for 'suffixes'
+ if (*p == '.') {
+ buf[len++] = *p++;
+ }
+ while (*p != NUL && vim_strchr((char_u *)sep_chars, *p) == NULL) {
+ // Skip backslash before a separator character and space.
+ if (p[0] == '\\' && vim_strchr((char_u *)sep_chars, p[1]) != NULL) {
+ p++;
+ }
+ if (len < maxlen - 1) {
+ buf[len++] = *p;
+ }
+ p++;
+ }
+ buf[len] = NUL;
+
+ if (*p != NUL && *p != ',') { // skip non-standard separator
+ p++;
+ }
+ p = skip_to_option_part(p); // p points to next file name
+
+ *option = p;
+ return len;
+}
+
+/// Return TRUE when 'shell' has "csh" in the tail.
+int csh_like_shell(void)
+{
+ return strstr((char *)path_tail(p_sh), "csh") != NULL;
+}
+
diff --git a/src/nvim/option.h b/src/nvim/option.h
index 5c2b2662b5..cf167cdd2c 100644
--- a/src/nvim/option.h
+++ b/src/nvim/option.h
@@ -1,22 +1,25 @@
#ifndef NVIM_OPTION_H
#define NVIM_OPTION_H
+#include "nvim/ex_cmds_defs.h" // for exarg_T
+
/* flags for buf_copy_options() */
#define BCO_ENTER 1 /* going to enter the buffer */
#define BCO_ALWAYS 2 /* always copy the options */
#define BCO_NOHELP 4 /* don't touch the help related options */
-/*
- * "flags" values for option-setting functions.
- * When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
- * values, get local value.
- */
-#define OPT_FREE 1 /* free old value if it was allocated */
-#define OPT_GLOBAL 2 /* use global value */
-#define OPT_LOCAL 4 /* use local value */
-#define OPT_MODELINE 8 /* option in modeline */
-#define OPT_WINONLY 16 /* only set window-local options */
-#define OPT_NOWIN 32 /* don't set window-local options */
+/// Flags for option-setting functions
+///
+/// When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
+/// values, get local value.
+typedef enum {
+ OPT_FREE = 1, ///< Free old value if it was allocated.
+ OPT_GLOBAL = 2, ///< Use global value.
+ OPT_LOCAL = 4, ///< Use local value.
+ OPT_MODELINE = 8, ///< Option in modeline.
+ OPT_WINONLY = 16, ///< Only set window-local options.
+ OPT_NOWIN = 32, ///< Don’t set window-local options.
+} OptionFlags;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "option.h.generated.h"
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index 8d6f42e088..e36cceaaf4 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -370,17 +370,17 @@ static char *(p_cb_values[]) = {"unnamed", "unnamedplus", NULL};
# define CB_UNNAMED 0x001
# define CB_UNNAMEDPLUS 0x002
# define CB_UNNAMEDMASK (CB_UNNAMED | CB_UNNAMEDPLUS)
-EXTERN long p_cwh; /* 'cmdwinheight' */
-EXTERN long p_ch; /* 'cmdheight' */
-EXTERN int p_confirm; /* 'confirm' */
-EXTERN int p_cp; /* 'compatible' */
-EXTERN char_u *p_cot; /* 'completeopt' */
-EXTERN long p_ph; /* 'pumheight' */
-EXTERN char_u *p_cpo; /* 'cpoptions' */
-EXTERN char_u *p_csprg; /* 'cscopeprg' */
-EXTERN int p_csre; /* 'cscoperelative' */
-EXTERN char_u *p_csqf; /* 'cscopequickfix' */
-# define CSQF_CMDS "sgdctefi"
+EXTERN long p_cwh; // 'cmdwinheight'
+EXTERN long p_ch; // 'cmdheight'
+EXTERN int p_confirm; // 'confirm'
+EXTERN int p_cp; // 'compatible'
+EXTERN char_u *p_cot; // 'completeopt'
+EXTERN long p_ph; // 'pumheight'
+EXTERN char_u *p_cpo; // 'cpoptions'
+EXTERN char_u *p_csprg; // 'cscopeprg'
+EXTERN int p_csre; // 'cscoperelative'
+EXTERN char_u *p_csqf; // 'cscopequickfix'
+# define CSQF_CMDS "sgdctefia"
# define CSQF_FLAGS "+-0"
EXTERN int p_cst; /* 'cscopetag' */
EXTERN long p_csto; /* 'cscopetagorder' */
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index d19af4f73f..060ec8c1e1 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -165,7 +165,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_bdir',
defaults={if_true={vi=''}}
},
@@ -616,7 +616,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_dir',
defaults={if_true={vi=''}}
},
@@ -1891,7 +1891,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_rtp',
defaults={if_true={vi=''}}
},
@@ -2507,7 +2507,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_udir',
defaults={if_true={vi=''}}
},
@@ -2568,7 +2568,7 @@ return {
type='string', scope={'global'},
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_vdir',
defaults={if_true={vi=''}}
},
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index edc430410c..83a0262545 100644
--- a/src/nvim/os/env.c
+++ b/src/nvim/os/env.c
@@ -12,7 +12,6 @@
#include "nvim/os/os.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/path.h"
#include "nvim/strings.h"
#include "nvim/eval.h"
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c
index cd943c4843..008952fa97 100644
--- a/src/nvim/os/fs.c
+++ b/src/nvim/os/fs.c
@@ -21,7 +21,6 @@
#include "nvim/message.h"
#include "nvim/assert.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/path.h"
#include "nvim/strings.h"
@@ -399,14 +398,7 @@ ptrdiff_t os_read(const int fd, bool *ret_eof, char *const ret_buf,
assert(read_bytes <= size);
}
if (cur_read_bytes < 0) {
-#ifdef HAVE_UV_TRANSLATE_SYS_ERROR
- const int error = uv_translate_sys_error(errno);
-#else
- const int error = -errno;
- STATIC_ASSERT(-EINTR == UV_EINTR, "Need to translate error codes");
- STATIC_ASSERT(-EAGAIN == UV_EAGAIN, "Need to translate error codes");
- STATIC_ASSERT(-ENOMEM == UV_ENOMEM, "Need to translate error codes");
-#endif
+ const int error = os_translate_sys_error(errno);
errno = 0;
if (error == UV_EINTR || error == UV_EAGAIN) {
continue;
@@ -469,14 +461,7 @@ ptrdiff_t os_readv(int fd, bool *ret_eof, struct iovec *iov, size_t iov_size)
}
}
} else if (cur_read_bytes < 0) {
-#ifdef HAVE_UV_TRANSLATE_SYS_ERROR
- const int error = uv_translate_sys_error(errno);
-#else
- const int error = -errno;
- STATIC_ASSERT(-EINTR == UV_EINTR, "Need to translate error codes");
- STATIC_ASSERT(-EAGAIN == UV_EAGAIN, "Need to translate error codes");
- STATIC_ASSERT(-ENOMEM == UV_ENOMEM, "Need to translate error codes");
-#endif
+ const int error = os_translate_sys_error(errno);
errno = 0;
if (error == UV_EINTR || error == UV_EAGAIN) {
continue;
@@ -515,15 +500,7 @@ ptrdiff_t os_write(const int fd, const char *const buf, const size_t size)
written_bytes += (size_t)cur_written_bytes;
}
if (cur_written_bytes < 0) {
-#ifdef HAVE_UV_TRANSLATE_SYS_ERROR
- const int error = uv_translate_sys_error(errno);
-#else
- const int error = -errno;
- STATIC_ASSERT(-EINTR == UV_EINTR, "Need to translate error codes");
- STATIC_ASSERT(-EAGAIN == UV_EAGAIN, "Need to translate error codes");
- // According to the man page open() may fail with ENOMEM, but write()
- // can’t.
-#endif
+ const int error = os_translate_sys_error(errno);
errno = 0;
if (error == UV_EINTR || error == UV_EAGAIN) {
continue;
@@ -1023,3 +1000,126 @@ shortcut_end:
}
#endif
+
+int os_translate_sys_error(int sys_errno) {
+#ifdef HAVE_UV_TRANSLATE_SYS_ERROR
+ return uv_translate_sys_error(sys_errno);
+#elif WIN32
+ // TODO(equalsraf): libuv does not yet expose uv_translate_sys_error()
+ // in its public API, include a version here until it can be used.
+ // See https://github.com/libuv/libuv/issues/79
+# ifndef ERROR_SYMLINK_NOT_SUPPORTED
+# define ERROR_SYMLINK_NOT_SUPPORTED 1464
+# endif
+
+ if (sys_errno <= 0) {
+ return sys_errno; // If < 0 then it's already a libuv error
+ }
+
+ switch (sys_errno) {
+ case ERROR_NOACCESS: return UV_EACCES;
+ case WSAEACCES: return UV_EACCES;
+ case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE;
+ case WSAEADDRINUSE: return UV_EADDRINUSE;
+ case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL;
+ case WSAEAFNOSUPPORT: return UV_EAFNOSUPPORT;
+ case WSAEWOULDBLOCK: return UV_EAGAIN;
+ case WSAEALREADY: return UV_EALREADY;
+ case ERROR_INVALID_FLAGS: return UV_EBADF;
+ case ERROR_INVALID_HANDLE: return UV_EBADF;
+ case ERROR_LOCK_VIOLATION: return UV_EBUSY;
+ case ERROR_PIPE_BUSY: return UV_EBUSY;
+ case ERROR_SHARING_VIOLATION: return UV_EBUSY;
+ case ERROR_OPERATION_ABORTED: return UV_ECANCELED;
+ case WSAEINTR: return UV_ECANCELED;
+ case ERROR_NO_UNICODE_TRANSLATION: return UV_ECHARSET;
+ case ERROR_CONNECTION_ABORTED: return UV_ECONNABORTED;
+ case WSAECONNABORTED: return UV_ECONNABORTED;
+ case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED;
+ case WSAECONNREFUSED: return UV_ECONNREFUSED;
+ case ERROR_NETNAME_DELETED: return UV_ECONNRESET;
+ case WSAECONNRESET: return UV_ECONNRESET;
+ case ERROR_ALREADY_EXISTS: return UV_EEXIST;
+ case ERROR_FILE_EXISTS: return UV_EEXIST;
+ case ERROR_BUFFER_OVERFLOW: return UV_EFAULT;
+ case WSAEFAULT: return UV_EFAULT;
+ case ERROR_HOST_UNREACHABLE: return UV_EHOSTUNREACH;
+ case WSAEHOSTUNREACH: return UV_EHOSTUNREACH;
+ case ERROR_INSUFFICIENT_BUFFER: return UV_EINVAL;
+ case ERROR_INVALID_DATA: return UV_EINVAL;
+ case ERROR_INVALID_PARAMETER: return UV_EINVAL;
+ case ERROR_SYMLINK_NOT_SUPPORTED: return UV_EINVAL;
+ case WSAEINVAL: return UV_EINVAL;
+ case WSAEPFNOSUPPORT: return UV_EINVAL;
+ case WSAESOCKTNOSUPPORT: return UV_EINVAL;
+ case ERROR_BEGINNING_OF_MEDIA: return UV_EIO;
+ case ERROR_BUS_RESET: return UV_EIO;
+ case ERROR_CRC: return UV_EIO;
+ case ERROR_DEVICE_DOOR_OPEN: return UV_EIO;
+ case ERROR_DEVICE_REQUIRES_CLEANING: return UV_EIO;
+ case ERROR_DISK_CORRUPT: return UV_EIO;
+ case ERROR_EOM_OVERFLOW: return UV_EIO;
+ case ERROR_FILEMARK_DETECTED: return UV_EIO;
+ case ERROR_GEN_FAILURE: return UV_EIO;
+ case ERROR_INVALID_BLOCK_LENGTH: return UV_EIO;
+ case ERROR_IO_DEVICE: return UV_EIO;
+ case ERROR_NO_DATA_DETECTED: return UV_EIO;
+ case ERROR_NO_SIGNAL_SENT: return UV_EIO;
+ case ERROR_OPEN_FAILED: return UV_EIO;
+ case ERROR_SETMARK_DETECTED: return UV_EIO;
+ case ERROR_SIGNAL_REFUSED: return UV_EIO;
+ case WSAEISCONN: return UV_EISCONN;
+ case ERROR_CANT_RESOLVE_FILENAME: return UV_ELOOP;
+ case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE;
+ case WSAEMFILE: return UV_EMFILE;
+ case WSAEMSGSIZE: return UV_EMSGSIZE;
+ case ERROR_FILENAME_EXCED_RANGE: return UV_ENAMETOOLONG;
+ case ERROR_NETWORK_UNREACHABLE: return UV_ENETUNREACH;
+ case WSAENETUNREACH: return UV_ENETUNREACH;
+ case WSAENOBUFS: return UV_ENOBUFS;
+ case ERROR_BAD_PATHNAME: return UV_ENOENT;
+ case ERROR_DIRECTORY: return UV_ENOENT;
+ case ERROR_FILE_NOT_FOUND: return UV_ENOENT;
+ case ERROR_INVALID_NAME: return UV_ENOENT;
+ case ERROR_INVALID_DRIVE: return UV_ENOENT;
+ case ERROR_INVALID_REPARSE_DATA: return UV_ENOENT;
+ case ERROR_MOD_NOT_FOUND: return UV_ENOENT;
+ case ERROR_PATH_NOT_FOUND: return UV_ENOENT;
+ case WSAHOST_NOT_FOUND: return UV_ENOENT;
+ case WSANO_DATA: return UV_ENOENT;
+ case ERROR_NOT_ENOUGH_MEMORY: return UV_ENOMEM;
+ case ERROR_OUTOFMEMORY: return UV_ENOMEM;
+ case ERROR_CANNOT_MAKE: return UV_ENOSPC;
+ case ERROR_DISK_FULL: return UV_ENOSPC;
+ case ERROR_EA_TABLE_FULL: return UV_ENOSPC;
+ case ERROR_END_OF_MEDIA: return UV_ENOSPC;
+ case ERROR_HANDLE_DISK_FULL: return UV_ENOSPC;
+ case ERROR_NOT_CONNECTED: return UV_ENOTCONN;
+ case WSAENOTCONN: return UV_ENOTCONN;
+ case ERROR_DIR_NOT_EMPTY: return UV_ENOTEMPTY;
+ case WSAENOTSOCK: return UV_ENOTSOCK;
+ case ERROR_NOT_SUPPORTED: return UV_ENOTSUP;
+ case ERROR_BROKEN_PIPE: return UV_EOF;
+ case ERROR_ACCESS_DENIED: return UV_EPERM;
+ case ERROR_PRIVILEGE_NOT_HELD: return UV_EPERM;
+ case ERROR_BAD_PIPE: return UV_EPIPE;
+ case ERROR_NO_DATA: return UV_EPIPE;
+ case ERROR_PIPE_NOT_CONNECTED: return UV_EPIPE;
+ case WSAESHUTDOWN: return UV_EPIPE;
+ case WSAEPROTONOSUPPORT: return UV_EPROTONOSUPPORT;
+ case ERROR_WRITE_PROTECT: return UV_EROFS;
+ case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT;
+ case WSAETIMEDOUT: return UV_ETIMEDOUT;
+ case ERROR_NOT_SAME_DEVICE: return UV_EXDEV;
+ case ERROR_INVALID_FUNCTION: return UV_EISDIR;
+ case ERROR_META_EXPANSION_TOO_LONG: return UV_E2BIG;
+ default: return UV_UNKNOWN;
+ }
+#else
+ const int error = -errno;
+ STATIC_ASSERT(-EINTR == UV_EINTR, "Need to translate error codes");
+ STATIC_ASSERT(-EAGAIN == UV_EAGAIN, "Need to translate error codes");
+ STATIC_ASSERT(-ENOMEM == UV_ENOMEM, "Need to translate error codes");
+ return error;
+#endif
+}
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index 0c46dc96ee..6873e32f34 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -19,7 +19,7 @@
#include "nvim/getchar.h"
#include "nvim/main.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
+#include "nvim/state.h"
#define READ_BUFFER_SIZE 0xfff
#define INPUT_BUFFER_SIZE (READ_BUFFER_SIZE * 4)
@@ -60,8 +60,8 @@ void input_start(int fd)
}
global_fd = fd;
- rstream_init_fd(&main_loop, &read_stream, fd, READ_BUFFER_SIZE, NULL);
- rstream_start(&read_stream, read_cb);
+ rstream_init_fd(&main_loop, &read_stream, fd, READ_BUFFER_SIZE);
+ rstream_start(&read_stream, read_cb, NULL);
}
void input_stop(void)
@@ -71,7 +71,7 @@ void input_stop(void)
}
rstream_stop(&read_stream);
- stream_close(&read_stream, NULL);
+ stream_close(&read_stream, NULL, NULL);
}
static void cursorhold_event(void **argv)
@@ -266,29 +266,32 @@ static unsigned int handle_mouse_event(char **ptr, uint8_t *buf,
}
static int orig_num_clicks = 0;
- static int orig_mouse_code = 0;
- static int orig_mouse_col = 0;
- static int orig_mouse_row = 0;
- static uint64_t orig_mouse_time = 0; // time of previous mouse click
- uint64_t mouse_time = os_hrtime(); // time of current mouse click
-
- // compute the time elapsed since the previous mouse click and
- // convert p_mouse from ms to ns
- uint64_t timediff = mouse_time - orig_mouse_time;
- uint64_t mouset = (uint64_t)p_mouset * 1000000;
- if (mouse_code == orig_mouse_code
- && timediff < mouset
- && orig_num_clicks != 4
- && orig_mouse_col == mouse_col
- && orig_mouse_row == mouse_row) {
- orig_num_clicks++;
- } else {
- orig_num_clicks = 1;
+ if (mouse_code != KE_LEFTRELEASE && mouse_code != KE_RIGHTRELEASE
+ && mouse_code != KE_MIDDLERELEASE) {
+ static int orig_mouse_code = 0;
+ static int orig_mouse_col = 0;
+ static int orig_mouse_row = 0;
+ static uint64_t orig_mouse_time = 0; // time of previous mouse click
+ uint64_t mouse_time = os_hrtime(); // time of current mouse click (ns)
+
+ // compute the time elapsed since the previous mouse click and
+ // convert p_mouse from ms to ns
+ uint64_t timediff = mouse_time - orig_mouse_time;
+ uint64_t mouset = (uint64_t)p_mouset * 1000000;
+ if (mouse_code == orig_mouse_code
+ && timediff < mouset
+ && orig_num_clicks != 4
+ && orig_mouse_col == mouse_col
+ && orig_mouse_row == mouse_row) {
+ orig_num_clicks++;
+ } else {
+ orig_num_clicks = 1;
+ }
+ orig_mouse_code = mouse_code;
+ orig_mouse_col = mouse_col;
+ orig_mouse_row = mouse_row;
+ orig_mouse_time = mouse_time;
}
- orig_mouse_code = mouse_code;
- orig_mouse_col = mouse_col;
- orig_mouse_row = mouse_row;
- orig_mouse_time = mouse_time;
uint8_t modifiers = 0;
if (orig_num_clicks == 2) {
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c
index 64c673930a..661b12accc 100644
--- a/src/nvim/os/shell.c
+++ b/src/nvim/os/shell.c
@@ -19,7 +19,6 @@
#include "nvim/message.h"
#include "nvim/memory.h"
#include "nvim/ui.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/memline.h"
#include "nvim/option_defs.h"
@@ -54,12 +53,12 @@ char **shell_build_argv(const char *cmd, const char *extra_args)
size_t i = tokenize(p_sh, rv);
if (extra_args) {
- rv[i++] = xstrdup(extra_args); // Push a copy of `extra_args`
+ rv[i++] = xstrdup(extra_args); // Push a copy of `extra_args`
}
if (cmd) {
- i += tokenize(p_shcf, rv + i); // Split 'shellcmdflag'
- rv[i++] = xstrdup(cmd); // Push a copy of the command.
+ i += tokenize(p_shcf, rv + i); // Split 'shellcmdflag'
+ rv[i++] = shell_xescape_xquote(cmd); // Copy (and escape) `cmd`.
}
rv[i] = NULL;
@@ -236,10 +235,10 @@ static int do_os_system(char **argv,
}
proc->out->events = NULL;
rstream_init(proc->out, 0);
- rstream_start(proc->out, data_cb);
+ rstream_start(proc->out, data_cb, &buf);
proc->err->events = NULL;
rstream_init(proc->err, 0);
- rstream_start(proc->err, data_cb);
+ rstream_start(proc->err, data_cb, &buf);
// write the input, if any
if (input) {
@@ -251,7 +250,7 @@ static int do_os_system(char **argv,
return -1;
}
// close the input stream after everything is written
- wstream_set_write_cb(&in, shell_write_cb);
+ wstream_set_write_cb(&in, shell_write_cb, NULL);
}
// invoke busy_start here so event_poll_until wont change the busy state for
@@ -546,5 +545,41 @@ static size_t write_output(char *output, size_t remaining, bool to_buffer,
static void shell_write_cb(Stream *stream, void *data, int status)
{
- stream_close(stream, NULL);
+ stream_close(stream, NULL, NULL);
}
+
+/// Applies 'shellxescape' (p_sxe) and 'shellxquote' (p_sxq) to a command.
+///
+/// @param cmd Command string
+/// @return Escaped/quoted command string (allocated).
+static char *shell_xescape_xquote(const char *cmd)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (*p_sxq == NUL) {
+ return xstrdup(cmd);
+ }
+
+ const char *ecmd = cmd;
+ if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0) {
+ ecmd = (char *)vim_strsave_escaped_ext((char_u *)cmd, p_sxe, '^', false);
+ }
+ size_t ncmd_size = strlen(ecmd) + STRLEN(p_sxq) * 2 + 1;
+ char *ncmd = xmalloc(ncmd_size);
+
+ // When 'shellxquote' is ( append ).
+ // When 'shellxquote' is "( append )".
+ if (STRCMP(p_sxq, "(") == 0) {
+ vim_snprintf(ncmd, ncmd_size, "(%s)", ecmd);
+ } else if (STRCMP(p_sxq, "\"(") == 0) {
+ vim_snprintf(ncmd, ncmd_size, "\"(%s)\"", ecmd);
+ } else {
+ vim_snprintf(ncmd, ncmd_size, "%s%s%s", p_sxq, ecmd, p_sxq);
+ }
+
+ if (ecmd != cmd) {
+ xfree((void *)ecmd);
+ }
+
+ return ncmd;
+}
+
diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c
index 4abc9cfc36..1ac6d3f5e1 100644
--- a/src/nvim/os/signal.c
+++ b/src/nvim/os/signal.c
@@ -2,6 +2,9 @@
#include <stdbool.h>
#include <uv.h>
+#ifndef WIN32
+# include <signal.h> // for sigset_t
+#endif
#include "nvim/ascii.h"
#include "nvim/vim.h"
@@ -11,7 +14,6 @@
#include "nvim/main.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/event/signal.h"
#include "nvim/os/signal.h"
#include "nvim/event/loop.h"
@@ -29,6 +31,16 @@ static bool rejecting_deadly;
void signal_init(void)
{
+#ifndef WIN32
+ // Ensure a clean slate by unblocking all signals. For example, if SIGCHLD is
+ // blocked, libuv may hang after spawning a subprocess on Linux. #5230
+ sigset_t mask;
+ sigemptyset(&mask);
+ if (pthread_sigmask(SIG_SETMASK, &mask, NULL) != 0) {
+ ELOG("Could not unblock signals, nvim might behave strangely.");
+ }
+#endif
+
signal_watcher_init(&main_loop, &spipe, NULL);
signal_watcher_init(&main_loop, &shup, NULL);
signal_watcher_init(&main_loop, &squit, NULL);
diff --git a/src/nvim/os/stdpaths.c b/src/nvim/os/stdpaths.c
index 81ceb919c4..10b3f4c091 100644
--- a/src/nvim/os/stdpaths.c
+++ b/src/nvim/os/stdpaths.c
@@ -100,18 +100,30 @@ char *stdpaths_user_conf_subpath(const char *fname)
///
/// @param[in] fname New component of the path.
/// @param[in] trailing_pathseps Amount of trailing path separators to add.
+/// @param[in] escape_commas If true, all commas will be escaped.
///
-/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`
+/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`.
char *stdpaths_user_data_subpath(const char *fname,
- const size_t trailing_pathseps)
+ const size_t trailing_pathseps,
+ const bool escape_commas)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
char *ret = concat_fnames_realloc(get_xdg_home(kXDGDataHome), fname, true);
- if (trailing_pathseps) {
- const size_t len = strlen(ret);
- ret = xrealloc(ret, len + trailing_pathseps + 1);
- memset(ret + len, PATHSEP, trailing_pathseps);
- ret[len + trailing_pathseps] = NUL;
+ const size_t len = strlen(ret);
+ const size_t numcommas = (escape_commas ? memcnt(ret, ',', len) : 0);
+ if (numcommas || trailing_pathseps) {
+ ret = xrealloc(ret, len + trailing_pathseps + numcommas + 1);
+ for (size_t i = 0 ; i < len + numcommas ; i++) {
+ if (ret[i] == ',') {
+ memmove(ret + i + 1, ret + i, len - i + numcommas);
+ ret[i] = '\\';
+ i++;
+ }
+ }
+ if (trailing_pathseps) {
+ memset(ret + len + numcommas, PATHSEP, trailing_pathseps);
+ }
+ ret[len + trailing_pathseps + numcommas] = NUL;
}
return ret;
}
diff --git a/src/nvim/os/users.c b/src/nvim/os/users.c
index 8ebb7562ef..1c94ef0067 100644
--- a/src/nvim/os/users.c
+++ b/src/nvim/os/users.c
@@ -6,7 +6,6 @@
#include "nvim/os/os.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
#include "nvim/strings.h"
#ifdef HAVE_PWD_H
# include <pwd.h>
diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c
index def7e3b0e5..08294fa6a0 100644
--- a/src/nvim/os_unix.c
+++ b/src/nvim/os_unix.c
@@ -27,7 +27,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/mouse.h"
#include "nvim/garray.h"
#include "nvim/path.h"
diff --git a/src/nvim/path.c b/src/nvim/path.c
index 57499429ec..a79b7139f1 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -18,7 +18,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/os/os.h"
#include "nvim/os/shell.h"
@@ -172,19 +171,23 @@ char_u *path_next_component(char_u *fname)
return fname;
}
-/*
- * Get a pointer to one character past the head of a path name.
- * Unix: after "/"; DOS: after "c:\"; Mac: no head.
- * If there is no head, path is returned.
- */
+/// Get a pointer to one character past the head of a path name.
+/// Unix: after "/"; Win: after "c:\"
+/// If there is no head, path is returned.
char_u *get_past_head(char_u *path)
{
- char_u *retval;
+ char_u *retval = path;
- retval = path;
+#ifdef WIN32
+ // May skip "c:"
+ if (isalpha(path[0]) && path[1] == ':') {
+ retval = path + 2;
+ }
+#endif
- while (vim_ispathsep(*retval))
+ while (vim_ispathsep(*retval)) {
++retval;
+ }
return retval;
}
@@ -562,11 +565,12 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,
while (*path_end != NUL) {
/* May ignore a wildcard that has a backslash before it; it will
* be removed by rem_backslash() or file_pat_to_reg_pat() below. */
- if (path_end >= path + wildoff && rem_backslash(path_end))
+ if (path_end >= path + wildoff && rem_backslash(path_end)) {
*p++ = *path_end++;
- else if (*path_end == '/') {
- if (e != NULL)
+ } else if (vim_ispathsep_nocolon(*path_end)) {
+ if (e != NULL) {
break;
+ }
s = p + 1;
} else if (path_end >= path + wildoff
&& (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
@@ -2099,7 +2103,6 @@ int path_full_dir_name(char *directory, char *buffer, size_t len)
}
// Append to_append to path with a slash in between.
-// Append to_append to path with a slash in between.
int append_path(char *path, const char *to_append, size_t max_len)
{
size_t current_length = strlen(path);
@@ -2116,7 +2119,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
}
// Glue both paths with a slash.
- if (current_length > 0 && path[current_length-1] != '/') {
+ if (current_length > 0 && !vim_ispathsep_nocolon(path[current_length-1])) {
current_length += 1; // Count the trailing slash.
// +1 for the NUL at the end.
@@ -2124,7 +2127,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
return FAIL;
}
- STRCAT(path, "/");
+ STRCAT(path, PATHSEPSTR);
}
// +1 for the NUL at the end.
@@ -2182,9 +2185,16 @@ static int path_get_absolute_path(const char_u *fname, char_u *buf,
/// Check if the given file is absolute.
///
-/// This just checks if the file name starts with '/' or '~'.
/// @return `TRUE` if "fname" is absolute.
int path_is_absolute_path(const char_u *fname)
{
+#ifdef WIN32
+ // A name like "d:/foo" and "//server/share" is absolute
+ return ((isalpha(fname[0]) && fname[1] == ':'
+ && vim_ispathsep_nocolon(fname[2]))
+ || (vim_ispathsep_nocolon(fname[0]) && fname[0] == fname[1]));
+#else
+ // UNIX: This just checks if the file name starts with '/' or '~'.
return *fname == '/' || *fname == '~';
+#endif
}
diff --git a/src/nvim/po/af.po b/src/nvim/po/af.po
index 6bb93b9e02..8f06ed178c 100644
--- a/src/nvim/po/af.po
+++ b/src/nvim/po/af.po
@@ -4305,10 +4305,6 @@ msgstr "rel %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ongeldige registernaam: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Boodskappe onderhouers: Danie Roux en Jean Jordaan <droux@tuks.co.za>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Onderbreek: "
diff --git a/src/nvim/po/ca.po b/src/nvim/po/ca.po
index 79434cfdcd..2b0d7611d0 100644
--- a/src/nvim/po/ca.po
+++ b/src/nvim/po/ca.po
@@ -4293,10 +4293,6 @@ msgstr "lnia %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: El nom de registre no s vlid: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Traducci dels missatges: Ernest Adrogu <eadrogue@gmx.net>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrupci: "
diff --git a/src/nvim/po/cs.cp1250.po b/src/nvim/po/cs.cp1250.po
index 1e62034317..339dfe6ae5 100644
--- a/src/nvim/po/cs.cp1250.po
+++ b/src/nvim/po/cs.cp1250.po
@@ -4378,10 +4378,6 @@ msgstr "dek %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nen ppustn jmno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Sprvce zprv: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Peruen: "
diff --git a/src/nvim/po/cs.po b/src/nvim/po/cs.po
index dd7016fedb..5c19eecf32 100644
--- a/src/nvim/po/cs.po
+++ b/src/nvim/po/cs.po
@@ -4378,10 +4378,6 @@ msgstr "dek %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nen ppustn jmno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Sprvce zprv: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Peruen: "
diff --git a/src/nvim/po/en_GB.po b/src/nvim/po/en_GB.po
index b4b38e11e3..41e4cd895d 100644
--- a/src/nvim/po/en_GB.po
+++ b/src/nvim/po/en_GB.po
@@ -4128,10 +4128,6 @@ msgstr ""
msgid "E354: Invalid register name: '%s'"
msgstr ""
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Messages maintainer: Mike Williams <mrw@eandem.co.uk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ""
diff --git a/src/nvim/po/eo.po b/src/nvim/po/eo.po
index 6bc76506ae..153eacc7b8 100644
--- a/src/nvim/po/eo.po
+++ b/src/nvim/po/eo.po
@@ -4295,10 +4295,6 @@ msgstr "linio %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nevalida nomo de reĝistro: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Flegado de mesaĝoj: Dominique PELLÉ <dominique.pelle@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrompo: "
diff --git a/src/nvim/po/es.po b/src/nvim/po/es.po
index 8a9c86e88d..9a3bfa6894 100644
--- a/src/nvim/po/es.po
+++ b/src/nvim/po/es.po
@@ -4377,12 +4377,6 @@ msgstr "línea %4ld"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nombre de registro no válido: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Traducción: Proyecto vim-doc-es <http://www.assembla.com/wiki/show/vim-doc-"
-"es>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrupción: "
diff --git a/src/nvim/po/fi.po b/src/nvim/po/fi.po
index d4082135aa..6dfaa78a77 100644
--- a/src/nvim/po/fi.po
+++ b/src/nvim/po/fi.po
@@ -4275,10 +4275,6 @@ msgstr "rivi %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Virheellinen rekisterin nimi: %s"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Knnksen yllpitj: Flammie Pirinen <flammie@iki.fi>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Keskeytys: "
diff --git a/src/nvim/po/fr.po b/src/nvim/po/fr.po
index 41efd5c5e3..a16a939117 100644
--- a/src/nvim/po/fr.po
+++ b/src/nvim/po/fr.po
@@ -4479,10 +4479,6 @@ msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nom de registre invalide : '%s'"
# DB - todo : mettre jour ?
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Maintenance des messages : Dominique Pell <dominique.pelle@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interruption : "
diff --git a/src/nvim/po/ga.po b/src/nvim/po/ga.po
index f7117c6e86..d94b788449 100644
--- a/src/nvim/po/ga.po
+++ b/src/nvim/po/ga.po
@@ -4286,11 +4286,6 @@ msgstr "lne %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ainm neamhbhail tabhaill: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Cothaitheoir na dteachtaireachta: Kevin P. Scannell <scannell@slu.edu>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Idirbhriseadh: "
diff --git a/src/nvim/po/it.po b/src/nvim/po/it.po
index 084102da60..119a8f02ff 100644
--- a/src/nvim/po/it.po
+++ b/src/nvim/po/it.po
@@ -4294,10 +4294,6 @@ msgstr "riga %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nome registro non valido: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Manutentore messaggi: Vlad Sandrini <marco@sandrini.biz>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interruzione: "
diff --git a/src/nvim/po/ja.euc-jp.po b/src/nvim/po/ja.euc-jp.po
index 85042e3506..e8d60d4438 100644
--- a/src/nvim/po/ja.euc-jp.po
+++ b/src/nvim/po/ja.euc-jp.po
@@ -4258,10 +4258,6 @@ msgstr " %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ̵ʥ쥸̾: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "ܸå/ƽ: ¼ Ϻ <koron.kaoriya@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ": "
diff --git a/src/nvim/po/ja.po b/src/nvim/po/ja.po
index 0326f33bb5..fd3690f9bf 100644
--- a/src/nvim/po/ja.po
+++ b/src/nvim/po/ja.po
@@ -4257,10 +4257,6 @@ msgstr "行 %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 無効なレジスタ名: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "割込み: "
diff --git a/src/nvim/po/ja.sjis.po b/src/nvim/po/ja.sjis.po
index 16a5d2ce36..c9fd35292c 100644
--- a/src/nvim/po/ja.sjis.po
+++ b/src/nvim/po/ja.sjis.po
@@ -4261,10 +4261,6 @@ msgstr "s %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ȃWX^: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "{ꃁbZ[W|/ďC: Y <koron.kaoriya@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ": "
diff --git a/src/nvim/po/ko.UTF-8.po b/src/nvim/po/ko.UTF-8.po
index 149286eda8..3ed659208b 100644
--- a/src/nvim/po/ko.UTF-8.po
+++ b/src/nvim/po/ko.UTF-8.po
@@ -4224,10 +4224,6 @@ msgstr "%4ld 줄:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 잘못된 레지스터 이름: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "메시지 관리자: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "중단: "
diff --git a/src/nvim/po/ko.po b/src/nvim/po/ko.po
index b6aaf37bbb..e97e90642c 100644
--- a/src/nvim/po/ko.po
+++ b/src/nvim/po/ko.po
@@ -4224,10 +4224,6 @@ msgstr "%4ld :"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ߸ ̸: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "޽ : Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "ߴ: "
diff --git a/src/nvim/po/nb.po b/src/nvim/po/nb.po
index ce635e098c..76e42ddcd6 100644
--- a/src/nvim/po/nb.po
+++ b/src/nvim/po/nb.po
@@ -4275,11 +4275,6 @@ msgstr "linje %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ugyldig registernavn: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Vedlikeholder for norsk oversettelse: yvind A. Holm <sunny@sunbase.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Avbryt: "
diff --git a/src/nvim/po/nl.po b/src/nvim/po/nl.po
index ea609c0f69..6013b847cb 100644
--- a/src/nvim/po/nl.po
+++ b/src/nvim/po/nl.po
@@ -4282,10 +4282,6 @@ msgstr "regel %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr ""
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Vertaald door: Erwin Poeze <erwin.poeze@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ""
diff --git a/src/nvim/po/no.po b/src/nvim/po/no.po
index ce635e098c..76e42ddcd6 100644
--- a/src/nvim/po/no.po
+++ b/src/nvim/po/no.po
@@ -4275,11 +4275,6 @@ msgstr "linje %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ugyldig registernavn: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Vedlikeholder for norsk oversettelse: yvind A. Holm <sunny@sunbase.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Avbryt: "
diff --git a/src/nvim/po/pl.UTF-8.po b/src/nvim/po/pl.UTF-8.po
index 68cb9e72d5..2536efb422 100644
--- a/src/nvim/po/pl.UTF-8.po
+++ b/src/nvim/po/pl.UTF-8.po
@@ -4243,10 +4243,6 @@ msgstr "wiersz %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Niewłaściwa nazwa rejestru: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatów: Mikołaj Machowski <mikmach@wp.pl>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Przerwanie: "
diff --git a/src/nvim/po/pl.cp1250.po b/src/nvim/po/pl.cp1250.po
index 3fcdbfb87d..30835637d0 100644
--- a/src/nvim/po/pl.cp1250.po
+++ b/src/nvim/po/pl.cp1250.po
@@ -4243,10 +4243,6 @@ msgstr "wiersz %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Niewaciwa nazwa rejestru: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatw: Mikoaj Machowski <mikmach@wp.pl>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Przerwanie: "
diff --git a/src/nvim/po/pl.po b/src/nvim/po/pl.po
index 2a2d12daac..c5734f0c49 100644
--- a/src/nvim/po/pl.po
+++ b/src/nvim/po/pl.po
@@ -4243,10 +4243,6 @@ msgstr "wiersz %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Niewaciwa nazwa rejestru: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatw: Mikoaj Machowski <mikmach@wp.pl>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Przerwanie: "
diff --git a/src/nvim/po/ru.cp1251.po b/src/nvim/po/ru.cp1251.po
index 29e8c83ee6..b1005bd0e6 100644
--- a/src/nvim/po/ru.cp1251.po
+++ b/src/nvim/po/ru.cp1251.po
@@ -4283,12 +4283,6 @@ msgstr " %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: : '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-" : <vrr@users.sourceforge."
-"net>, <alyoshin.s@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ": "
diff --git a/src/nvim/po/ru.po b/src/nvim/po/ru.po
index c8146e8c47..2511ef2c46 100644
--- a/src/nvim/po/ru.po
+++ b/src/nvim/po/ru.po
@@ -4281,12 +4281,6 @@ msgstr "строка %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Недопустимое имя регистра: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Перевод сообщений на русский язык: Василий Рагозин <vrr@users.sourceforge."
-"net>, Сергей Алёшин <alyoshin.s@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Прерывание: "
diff --git a/src/nvim/po/sk.cp1250.po b/src/nvim/po/sk.cp1250.po
index e3b7508cdc..b1b0bb6ade 100644
--- a/src/nvim/po/sk.cp1250.po
+++ b/src/nvim/po/sk.cp1250.po
@@ -4273,10 +4273,6 @@ msgstr "riadok %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nie je prstupn meno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Sprvca prekladu: Lubomir Host <rajo@platon.sk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Preruenie: "
diff --git a/src/nvim/po/sk.po b/src/nvim/po/sk.po
index 53f8a7b911..206e3e3ef6 100644
--- a/src/nvim/po/sk.po
+++ b/src/nvim/po/sk.po
@@ -4273,10 +4273,6 @@ msgstr "riadok %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nie je prstupn meno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Sprvca prekladu: Lubomir Host <rajo@platon.sk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Preruenie: "
diff --git a/src/nvim/po/uk.cp1251.po b/src/nvim/po/uk.cp1251.po
index 2c6f3423ae..99d1763262 100644
--- a/src/nvim/po/uk.cp1251.po
+++ b/src/nvim/po/uk.cp1251.po
@@ -21,204 +21,157 @@ msgstr ""
"Content-Type: text/plain; charset=cp1251\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../api/private/helpers.c:201
-#, fuzzy
msgid "Unable to get option value"
-msgstr " "
+msgstr " "
-#: ../api/private/helpers.c:204
msgid "internal error: unknown option type"
msgstr " : "
-#: ../buffer.c:92
msgid "[Location List]"
msgstr "[ ]"
-#: ../buffer.c:93
msgid "[Quickfix List]"
msgstr "[ ]"
-#: ../buffer.c:94
msgid "E855: Autocommands caused command to abort"
msgstr "E855: "
-#: ../buffer.c:135
msgid "E82: Cannot allocate any buffer, exiting..."
msgstr "E82: , ..."
-#: ../buffer.c:138
msgid "E83: Cannot allocate buffer, using other one..."
msgstr "E83: , ..."
-#: ../buffer.c:763
msgid "E515: No buffers were unloaded"
msgstr "E515: "
-#: ../buffer.c:765
msgid "E516: No buffers were deleted"
msgstr "E516: "
-#: ../buffer.c:767
msgid "E517: No buffers were wiped out"
msgstr "E517: "
-#: ../buffer.c:772
msgid "1 buffer unloaded"
msgstr " "
-#: ../buffer.c:774
#, c-format
msgid "%d buffers unloaded"
msgstr " %d ()"
-#: ../buffer.c:777
msgid "1 buffer deleted"
msgstr " "
-#: ../buffer.c:779
#, c-format
msgid "%d buffers deleted"
msgstr " %d ()"
-#: ../buffer.c:782
msgid "1 buffer wiped out"
msgstr " "
-#: ../buffer.c:784
#, c-format
msgid "%d buffers wiped out"
msgstr " %d ()"
-#: ../buffer.c:806
msgid "E90: Cannot unload last buffer"
msgstr "E90: "
-#: ../buffer.c:874
msgid "E84: No modified buffer found"
msgstr "E84: "
#. back where we started, didn't find anything.
-#: ../buffer.c:903
msgid "E85: There is no listed buffer"
msgstr "E85: "
-#: ../buffer.c:913
#, c-format
msgid "E86: Buffer %<PRId64> does not exist"
msgstr "E86: %<PRId64> "
-#: ../buffer.c:915
msgid "E87: Cannot go beyond last buffer"
msgstr "E87: "
-#: ../buffer.c:917
msgid "E88: Cannot go before first buffer"
msgstr "E88: "
-#: ../buffer.c:945
#, c-format
msgid ""
"E89: No write since last change for buffer %<PRId64> (add ! to override)"
msgstr "E89: %<PRId64> (! )"
#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
msgid "W14: Warning: List of file names overflow"
msgstr "W14: : "
-#: ../buffer.c:1555 ../quickfix.c:3361
#, c-format
msgid "E92: Buffer %<PRId64> not found"
msgstr "E92: %<PRId64> "
-#: ../buffer.c:1798
#, c-format
msgid "E93: More than one match for %s"
msgstr "E93: %s"
-#: ../buffer.c:1800
#, c-format
msgid "E94: No matching buffer for %s"
msgstr "E94: , %s"
-#: ../buffer.c:2161
#, c-format
msgid "line %<PRId64>"
msgstr " %<PRId64>"
-#: ../buffer.c:2233
msgid "E95: Buffer with this name already exists"
msgstr "E95: "
-#: ../buffer.c:2498
msgid " [Modified]"
msgstr " []"
-#: ../buffer.c:2501
msgid "[Not edited]"
msgstr "[ ]"
-#: ../buffer.c:2504
msgid "[New file]"
msgstr "[ ]"
-#: ../buffer.c:2505
msgid "[Read errors]"
msgstr "[ ]"
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
msgid "[RO]"
msgstr "[RO]"
-#: ../buffer.c:2507 ../fileio.c:1807
msgid "[readonly]"
msgstr "[ ]"
-#: ../buffer.c:2524
#, c-format
msgid "1 line --%d%%--"
msgstr " --%d%%--"
-#: ../buffer.c:2526
#, c-format
msgid "%<PRId64> lines --%d%%--"
msgstr "%<PRId64> () --%d%%--"
-#: ../buffer.c:2530
#, c-format
msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
msgstr " %<PRId64> %<PRId64> --%d%%-- "
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
msgid "[No Name]"
msgstr "[ ]"
#. must be a help buffer
-#: ../buffer.c:2667
msgid "help"
msgstr ""
-#: ../buffer.c:3225 ../screen.c:4883
msgid "[Help]"
msgstr "[]"
-#: ../buffer.c:3254 ../screen.c:4887
msgid "[Preview]"
msgstr "[]"
-#: ../buffer.c:3528
msgid "All"
msgstr ""
-#: ../buffer.c:3528
msgid "Bot"
msgstr ""
-#: ../buffer.c:3531
msgid "Top"
msgstr ""
-#: ../buffer.c:4244
msgid ""
"\n"
"# Buffer list:\n"
@@ -226,11 +179,9 @@ msgstr ""
"\n"
"# :\n"
-#: ../buffer.c:4289
msgid "[Scratch]"
msgstr "[ ]"
-#: ../buffer.c:4529
msgid ""
"\n"
"--- Signs ---"
@@ -238,202 +189,155 @@ msgstr ""
"\n"
"--- ---"
-#: ../buffer.c:4538
#, c-format
msgid "Signs for %s:"
msgstr " %s:"
-#: ../buffer.c:4543
#, c-format
msgid " line=%<PRId64> id=%d name=%s"
msgstr " =%<PRId64> id=%d =%s"
-#: ../cursor_shape.c:68
msgid "E545: Missing colon"
msgstr "E545: "
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
msgid "E546: Illegal mode"
msgstr "E546: "
-#: ../cursor_shape.c:134
msgid "E548: digit expected"
msgstr "E548: "
-#: ../cursor_shape.c:138
msgid "E549: Illegal percentage"
msgstr "E549: "
-#: ../diff.c:146
#, c-format
msgid "E96: Can not diff more than %<PRId64> buffers"
msgstr "E96: %<PRId64> ()"
-#: ../diff.c:753
msgid "E810: Cannot read or write temp files"
msgstr "E810: "
-#: ../diff.c:755
msgid "E97: Cannot create diffs"
msgstr "E97: "
-#: ../diff.c:966
msgid "E816: Cannot read patch output"
msgstr "E816: patch"
-#: ../diff.c:1220
msgid "E98: Cannot read diff output"
msgstr "E98: diff"
-#: ../diff.c:2081
msgid "E99: Current buffer is not in diff mode"
msgstr "E99: "
-#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
msgstr "E793: "
-#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
msgstr "E100: "
-#: ../diff.c:2112
msgid "E101: More than two buffers in diff mode, don't know which one to use"
msgstr ""
"E101: , , "
""
-#: ../diff.c:2141
#, c-format
msgid "E102: Can't find buffer \"%s\""
msgstr "E102: %s"
-#: ../diff.c:2152
#, c-format
msgid "E103: Buffer \"%s\" is not in diff mode"
msgstr "E103: %s "
-#: ../diff.c:2193
msgid "E787: Buffer changed unexpectedly"
msgstr "E787: "
-#: ../digraph.c:1598
msgid "E104: Escape not allowed in digraph"
msgstr "E104: escape"
-#: ../digraph.c:1760
msgid "E544: Keymap file not found"
msgstr "E544: "
-#: ../digraph.c:1785
msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :loadkeymap "
-#: ../digraph.c:1821
msgid "E791: Empty keymap entry"
msgstr "E791: "
-#: ../edit.c:82
msgid " Keyword completion (^N^P)"
msgstr " (^N^P)"
#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
msgstr " ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-#: ../edit.c:85
msgid " Whole line completion (^L^N^P)"
msgstr " (^L^N^P)"
-#: ../edit.c:86
msgid " File name completion (^F^N^P)"
msgstr " (^F^N^P)"
-#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
msgstr " 崳 (^]^N^P)"
-#: ../edit.c:88
msgid " Path pattern completion (^N^P)"
msgstr " (^N^P)"
-#: ../edit.c:89
msgid " Definition completion (^D^N^P)"
msgstr " (^D^N^P)"
-#: ../edit.c:91
msgid " Dictionary completion (^K^N^P)"
msgstr " (^K^N^P)"
-#: ../edit.c:92
msgid " Thesaurus completion (^T^N^P)"
msgstr " (^T^N^P)"
-#: ../edit.c:93
msgid " Command-line completion (^V^N^P)"
msgstr " (^V^N^P)"
-#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
msgstr " (^U^N^P)"
-#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
msgstr " (^O^N^P)"
-#: ../edit.c:96
msgid " Spelling suggestion (s^N^P)"
msgstr " (s^N^P)"
-#: ../edit.c:97
msgid " Keyword Local completion (^N^P)"
msgstr " (^N^P)"
-#: ../edit.c:100
msgid "Hit end of paragraph"
msgstr " "
# msgstr "E443: "
-#: ../edit.c:101
msgid "E839: Completion function changed window"
msgstr "E839: "
-#: ../edit.c:102
msgid "E840: Completion function deleted text"
msgstr "E840: "
-#: ../edit.c:1847
msgid "'dictionary' option is empty"
msgstr " 'dictionary' "
-#: ../edit.c:1848
msgid "'thesaurus' option is empty"
msgstr " 'thesaurus' "
-#: ../edit.c:2655
#, c-format
msgid "Scanning dictionary: %s"
msgstr " : %s"
-#: ../edit.c:3079
msgid " (insert) Scroll (^E/^Y)"
msgstr " () (^E/^Y)"
-#: ../edit.c:3081
msgid " (replace) Scroll (^E/^Y)"
msgstr " () (^E/^Y)"
-#: ../edit.c:3587
#, c-format
msgid "Scanning: %s"
msgstr " : %s"
-#: ../edit.c:3614
msgid "Scanning tags."
msgstr " 崳."
-#: ../edit.c:4519
msgid " Adding"
msgstr " "
@@ -441,598 +345,468 @@ msgstr " "
#. * be called before line = ml_get(), or when this address is no
#. * longer needed. -- Acevedo.
#.
-#: ../edit.c:4562
msgid "-- Searching..."
msgstr "-- ..."
-#: ../edit.c:4618
msgid "Back at original"
msgstr " "
-#: ../edit.c:4621
msgid "Word from other line"
msgstr " "
-#: ../edit.c:4624
msgid "The only match"
msgstr " "
-#: ../edit.c:4680
#, c-format
msgid "match %d of %d"
msgstr " %d %d"
-#: ../edit.c:4684
#, c-format
msgid "match %d"
msgstr " %d"
# msgstr "E17: "
-#: ../eval.c:137
msgid "E18: Unexpected characters in :let"
msgstr "E18: :let"
-#: ../eval.c:138
#, c-format
msgid "E684: list index out of range: %<PRId64>"
msgstr "E684: : %<PRId64>"
-#: ../eval.c:139
#, c-format
msgid "E121: Undefined variable: %s"
msgstr "E121: : %s"
-#: ../eval.c:140
msgid "E111: Missing ']'"
msgstr "E111: ']'"
-#: ../eval.c:141
#, c-format
msgid "E686: Argument of %s must be a List"
msgstr "E686: %s "
-#: ../eval.c:143
#, c-format
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: %s "
-#: ../eval.c:144
msgid "E713: Cannot use empty key for Dictionary"
msgstr "E713: "
# msgstr "E396: "
-#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: "
-#: ../eval.c:146
msgid "E715: Dictionary required"
msgstr "E715: "
-#: ../eval.c:147
#, c-format
msgid "E118: Too many arguments for function: %s"
msgstr "E118: : %s"
-#: ../eval.c:148
#, c-format
msgid "E716: Key not present in Dictionary: %s"
msgstr "E716: : %s"
-#: ../eval.c:150
#, c-format
msgid "E122: Function %s already exists, add ! to replace it"
msgstr "E122: %s , ! "
-#: ../eval.c:151
msgid "E717: Dictionary entry already exists"
msgstr "E717: "
-#: ../eval.c:152
msgid "E718: Funcref required"
msgstr "E718: "
-#: ../eval.c:153
msgid "E719: Cannot use [:] with a Dictionary"
msgstr "E719: [:] "
-#: ../eval.c:154
#, c-format
msgid "E734: Wrong variable type for %s="
msgstr "E734: %s="
-#: ../eval.c:155
#, c-format
msgid "E130: Unknown function: %s"
msgstr "E130: : %s"
-#: ../eval.c:156
#, c-format
msgid "E461: Illegal variable name: %s"
msgstr "E461: : %s"
# msgstr "E373: "
-#: ../eval.c:157
msgid "E806: using Float as a String"
msgstr "E806: Float String"
-#: ../eval.c:1830
msgid "E687: Less targets than List items"
msgstr "E687: ֳ , "
-#: ../eval.c:1834
msgid "E688: More targets than List items"
msgstr "E688: ֳ , "
-#: ../eval.c:1906
msgid "Double ; in list of variables"
msgstr " ; "
# msgstr "E235: "
-#: ../eval.c:2078
#, c-format
msgid "E738: Can't list variables for %s"
msgstr "E738: %s"
-#: ../eval.c:2391
msgid "E689: Can only index a List or Dictionary"
msgstr "E689: "
-#: ../eval.c:2396
msgid "E708: [:] must come last"
msgstr "E708: [:] "
-#: ../eval.c:2439
msgid "E709: [:] requires a List value"
msgstr "E709: [:] "
-#: ../eval.c:2674
msgid "E710: List value has more items than target"
msgstr "E710: , "
-#: ../eval.c:2678
msgid "E711: List value has not enough items"
msgstr "E711: "
-#: ../eval.c:2867
msgid "E690: Missing \"in\" after :for"
msgstr "E690: in :for"
-#: ../eval.c:3063
#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: : %s"
-#: ../eval.c:3263
#, c-format
msgid "E108: No such variable: \"%s\""
msgstr "E108: : %s"
-#: ../eval.c:3333
msgid "E743: variable nested too deep for (un)lock"
msgstr "E743: -/."
-#: ../eval.c:3630
msgid "E109: Missing ':' after '?'"
msgstr "E109: ':' '?'"
-#: ../eval.c:3893
msgid "E691: Can only compare List with List"
msgstr "E691: "
-#: ../eval.c:3895
msgid "E692: Invalid operation for Lists"
msgstr "E692: "
-#: ../eval.c:3915
msgid "E735: Can only compare Dictionary with Dictionary"
msgstr "E735: "
-#: ../eval.c:3917
msgid "E736: Invalid operation for Dictionary"
msgstr "E736: "
-#: ../eval.c:3932
msgid "E693: Can only compare Funcref with Funcref"
msgstr "E693: "
-#: ../eval.c:3934
msgid "E694: Invalid operation for Funcrefs"
msgstr "E694: "
-#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
msgstr "E804: '%' Float"
-#: ../eval.c:4478
msgid "E110: Missing ')'"
msgstr "E110: ')'"
-#: ../eval.c:4609
msgid "E695: Cannot index a Funcref"
msgstr "E695: "
-#: ../eval.c:4839
#, c-format
msgid "E112: Option name missing: %s"
msgstr "E112: : %s"
-#: ../eval.c:4855
#, c-format
msgid "E113: Unknown option: %s"
msgstr "E113: : %s"
-#: ../eval.c:4904
#, c-format
msgid "E114: Missing quote: %s"
msgstr "E114: : %s"
-#: ../eval.c:5020
#, c-format
msgid "E115: Missing quote: %s"
msgstr "E115: : %s"
# msgstr "E404: "
-#: ../eval.c:5084
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr "E696: : %s"
-#: ../eval.c:5091
#, c-format
msgid "E697: Missing end of List ']': %s"
msgstr "E697: ']': %s"
# msgstr "E235: "
-#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
msgstr "E720: : %s"
-#: ../eval.c:6499
#, c-format
msgid "E721: Duplicate key in Dictionary: \"%s\""
msgstr "E721: : %s"
# msgstr "E235: "
-#: ../eval.c:6517
#, c-format
msgid "E722: Missing comma in Dictionary: %s"
msgstr "E722: : %s"
-#: ../eval.c:6524
#, c-format
msgid "E723: Missing end of Dictionary '}': %s"
msgstr "E723: '}': %s"
# msgstr "E21: "
-#: ../eval.c:6555
msgid "E724: variable nested too deep for displaying"
msgstr "E724: "
-#: ../eval.c:7188
#, c-format
msgid "E740: Too many arguments for function %s"
msgstr "E740: %s"
-#: ../eval.c:7190
#, c-format
msgid "E116: Invalid arguments for function %s"
msgstr "E116: %s"
-#: ../eval.c:7377
#, c-format
msgid "E117: Unknown function: %s"
msgstr "E117: : %s"
-#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
msgstr "E119: %s"
-#: ../eval.c:7387
#, c-format
msgid "E120: Using <SID> not in a script context: %s"
msgstr "E120: <SID> : %s"
-#: ../eval.c:7391
#, c-format
msgid "E725: Calling dict function without Dictionary: %s"
msgstr "E725: dict- : %s"
-#: ../eval.c:7453
msgid "E808: Number or Float required"
msgstr "E808: Number Float"
# msgstr "E14: "
-#: ../eval.c:7503
msgid "add() argument"
msgstr " add()"
-#: ../eval.c:7907
msgid "E699: Too many arguments"
msgstr "E699: "
# msgstr "E327: "
-#: ../eval.c:8073
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() "
-#: ../eval.c:8156
msgid "&Ok"
msgstr "&O:"
# msgstr "E226: "
-#: ../eval.c:8676
#, c-format
msgid "E737: Key already exists: %s"
msgstr "E737: : %s"
# msgstr "E14: "
-#: ../eval.c:8692
msgid "extend() argument"
msgstr " extend()"
# msgstr "E14: "
-#: ../eval.c:8915
msgid "map() argument"
msgstr " map()"
# msgstr "E14: "
-#: ../eval.c:8916
msgid "filter() argument"
msgstr " filter()"
-#: ../eval.c:9229
#, c-format
msgid "+-%s%3ld lines: "
msgstr "+-%s%3ld : "
-#: ../eval.c:9291
#, c-format
msgid "E700: Unknown function: %s"
msgstr "E700: : %s"
-#: ../eval.c:10729
msgid "called inputrestore() more often than inputsave()"
msgstr " inputrestore() , inputsave()"
# msgstr "E14: "
-#: ../eval.c:10771
msgid "insert() argument"
msgstr " insert()"
# msgstr "E406: "
-#: ../eval.c:10841
msgid "E786: Range not allowed"
msgstr "E786: "
# msgstr "E177: "
-#: ../eval.c:11140
msgid "E701: Invalid type for len()"
msgstr "E701: len()"
-#: ../eval.c:11980
msgid "E726: Stride is zero"
msgstr "E726: "
-#: ../eval.c:11982
msgid "E727: Start past end"
msgstr "E727: "
-#: ../eval.c:12024 ../eval.c:15297
msgid "<empty>"
msgstr "<>"
# msgstr "E14: "
-#: ../eval.c:12282
msgid "remove() argument"
msgstr " remove()"
-#: ../eval.c:12466
msgid "E655: Too many symbolic links (cycle?)"
msgstr "E655: (?)"
# msgstr "E14: "
-#: ../eval.c:12593
msgid "reverse() argument"
msgstr " reverse()"
# msgstr "E14: "
-#: ../eval.c:13721
msgid "sort() argument"
msgstr " sort()"
# msgstr "E14: "
-#: ../eval.c:13721
-#, fuzzy
msgid "uniq() argument"
-msgstr " add()"
+msgstr " uniq()"
# msgstr "E364: "
-#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: "
# msgstr "E364: "
-#: ../eval.c:13806
-#, fuzzy
msgid "E882: Uniq compare function failed"
-msgstr "E702: "
+msgstr "E882: uniq"
-#: ../eval.c:14085
msgid "(Invalid)"
msgstr "()"
-#: ../eval.c:14590
msgid "E677: Error writing temp file"
msgstr "E677: "
-#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
msgstr "E805: Float Number"
-#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
msgstr "E703: Funcref Number"
-#: ../eval.c:16170
msgid "E745: Using a List as a Number"
msgstr "E745: List Number"
-#: ../eval.c:16173
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Dictionary Number"
-#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: Funcref String"
# msgstr "E373: "
-#: ../eval.c:16262
msgid "E730: using List as a String"
msgstr "E730: List String"
-#: ../eval.c:16265
msgid "E731: using Dictionary as a String"
msgstr "E731: Dictionary String"
-#: ../eval.c:16619
#, c-format
msgid "E706: Variable type mismatch for: %s"
msgstr "E706: : %s"
-#: ../eval.c:16705
#, c-format
msgid "E795: Cannot delete variable %s"
msgstr "E795: %s"
-#: ../eval.c:16724
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr "E704: Funcref : %s"
-#: ../eval.c:16732
#, c-format
msgid "E705: Variable name conflicts with existing function: %s"
msgstr "E705: : %s"
-#: ../eval.c:16763
#, c-format
msgid "E741: Value is locked: %s"
msgstr "E741: : %s"
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
msgid "Unknown"
msgstr ""
-#: ../eval.c:16768
#, c-format
msgid "E742: Cannot change value of %s"
msgstr "E742: %s"
-#: ../eval.c:16838
msgid "E698: variable nested too deep for making a copy"
msgstr "E698: "
-#: ../eval.c:17249
#, c-format
msgid "E123: Undefined function: %s"
msgstr "E123: : %s"
-#: ../eval.c:17260
#, c-format
msgid "E124: Missing '(': %s"
msgstr "E124: '(': %s"
-#: ../eval.c:17293
msgid "E862: Cannot use g: here"
msgstr "E862: g:"
-#: ../eval.c:17312
#, c-format
msgid "E125: Illegal argument: %s"
msgstr "E125: : %s"
-#: ../eval.c:17323
#, c-format
msgid "E853: Duplicate argument name: %s"
msgstr "E853: : %s"
-#: ../eval.c:17416
msgid "E126: Missing :endfunction"
msgstr "E126: :endfunction"
-#: ../eval.c:17537
#, c-format
msgid "E707: Function name conflicts with variable: %s"
msgstr "E707: : %s"
-#: ../eval.c:17549
#, c-format
msgid "E127: Cannot redefine function %s: It is in use"
msgstr "E127: %s: "
-#: ../eval.c:17604
#, c-format
msgid "E746: Function name does not match script file name: %s"
msgstr "E746: : %s"
-#: ../eval.c:17716
msgid "E129: Function name required"
msgstr "E129: "
-#: ../eval.c:17824
-#, fuzzy, c-format
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
msgstr ""
-"E128: : %s"
+"E128: \"s:\": %s"
-#: ../eval.c:17833
-#, fuzzy, c-format
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
msgstr ""
-"E128: : %s"
+"E884: : %s"
-#: ../eval.c:18336
#, c-format
msgid "E131: Cannot delete function %s: It is in use"
msgstr "E131: %s: "
-#: ../eval.c:18441
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr "E132: 'maxfuncdepth'"
-#: ../eval.c:18568
#, c-format
msgid "calling %s"
msgstr " %s"
-#: ../eval.c:18651
#, c-format
msgid "%s aborted"
msgstr "%s "
-#: ../eval.c:18653
#, c-format
msgid "%s returning #%<PRId64>"
msgstr "%s #%<PRId64>"
-#: ../eval.c:18670
#, c-format
msgid "%s returning %s"
msgstr "%s %s"
-#: ../eval.c:18691 ../ex_cmds2.c:2695
#, c-format
msgid "continuing in %s"
msgstr " %s"
-#: ../eval.c:18795
msgid "E133: :return not inside a function"
msgstr "E133: :return "
-#: ../eval.c:19159
msgid ""
"\n"
"# global variables:\n"
@@ -1040,7 +814,6 @@ msgstr ""
"\n"
"# :\n"
-#: ../eval.c:19254
msgid ""
"\n"
"\tLast set from "
@@ -1048,104 +821,82 @@ msgstr ""
"\n"
"\t "
-#: ../eval.c:19272
msgid "No old files"
msgstr " "
-#: ../ex_cmds.c:122
#, c-format
msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
msgstr "<%s>%s%s %d, %02x, %03o"
-#: ../ex_cmds.c:145
#, c-format
msgid "> %d, Hex %04x, Octal %o"
msgstr "> %d, %04x, %o"
-#: ../ex_cmds.c:146
#, c-format
msgid "> %d, Hex %08x, Octal %o"
msgstr "> %d, %08x, %o"
-#: ../ex_cmds.c:684
msgid "E134: Move lines into themselves"
msgstr "E134: "
-#: ../ex_cmds.c:747
msgid "1 line moved"
msgstr " "
-#: ../ex_cmds.c:749
#, c-format
msgid "%<PRId64> lines moved"
msgstr " %<PRId64> ()"
-#: ../ex_cmds.c:1175
#, c-format
msgid "%<PRId64> lines filtered"
msgstr "³ %<PRId64> ()"
-#: ../ex_cmds.c:1194
msgid "E135: *Filter* Autocommands must not change current buffer"
msgstr "E135: *Filter* "
-#: ../ex_cmds.c:1244
msgid "[No write since last change]\n"
msgstr "[ ]\n"
-#: ../ex_cmds.c:1424
#, c-format
msgid "%sviminfo: %s in line: "
msgstr "%sviminfo: %s : "
-#: ../ex_cmds.c:1431
msgid "E136: viminfo: Too many errors, skipping rest of file"
msgstr "E136: viminfo: , "
-#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
msgstr " viminfo: %s%s%s%s"
-#: ../ex_cmds.c:1460
msgid " info"
msgstr " "
-#: ../ex_cmds.c:1461
msgid " marks"
msgstr " "
-#: ../ex_cmds.c:1462
msgid " oldfiles"
msgstr " "
-#: ../ex_cmds.c:1463
msgid " FAILED"
msgstr " "
#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
#, c-format
msgid "E137: Viminfo file is not writable: %s"
msgstr "E137: viminfo: %s"
-#: ../ex_cmds.c:1626
#, c-format
msgid "E138: Can't write viminfo file %s!"
msgstr "E138: viminfo %s!"
-#: ../ex_cmds.c:1635
#, c-format
msgid "Writing viminfo file \"%s\""
msgstr " viminfo %s"
#. Write the info:
-#: ../ex_cmds.c:1720
#, c-format
msgid "# This viminfo file was generated by Vim %s.\n"
msgstr "# Vim %s.\n"
-#: ../ex_cmds.c:1722
msgid ""
"# You may edit it if you're careful!\n"
"\n"
@@ -1153,47 +904,37 @@ msgstr ""
"# , !\n"
"\n"
-#: ../ex_cmds.c:1723
msgid "# Value of 'encoding' when this file was written\n"
msgstr "# 'encoding' \n"
-#: ../ex_cmds.c:1800
msgid "Illegal starting char"
msgstr " "
-#: ../ex_cmds.c:2162
msgid "Write partial file?"
msgstr " ?"
-#: ../ex_cmds.c:2166
msgid "E140: Use ! to write partial buffer"
msgstr "E140: ! "
-#: ../ex_cmds.c:2281
#, c-format
msgid "Overwrite existing file \"%s\"?"
msgstr " %s?"
-#: ../ex_cmds.c:2317
#, c-format
msgid "Swap file \"%s\" exists, overwrite anyway?"
msgstr " %s , ?"
-#: ../ex_cmds.c:2326
#, c-format
msgid "E768: Swap file exists: %s (:silent! overrides)"
msgstr "E768: : %s (:silent! )"
-#: ../ex_cmds.c:2381
#, c-format
msgid "E141: No file name for buffer %<PRId64>"
msgstr "E141: %<PRId64>"
-#: ../ex_cmds.c:2412
msgid "E142: File not written: Writing is disabled by 'write' option"
msgstr "E142: : 'write'"
-#: ../ex_cmds.c:2434
#, c-format
msgid ""
"'readonly' option is set for \"%s\".\n"
@@ -1202,7 +943,6 @@ msgstr ""
" %s 'readonly'.\n"
" ?"
-#: ../ex_cmds.c:2439
#, c-format
msgid ""
"File permissions of \"%s\" are read-only.\n"
@@ -1213,84 +953,66 @@ msgstr ""
", , .\n"
" ?"
-#: ../ex_cmds.c:2451
#, c-format
msgid "E505: \"%s\" is read-only (add ! to override)"
msgstr "E505: %s (! )"
-#: ../ex_cmds.c:3120
#, c-format
msgid "E143: Autocommands unexpectedly deleted new buffer %s"
msgstr "E143: %s"
-#: ../ex_cmds.c:3313
msgid "E144: non-numeric argument to :z"
msgstr "E144: :z"
-#: ../ex_cmds.c:3404
msgid "E145: Shell commands not allowed in rvim"
msgstr "E145: rvim "
-#: ../ex_cmds.c:3498
msgid "E146: Regular expressions can't be delimited by letters"
msgstr "E146: "
-#: ../ex_cmds.c:3964
#, c-format
msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
msgstr " %s (y/n/a/q/l/^E/^Y)?"
-#: ../ex_cmds.c:4379
msgid "(Interrupted) "
msgstr "() "
# msgstr "E31: "
-#: ../ex_cmds.c:4384
msgid "1 match"
msgstr " "
-#: ../ex_cmds.c:4384
msgid "1 substitution"
msgstr " "
-#: ../ex_cmds.c:4387
#, c-format
msgid "%<PRId64> matches"
msgstr "%<PRId64> ()"
-#: ../ex_cmds.c:4388
#, c-format
msgid "%<PRId64> substitutions"
msgstr "%<PRId64> ()"
-#: ../ex_cmds.c:4392
msgid " on 1 line"
msgstr " "
-#: ../ex_cmds.c:4395
#, c-format
msgid " on %<PRId64> lines"
msgstr " %<PRId64> "
-#: ../ex_cmds.c:4438
msgid "E147: Cannot do :global recursive"
msgstr "E147: :global "
-#: ../ex_cmds.c:4467
msgid "E148: Regular expression missing from global"
msgstr "E148: global "
-#: ../ex_cmds.c:4508
#, c-format
msgid "Pattern found in every line: %s"
msgstr " : %s"
-#: ../ex_cmds.c:4510
#, c-format
msgid "Pattern not found: %s"
msgstr " : %s"
-#: ../ex_cmds.c:4587
msgid ""
"\n"
"# Last Substitute String:\n"
@@ -1300,338 +1022,265 @@ msgstr ""
"# :\n"
"$"
-#: ../ex_cmds.c:4679
msgid "E478: Don't panic!"
msgstr "E478: !"
-#: ../ex_cmds.c:4717
#, c-format
msgid "E661: Sorry, no '%s' help for %s"
msgstr "E661: , '%s' %s"
-#: ../ex_cmds.c:4719
#, c-format
msgid "E149: Sorry, no help for %s"
msgstr "E149: , %s"
-#: ../ex_cmds.c:4751
#, c-format
msgid "Sorry, help file \"%s\" not found"
msgstr ", %s "
-#: ../ex_cmds.c:5323
#, c-format
msgid "E150: Not a directory: %s"
msgstr "E150: : %s"
-#: ../ex_cmds.c:5446
#, c-format
msgid "E152: Cannot open %s for writing"
msgstr "E152: %s "
-#: ../ex_cmds.c:5471
#, c-format
msgid "E153: Unable to open %s for reading"
msgstr "E153: %s "
-#: ../ex_cmds.c:5500
#, c-format
msgid "E670: Mix of help file encodings within a language: %s"
msgstr "E670: ̳ %s"
-#: ../ex_cmds.c:5565
#, c-format
msgid "E154: Duplicate tag \"%s\" in file %s/%s"
msgstr "E154: %s %s/%s"
-#: ../ex_cmds.c:5687
#, c-format
msgid "E160: Unknown sign command: %s"
msgstr "E160: : %s"
-#: ../ex_cmds.c:5704
msgid "E156: Missing sign name"
msgstr "E156: "
-#: ../ex_cmds.c:5746
msgid "E612: Too many signs defined"
msgstr "E612: "
-#: ../ex_cmds.c:5813
#, c-format
msgid "E239: Invalid sign text: %s"
msgstr "E239: : %s"
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
#, c-format
msgid "E155: Unknown sign: %s"
msgstr "E155: : %s"
-#: ../ex_cmds.c:5877
msgid "E159: Missing sign number"
msgstr "E159: "
-#: ../ex_cmds.c:5971
#, c-format
msgid "E158: Invalid buffer name: %s"
msgstr "E158: : %s"
-#: ../ex_cmds.c:6008
#, c-format
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: ID : %<PRId64>"
-#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " ( )"
-#: ../ex_cmds.c:6169
msgid "[Deleted]"
msgstr "[]"
-#: ../ex_cmds2.c:139
msgid "Entering Debug mode. Type \"cont\" to continue."
msgstr " . cont."
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
#, c-format
msgid "line %<PRId64>: %s"
msgstr " %<PRId64>: %s"
-#: ../ex_cmds2.c:145
#, c-format
msgid "cmd: %s"
msgstr ": %s"
-#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
msgstr " %s%s %<PRId64>"
-#: ../ex_cmds2.c:581
#, c-format
msgid "E161: Breakpoint not found: %s"
msgstr "E161: : %s"
-#: ../ex_cmds2.c:611
msgid "No breakpoints defined"
msgstr " "
-#: ../ex_cmds2.c:617
#, c-format
msgid "%3d %s %s line %<PRId64>"
msgstr "%3d %s %s %<PRId64>"
-#: ../ex_cmds2.c:942
msgid "E750: First use \":profile start {fname}\""
msgstr "E750: :profile start {}"
-#: ../ex_cmds2.c:1269
#, c-format
msgid "Save changes to \"%s\"?"
msgstr " %s?"
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
msgid "Untitled"
msgstr ""
-#: ../ex_cmds2.c:1421
#, c-format
msgid "E162: No write since last change for buffer \"%s\""
msgstr "E162: %s "
-#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
msgstr ""
": ( )"
-#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
msgstr "E163: "
-#: ../ex_cmds2.c:1828
msgid "E164: Cannot go before first file"
msgstr "E164: "
-#: ../ex_cmds2.c:1830
msgid "E165: Cannot go beyond last file"
msgstr "E165: "
-#: ../ex_cmds2.c:2175
#, c-format
msgid "E666: compiler not supported: %s"
msgstr "E666: : %s"
# msgstr "E195: "
-#: ../ex_cmds2.c:2257
#, c-format
msgid "Searching for \"%s\" in \"%s\""
msgstr " %s %s"
-#: ../ex_cmds2.c:2284
#, c-format
msgid "Searching for \"%s\""
msgstr " %s"
-#: ../ex_cmds2.c:2307
#, c-format
msgid "not found in 'runtimepath': \"%s\""
msgstr " 'runtimepath' %s"
-#: ../ex_cmds2.c:2472
#, c-format
msgid "Cannot source a directory: \"%s\""
msgstr " : %s"
-#: ../ex_cmds2.c:2518
#, c-format
msgid "could not source \"%s\""
msgstr " %s"
-#: ../ex_cmds2.c:2520
#, c-format
msgid "line %<PRId64>: could not source \"%s\""
msgstr " %<PRId64>: %s"
-#: ../ex_cmds2.c:2535
#, c-format
msgid "sourcing \"%s\""
msgstr " %s"
-#: ../ex_cmds2.c:2537
#, c-format
msgid "line %<PRId64>: sourcing \"%s\""
msgstr " %<PRId64>: %s"
-#: ../ex_cmds2.c:2693
#, c-format
msgid "finished sourcing %s"
msgstr " %s"
-#: ../ex_cmds2.c:2765
msgid "modeline"
msgstr "modeline"
# msgstr "E14: "
-#: ../ex_cmds2.c:2767
msgid "--cmd argument"
msgstr "--cmd "
# msgstr "E14: "
-#: ../ex_cmds2.c:2769
msgid "-c argument"
msgstr "-c "
-#: ../ex_cmds2.c:2771
msgid "environment variable"
msgstr " "
-#: ../ex_cmds2.c:2773
msgid "error handler"
msgstr " "
-#: ../ex_cmds2.c:3020
msgid "W15: Warning: Wrong line separator, ^M may be missing"
msgstr "W15: : , , ^M"
-#: ../ex_cmds2.c:3139
msgid "E167: :scriptencoding used outside of a sourced file"
msgstr "E167: :scriptencoding "
-#: ../ex_cmds2.c:3166
msgid "E168: :finish used outside of a sourced file"
msgstr "E168: :finish "
-#: ../ex_cmds2.c:3389
#, c-format
msgid "Current %slanguage: \"%s\""
msgstr " (%s): %s"
-#: ../ex_cmds2.c:3404
#, c-format
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: %s"
#. don't redisplay the window
#. don't wait for return
-#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
msgstr " Ex. visual"
-#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
msgstr "E501: ʳ "
-#: ../ex_docmd.c:513
msgid "E169: Command too recursive"
msgstr "E169: "
-#: ../ex_docmd.c:1006
#, c-format
msgid "E605: Exception not caught: %s"
msgstr "E605: : %s"
-#: ../ex_docmd.c:1085
msgid "End of sourced file"
msgstr "ʳ "
-#: ../ex_docmd.c:1086
msgid "End of function"
msgstr "ʳ "
-#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
msgstr "E464: "
-#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
msgstr "E492: "
-#: ../ex_docmd.c:1729
msgid "E493: Backwards range given"
msgstr "E493: "
-#: ../ex_docmd.c:1733
msgid "Backwards range given, OK to swap"
msgstr " , "
#. append
#. typed wrong
-#: ../ex_docmd.c:1787
msgid "E494: Use w or w>>"
msgstr "E494: w w>>"
-#: ../ex_docmd.c:3454
msgid "E319: The command is not available in this version"
msgstr "E319: , "
-#: ../ex_docmd.c:3752
msgid "E172: Only one file name allowed"
msgstr "E172: "
-#: ../ex_docmd.c:4238
msgid "1 more file to edit. Quit anyway?"
msgstr " . ?"
-#: ../ex_docmd.c:4242
#, c-format
msgid "%d more files to edit. Quit anyway?"
msgstr " %d . ?"
-#: ../ex_docmd.c:4248
msgid "E173: 1 more file to edit"
msgstr "E173: "
-#: ../ex_docmd.c:4250
#, c-format
msgid "E173: %<PRId64> more files to edit"
msgstr "E173: %<PRId64> "
-#: ../ex_docmd.c:4320
msgid "E174: Command already exists: add ! to replace it"
msgstr "E174: , ! "
-#: ../ex_docmd.c:4432
msgid ""
"\n"
" Name Args Range Complete Definition"
@@ -1639,353 +1288,276 @@ msgstr ""
"\n"
" . "
-#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
msgstr " "
-#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
msgstr "E175: "
-#: ../ex_docmd.c:4583
msgid "E176: Invalid number of arguments"
msgstr "E176: "
-#: ../ex_docmd.c:4594
msgid "E177: Count cannot be specified twice"
msgstr "E177: ˳ "
# msgstr "E177: "
-#: ../ex_docmd.c:4603
msgid "E178: Invalid default value for count"
msgstr "E178: "
# msgstr "E178: "
-#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
msgstr "E179: -complete "
# msgstr "E180: "
-#: ../ex_docmd.c:4635
#, c-format
msgid "E181: Invalid attribute: %s"
msgstr "E181: : %s"
# msgstr "E181: "
-#: ../ex_docmd.c:4678
msgid "E182: Invalid command name"
msgstr "E182: "
# msgstr "E182: "
-#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
msgstr "E183: "
-#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
msgstr ""
"E841: , "
# msgstr "E183: "
-#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
msgstr "E184: : %s"
# msgstr "E179: "
-#: ../ex_docmd.c:5219
#, c-format
msgid "E180: Invalid complete value: %s"
msgstr "E180: : %s"
-#: ../ex_docmd.c:5225
msgid "E468: Completion argument only allowed for custom completion"
msgstr "E468: "
-#: ../ex_docmd.c:5231
msgid "E467: Custom completion requires a function argument"
msgstr "E467: -"
# msgstr "E184: "
-#: ../ex_docmd.c:5257
#, c-format
msgid "E185: Cannot find color scheme '%s'"
msgstr "E185: %s"
-#: ../ex_docmd.c:5263
msgid "Greetings, Vim user!"
msgstr "³, Vim!"
# msgstr "E443: "
-#: ../ex_docmd.c:5431
msgid "E784: Cannot close last tab page"
msgstr "E784: "
# msgstr "E444: "
-#: ../ex_docmd.c:5462
msgid "Already only one tab page"
msgstr " "
-#: ../ex_docmd.c:6004
#, c-format
msgid "Tab page %d"
msgstr " %d"
-#: ../ex_docmd.c:6295
msgid "No swap file"
msgstr " "
-#: ../ex_docmd.c:6478
msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
msgstr "E747: , (! )"
-#: ../ex_docmd.c:6485
msgid "E186: No previous directory"
msgstr "E186: "
# msgstr "E186: "
-#: ../ex_docmd.c:6530
msgid "E187: Unknown"
msgstr "E187: "
-#: ../ex_docmd.c:6610
msgid "E465: :winsize requires two number arguments"
msgstr "E465: :winsize "
-#: ../ex_docmd.c:6655
msgid "E188: Obtaining window position not implemented for this platform"
msgstr "E188: "
-#: ../ex_docmd.c:6662
msgid "E466: :winpos requires two number arguments"
msgstr "E466: :winpos "
-#: ../ex_docmd.c:7241
#, c-format
msgid "E739: Cannot create directory: %s"
msgstr "E739: : %s"
-#: ../ex_docmd.c:7268
#, c-format
msgid "E189: \"%s\" exists (add ! to override)"
msgstr "E189: %s (! )"
# msgstr "E189: "
-#: ../ex_docmd.c:7273
#, c-format
msgid "E190: Cannot open \"%s\" for writing"
msgstr "E190: %s "
# msgstr "E190: "
#. set mark
-#: ../ex_docmd.c:7294
msgid "E191: Argument must be a letter or forward/backward quote"
msgstr "E191: , ` '"
# msgstr "E191: "
-#: ../ex_docmd.c:7333
msgid "E192: Recursive use of :normal too deep"
msgstr "E192: :normal"
# msgstr "E193: "
-#: ../ex_docmd.c:7807
msgid "E194: No alternate file name to substitute for '#'"
msgstr "E194: '#'"
-#: ../ex_docmd.c:7841
msgid "E495: no autocommand file name to substitute for \"<afile>\""
msgstr "E495: <afile>"
-#: ../ex_docmd.c:7850
msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
msgstr "E496: <abuf>"
-#: ../ex_docmd.c:7861
msgid "E497: no autocommand match name to substitute for \"<amatch>\""
msgstr "E497: <amatch>"
-#: ../ex_docmd.c:7870
msgid "E498: no :source file name to substitute for \"<sfile>\""
msgstr "E498: :source <sfile>"
-#: ../ex_docmd.c:7876
msgid "E842: no line number to use for \"<slnum>\""
msgstr "E842: , <sfile>"
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
+#, c-format
msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
msgstr "E499: '%' '#' , :p:h"
-#: ../ex_docmd.c:7905
msgid "E500: Evaluates to an empty string"
msgstr "E500: "
-#: ../ex_docmd.c:8838
msgid "E195: Cannot open viminfo file for reading"
msgstr "E195: viminfo"
-#: ../ex_eval.c:464
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr "E608: (:throw) 'Vim'"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
#, c-format
msgid "Exception thrown: %s"
msgstr " : %s"
-#: ../ex_eval.c:545
#, c-format
msgid "Exception finished: %s"
msgstr " : %s"
-#: ../ex_eval.c:546
#, c-format
msgid "Exception discarded: %s"
msgstr " : %s"
-#: ../ex_eval.c:588 ../ex_eval.c:634
#, c-format
msgid "%s, line %<PRId64>"
msgstr "%s, %<PRId64>"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
#, c-format
msgid "Exception caught: %s"
msgstr " : %s"
-#: ../ex_eval.c:676
#, c-format
msgid "%s made pending"
msgstr " %s"
-#: ../ex_eval.c:679
#, c-format
msgid "%s resumed"
msgstr "³ %s"
-#: ../ex_eval.c:683
#, c-format
msgid "%s discarded"
msgstr " %s"
-#: ../ex_eval.c:708
msgid "Exception"
msgstr ""
-#: ../ex_eval.c:713
msgid "Error and interrupt"
msgstr ", "
# msgstr "E231: "
-#: ../ex_eval.c:715
msgid "Error"
msgstr ""
#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
msgid "Interrupt"
msgstr ""
-#: ../ex_eval.c:795
msgid "E579: :if nesting too deep"
msgstr "E579: :if"
-#: ../ex_eval.c:830
msgid "E580: :endif without :if"
msgstr "E580: :endif :if"
-#: ../ex_eval.c:873
msgid "E581: :else without :if"
msgstr "E581: :else :if"
-#: ../ex_eval.c:876
msgid "E582: :elseif without :if"
msgstr "E582: :elseif :if"
-#: ../ex_eval.c:880
msgid "E583: multiple :else"
msgstr "E583: :else"
-#: ../ex_eval.c:883
msgid "E584: :elseif after :else"
msgstr "E584: :elseif :else"
-#: ../ex_eval.c:941
msgid "E585: :while/:for nesting too deep"
msgstr "E585: :while/:for"
-#: ../ex_eval.c:1028
msgid "E586: :continue without :while or :for"
msgstr "E586: :continue :while :for"
-#: ../ex_eval.c:1061
msgid "E587: :break without :while or :for"
msgstr "E587: :break :while :for"
-#: ../ex_eval.c:1102
msgid "E732: Using :endfor with :while"
msgstr "E732: :endfor :while"
-#: ../ex_eval.c:1104
msgid "E733: Using :endwhile with :for"
msgstr "E733: :endwhile :for"
-#: ../ex_eval.c:1247
msgid "E601: :try nesting too deep"
msgstr "E601: :try"
-#: ../ex_eval.c:1317
msgid "E603: :catch without :try"
msgstr "E603: :catch :try"
#. Give up for a ":catch" after ":finally" and ignore it.
#. * Just parse.
-#: ../ex_eval.c:1332
msgid "E604: :catch after :finally"
msgstr "E604: :catch :finally"
-#: ../ex_eval.c:1451
msgid "E606: :finally without :try"
msgstr "E606: :finally :try"
#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
msgid "E607: multiple :finally"
msgstr "E607: :finally"
-#: ../ex_eval.c:1571
msgid "E602: :endtry without :try"
msgstr "E602: :entry :try"
-#: ../ex_eval.c:2026
msgid "E193: :endfunction not inside a function"
msgstr "E193: :endfunction "
-#: ../ex_getln.c:1643
msgid "E788: Not allowed to edit another buffer now"
msgstr "E788: "
-#: ../ex_getln.c:1656
msgid "E811: Not allowed to change buffer information now"
msgstr "E811: "
# msgstr "E197: "
-#: ../ex_getln.c:3178
msgid "tagname"
msgstr " "
-#: ../ex_getln.c:3181
msgid " kind file\n"
msgstr " \n"
-#: ../ex_getln.c:4799
msgid "'history' option is zero"
msgstr " 'history' "
-#: ../ex_getln.c:5046
#, c-format
msgid ""
"\n"
@@ -1994,35 +1566,27 @@ msgstr ""
"\n"
"# %s ( ):\n"
-#: ../ex_getln.c:5047
msgid "Command Line"
msgstr ""
-#: ../ex_getln.c:5048
msgid "Search String"
msgstr " "
-#: ../ex_getln.c:5049
msgid "Expression"
msgstr ""
-#: ../ex_getln.c:5050
msgid "Input Line"
msgstr " "
-#: ../ex_getln.c:5117
msgid "E198: cmd_pchar beyond the command length"
msgstr "E198: cmd_pchar "
-#: ../ex_getln.c:5279
msgid "E199: Active window or buffer deleted"
msgstr "E199: "
-#: ../file_search.c:203
msgid "E854: path too long for completion"
msgstr "E854: "
-#: ../file_search.c:446
#, c-format
msgid ""
"E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -2032,217 +1596,169 @@ msgstr ""
"'%s'."
# msgstr "E343: "
-#: ../file_search.c:1505
#, c-format
msgid "E344: Can't find directory \"%s\" in cdpath"
msgstr "E344: %s cdpath"
# msgstr "E344: "
-#: ../file_search.c:1508
#, c-format
msgid "E345: Can't find file \"%s\" in path"
msgstr "E345: %s path"
# msgstr "E345: "
-#: ../file_search.c:1512
#, c-format
msgid "E346: No more directory \"%s\" found in cdpath"
msgstr "E346: cdpath %s"
# msgstr "E346: "
-#: ../file_search.c:1515
#, c-format
msgid "E347: No more file \"%s\" found in path"
msgstr "E347: %s"
-#: ../fileio.c:137
msgid "E812: Autocommands changed buffer or buffer name"
msgstr "E812: "
# msgstr "E199: "
-#: ../fileio.c:368
msgid "Illegal file name"
msgstr " "
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
msgstr ""
-#: ../fileio.c:397
msgid "is not a file"
msgstr " "
-#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
msgstr "[ ]"
-#: ../fileio.c:511
msgid "[New DIRECTORY]"
msgstr "[ ]"
-#: ../fileio.c:529 ../fileio.c:532
msgid "[File too big]"
msgstr "[ ]"
-#: ../fileio.c:534
msgid "[Permission Denied]"
msgstr "[³]"
-#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: *ReadPre "
# msgstr "E200: "
-#: ../fileio.c:655
msgid "E201: *ReadPre autocommands must not change current buffer"
msgstr "E201: *ReadPre "
# msgstr "E201: "
-#: ../fileio.c:672
msgid "Nvim: Reading from stdin...\n"
msgstr "Vim: stdin...\n"
#. Re-opening the original file failed!
-#: ../fileio.c:909
msgid "E202: Conversion made file unreadable!"
msgstr "E202: !"
# msgstr "E202: "
#. fifo or socket
-#: ../fileio.c:1782
msgid "[fifo/socket]"
msgstr "[/]"
#. fifo
-#: ../fileio.c:1788
msgid "[fifo]"
msgstr "[]"
#. or socket
-#: ../fileio.c:1794
msgid "[socket]"
msgstr "[]"
#. or character special
-#: ../fileio.c:1801
msgid "[character special]"
msgstr "[. ]"
-#: ../fileio.c:1815
msgid "[CR missing]"
msgstr "[ CR]"
-#: ../fileio.c:1819
msgid "[long lines split]"
msgstr "[ ]"
-#: ../fileio.c:1823 ../fileio.c:3512
msgid "[NOT converted]"
msgstr "[ ]"
-#: ../fileio.c:1826 ../fileio.c:3515
msgid "[converted]"
msgstr "[]"
-#: ../fileio.c:1831
#, c-format
msgid "[CONVERSION ERROR in line %<PRId64>]"
msgstr "[ ֲ %<PRId64>]"
-#: ../fileio.c:1835
#, c-format
msgid "[ILLEGAL BYTE in line %<PRId64>]"
msgstr "[ %<PRId64>]"
-#: ../fileio.c:1838
msgid "[READ ERRORS]"
msgstr "[ ]"
-#: ../fileio.c:2104
msgid "Can't find temp file for conversion"
msgstr " "
-#: ../fileio.c:2110
msgid "Conversion with 'charconvert' failed"
msgstr " 'charconvert' "
-#: ../fileio.c:2113
msgid "can't read output of 'charconvert'"
msgstr " 'charconvert'"
# msgstr "E217: "
-#: ../fileio.c:2437
msgid "E676: No matching autocommands for acwrite buffer"
msgstr "E676: "
-#: ../fileio.c:2466
msgid "E203: Autocommands deleted or unloaded buffer to be written"
msgstr "E203: , "
-#: ../fileio.c:2486
msgid "E204: Autocommand changed number of lines in unexpected way"
msgstr "E204: "
-#: ../fileio.c:2548 ../fileio.c:2565
msgid "is not a file or writable device"
msgstr " "
-#: ../fileio.c:2601
msgid "is read-only (add ! to override)"
msgstr " (! )"
-#: ../fileio.c:2886
msgid "E506: Can't write to backup file (add ! to override)"
msgstr "E506: (! )"
-#: ../fileio.c:2898
msgid "E507: Close error for backup file (add ! to override)"
msgstr "E507: (! )"
-#: ../fileio.c:2901
msgid "E508: Can't read file for backup (add ! to override)"
msgstr ""
"E508: (! "
")"
-#: ../fileio.c:2923
msgid "E509: Cannot create backup file (add ! to override)"
msgstr "E509: (! )"
-#: ../fileio.c:3008
msgid "E510: Can't make backup file (add ! to override)"
msgstr "E510: (! )"
#. Can't write without a tempfile!
-#: ../fileio.c:3121
msgid "E214: Can't find temp file for writing"
msgstr "E214: "
-#: ../fileio.c:3134
msgid "E213: Cannot convert (add ! to write without conversion)"
msgstr "E213: (! )"
-#: ../fileio.c:3169
msgid "E166: Can't open linked file for writing"
msgstr "E166: ' "
-#: ../fileio.c:3173
msgid "E212: Can't open file for writing"
msgstr "E212: "
-#: ../fileio.c:3363
msgid "E667: Fsync failed"
msgstr "E667: fsync"
-#: ../fileio.c:3398
msgid "E512: Close failed"
msgstr "E512: "
-#: ../fileio.c:3436
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: , ( 'fenc')"
-#: ../fileio.c:3441
#, c-format
msgid ""
"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
@@ -2251,56 +1767,43 @@ msgstr ""
"E513: , %<PRId64> ( "
"'fenc')"
-#: ../fileio.c:3448
msgid "E514: write error (file system full?)"
msgstr "E514: ( ?)"
-#: ../fileio.c:3506
msgid " CONVERSION ERROR"
msgstr " ֲ"
-#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
msgstr " %<PRId64>;"
-#: ../fileio.c:3519
msgid "[Device]"
msgstr "[]"
-#: ../fileio.c:3522
msgid "[New]"
msgstr "[]"
-#: ../fileio.c:3535
msgid " [a]"
msgstr "[]"
-#: ../fileio.c:3535
msgid " appended"
msgstr " "
-#: ../fileio.c:3537
msgid " [w]"
msgstr "[]"
-#: ../fileio.c:3537
msgid " written"
msgstr " "
-#: ../fileio.c:3579
msgid "E205: Patchmode: can't save original file"
msgstr "E205: : "
-#: ../fileio.c:3602
msgid "E206: patchmode: can't touch empty original file"
msgstr "E206: : "
-#: ../fileio.c:3616
msgid "E207: Can't delete backup file"
msgstr "E207: "
-#: ../fileio.c:3672
msgid ""
"\n"
"WARNING: Original file may be lost or damaged\n"
@@ -2308,134 +1811,105 @@ msgstr ""
"\n"
": , , \n"
-#: ../fileio.c:3675
msgid "don't quit the editor until the file is successfully written!"
msgstr " , !"
-#: ../fileio.c:3795
msgid "[dos]"
msgstr "[dos]"
-#: ../fileio.c:3795
msgid "[dos format]"
msgstr "[ dos]"
-#: ../fileio.c:3801
msgid "[mac]"
msgstr "[mac]"
-#: ../fileio.c:3801
msgid "[mac format]"
msgstr "[ mac]"
-#: ../fileio.c:3807
msgid "[unix]"
msgstr "[unix]"
-#: ../fileio.c:3807
msgid "[unix format]"
msgstr "[ unix]"
-#: ../fileio.c:3831
msgid "1 line, "
msgstr " , "
-#: ../fileio.c:3833
#, c-format
msgid "%<PRId64> lines, "
msgstr "%<PRId64> , "
-#: ../fileio.c:3836
msgid "1 character"
msgstr " "
-#: ../fileio.c:3838
#, c-format
msgid "%<PRId64> characters"
msgstr "%<PRId64> "
-#: ../fileio.c:3849
msgid "[noeol]"
msgstr "[noeol]"
-#: ../fileio.c:3849
msgid "[Incomplete last line]"
msgstr "[ ]"
#. don't overwrite messages here
#. must give this prompt
#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
msgid "WARNING: The file has been changed since reading it!!!"
msgstr ": !!!"
-#: ../fileio.c:3867
msgid "Do you really want to write to it"
msgstr " ??"
-#: ../fileio.c:4648
#, c-format
msgid "E208: Error writing to \"%s\""
msgstr "E208: %s"
-#: ../fileio.c:4655
#, c-format
msgid "E209: Error closing \"%s\""
msgstr "E209: %s"
-#: ../fileio.c:4657
#, c-format
msgid "E210: Error reading \"%s\""
msgstr "E210: %s"
-#: ../fileio.c:4883
msgid "E246: FileChangedShell autocommand deleted buffer"
msgstr "E246: FileChangedShell "
-#: ../fileio.c:4894
#, c-format
msgid "E211: File \"%s\" no longer available"
msgstr "E211: %s "
-#: ../fileio.c:4906
#, c-format
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
"well"
msgstr "W12: : %s , Vim "
-#: ../fileio.c:4907
msgid "See \":help W12\" for more info."
msgstr ". :help W12 ."
-#: ../fileio.c:4910
#, c-format
msgid "W11: Warning: File \"%s\" has changed since editing started"
msgstr "W11: : %s "
-#: ../fileio.c:4911
msgid "See \":help W11\" for more info."
msgstr ". :help W11 ."
-#: ../fileio.c:4914
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr "W16: : %s "
-#: ../fileio.c:4915
msgid "See \":help W16\" for more info."
msgstr ". :help W16 ."
-#: ../fileio.c:4927
#, c-format
msgid "W13: Warning: File \"%s\" has been created after editing started"
msgstr "W13: : %s "
-#: ../fileio.c:4947
msgid "Warning"
msgstr ""
-#: ../fileio.c:4948
msgid ""
"&OK\n"
"&Load File"
@@ -2443,51 +1917,42 @@ msgstr ""
"&O:\n"
"&L:"
-#: ../fileio.c:5065
#, c-format
msgid "E462: Could not prepare for reloading \"%s\""
msgstr "E462: %s, "
-#: ../fileio.c:5078
#, c-format
msgid "E321: Could not reload \"%s\""
msgstr "E321: %s"
-#: ../fileio.c:5601
msgid "--Deleted--"
msgstr "----"
-#: ../fileio.c:5732
#, c-format
msgid "auto-removing autocommand: %s <buffer=%d>"
msgstr " : %s <=%d>"
#. the group doesn't exist
-#: ../fileio.c:5772
#, c-format
msgid "E367: No such group: \"%s\""
msgstr "E367: : %s"
-#: ../fileio.c:5897
#, c-format
msgid "E215: Illegal character after *: %s"
msgstr "E215: *: %s"
# msgstr "E215: "
-#: ../fileio.c:5905
#, c-format
msgid "E216: No such event: %s"
msgstr "E216: 䳿: %s"
# msgstr "E215: "
-#: ../fileio.c:5907
#, c-format
msgid "E216: No such group or event: %s"
msgstr "E216: 䳿: %s"
# msgstr "E216: "
#. Highlight title
-#: ../fileio.c:6090
msgid ""
"\n"
"--- Auto-Commands ---"
@@ -2495,111 +1960,89 @@ msgstr ""
"\n"
"--- ---"
-#: ../fileio.c:6293
#, c-format
msgid "E680: <buffer=%d>: invalid buffer number "
msgstr "E680: <=%d>: "
-#: ../fileio.c:6370
msgid "E217: Can't execute autocommands for ALL events"
msgstr "E217: Ѳ "
# msgstr "E217: "
-#: ../fileio.c:6393
msgid "No matching autocommands"
msgstr " "
-#: ../fileio.c:6831
msgid "E218: autocommand nesting too deep"
msgstr "E218: "
# msgstr "E218: "
-#: ../fileio.c:7143
#, c-format
msgid "%s Auto commands for \"%s\""
msgstr " %s %s"
-#: ../fileio.c:7149
#, c-format
msgid "Executing %s"
msgstr " %s"
-#: ../fileio.c:7211
#, c-format
msgid "autocommand %s"
msgstr " %s"
-#: ../fileio.c:7795
msgid "E219: Missing {."
msgstr "E219: {."
# msgstr "E219: "
-#: ../fileio.c:7797
msgid "E220: Missing }."
msgstr "E220: }."
# msgstr "E220: "
-#: ../fold.c:93
msgid "E490: No fold found"
msgstr "E490: "
# msgstr "E349: "
-#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
msgstr "E350: 'foldmethod'"
-#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
msgstr "E351: 'foldmethod'"
-#: ../fold.c:1784
#, c-format
msgid "+--%3ld lines folded "
msgstr "+-- %3ld "
#. buffer has already been read
-#: ../getchar.c:273
msgid "E222: Add to read buffer"
msgstr "E222: "
-#: ../getchar.c:2040
msgid "E223: recursive mapping"
msgstr "E223: "
# msgstr "E223: "
-#: ../getchar.c:2849
#, c-format
msgid "E224: global abbreviation already exists for %s"
msgstr "E224: %s "
# msgstr "E224: "
-#: ../getchar.c:2852
#, c-format
msgid "E225: global mapping already exists for %s"
msgstr "E225: %s "
# msgstr "E225: "
-#: ../getchar.c:2952
#, c-format
msgid "E226: abbreviation already exists for %s"
msgstr "E226: %s"
# msgstr "E226: "
-#: ../getchar.c:2955
#, c-format
msgid "E227: mapping already exists for %s"
msgstr "E227: %s"
# msgstr "E227: "
-#: ../getchar.c:3008
msgid "No abbreviation found"
msgstr " "
-#: ../getchar.c:3010
msgid "No mapping found"
msgstr " "
-#: ../getchar.c:3974
msgid "E228: makemap: Illegal mode"
msgstr "E228: makemap: "
@@ -2607,7 +2050,6 @@ msgstr "E228: makemap: "
#. key value of 'cedit' option
#. type of cmdline window or 0
#. result of cmdline window or 0
-#: ../globals.h:924
msgid "--No lines in buffer--"
msgstr "-- --"
@@ -2615,680 +2057,526 @@ msgstr "-- --"
#. * The error messages that can be shared are included here.
#. * Excluded are errors that are only used once and debugging messages.
#.
-#: ../globals.h:996
msgid "E470: Command aborted"
msgstr "E470: "
-#: ../globals.h:997
msgid "E471: Argument required"
msgstr "E471: "
-#: ../globals.h:998
msgid "E10: \\ should be followed by /, ? or &"
msgstr "E10: \\ /, ? &"
# msgstr "E10: "
-#: ../globals.h:1000
msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
msgstr "E11: , <CR> , CTRL-C "
-#: ../globals.h:1002
msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
msgstr ""
"E12: exrc/vimrc "
-#: ../globals.h:1003
msgid "E171: Missing :endif"
msgstr "E171: :endif"
-#: ../globals.h:1004
msgid "E600: Missing :endtry"
msgstr "E600: :endtry"
-#: ../globals.h:1005
msgid "E170: Missing :endwhile"
msgstr "E170: :endwhile"
-#: ../globals.h:1006
msgid "E170: Missing :endfor"
msgstr "E170: :endfor"
-#: ../globals.h:1007
msgid "E588: :endwhile without :while"
msgstr "E588: :endwhile :while"
-#: ../globals.h:1008
msgid "E588: :endfor without :for"
msgstr "E588: :endfor :for"
-#: ../globals.h:1009
msgid "E13: File exists (add ! to override)"
msgstr "E13: (! )"
-#: ../globals.h:1010
msgid "E472: Command failed"
msgstr "E472: "
-#: ../globals.h:1011
msgid "E473: Internal error"
msgstr "E473: "
-#: ../globals.h:1012
msgid "Interrupted"
msgstr ""
-#: ../globals.h:1013
msgid "E14: Invalid address"
msgstr "E14: "
# msgstr "E14: "
-#: ../globals.h:1014
msgid "E474: Invalid argument"
msgstr "E474: "
-#: ../globals.h:1015
#, c-format
msgid "E475: Invalid argument: %s"
msgstr "E475: : %s"
-#: ../globals.h:1016
#, c-format
msgid "E15: Invalid expression: %s"
msgstr "E15: : %s"
# msgstr "E15: "
-#: ../globals.h:1017
msgid "E16: Invalid range"
msgstr "E16: "
# msgstr "E16: "
-#: ../globals.h:1018
msgid "E476: Invalid command"
msgstr "E476: "
-#: ../globals.h:1019
#, c-format
msgid "E17: \"%s\" is a directory"
msgstr "E17: %s "
-#: ../globals.h:1020
-#, fuzzy
msgid "E900: Invalid job id"
-msgstr "E49: "
+msgstr "E900: . "
-#: ../globals.h:1021
msgid "E901: Job table is full"
-msgstr ""
+msgstr "E901: "
-#: ../globals.h:1022
#, c-format
msgid "E902: \"%s\" is not an executable"
-msgstr ""
+msgstr "E902: \"%s\" "
-#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
msgstr "E364: %s() "
# msgstr "E18: "
-#: ../globals.h:1026
msgid "E19: Mark has invalid line number"
msgstr "E19: "
# msgstr "E19: "
-#: ../globals.h:1027
msgid "E20: Mark not set"
msgstr "E20: "
# msgstr "E20: "
-#: ../globals.h:1029
msgid "E21: Cannot make changes, 'modifiable' is off"
msgstr "E21: : 'modifiable'"
# msgstr "E21: "
-#: ../globals.h:1030
msgid "E22: Scripts nested too deep"
msgstr "E22: "
# msgstr "E22: "
-#: ../globals.h:1031
msgid "E23: No alternate file"
msgstr "E23: "
# msgstr "E23: "
-#: ../globals.h:1032
msgid "E24: No such abbreviation"
msgstr "E24: "
# msgstr "E24: "
-#: ../globals.h:1033
msgid "E477: No ! allowed"
msgstr "E477: ! "
-#: ../globals.h:1035
msgid "E25: Nvim does not have a built-in GUI"
msgstr "E25: GUI: "
# msgstr "E25: "
-#: ../globals.h:1036
#, c-format
msgid "E28: No such highlight group name: %s"
msgstr "E28: : %s"
# msgstr "E28: "
-#: ../globals.h:1037
msgid "E29: No inserted text yet"
msgstr "E29: "
# msgstr "E29: "
-#: ../globals.h:1038
msgid "E30: No previous command line"
msgstr "E30: "
# msgstr "E30: "
-#: ../globals.h:1039
msgid "E31: No such mapping"
msgstr "E31: "
# msgstr "E31: "
-#: ../globals.h:1040
msgid "E479: No match"
msgstr "E479: "
-#: ../globals.h:1041
#, c-format
msgid "E480: No match: %s"
msgstr "E480: : %s"
-#: ../globals.h:1042
msgid "E32: No file name"
msgstr "E32: "
# msgstr "E32: "
-#: ../globals.h:1044
msgid "E33: No previous substitute regular expression"
msgstr "E33: "
# msgstr "E33: "
-#: ../globals.h:1045
msgid "E34: No previous command"
msgstr "E34: "
# msgstr "E34: "
-#: ../globals.h:1046
msgid "E35: No previous regular expression"
msgstr "E35: "
# msgstr "E35: "
-#: ../globals.h:1047
msgid "E481: No range allowed"
msgstr "E481: "
-#: ../globals.h:1048
msgid "E36: Not enough room"
msgstr "E36: ̳ "
# msgstr "E36: "
-#: ../globals.h:1049
#, c-format
msgid "E482: Can't create file %s"
msgstr "E482: %s"
-#: ../globals.h:1050
msgid "E483: Can't get temp file name"
msgstr "E483: "
-#: ../globals.h:1051
#, c-format
msgid "E484: Can't open file %s"
msgstr "E484: %s"
-#: ../globals.h:1052
#, c-format
msgid "E485: Can't read file %s"
msgstr "E485: %s"
-#: ../globals.h:1054
msgid "E37: No write since last change (add ! to override)"
msgstr "E37: (! )"
-#: ../globals.h:1055
-#, fuzzy
msgid "E37: No write since last change"
-msgstr "[ ]\n"
+msgstr "E37: "
-#: ../globals.h:1056
msgid "E38: Null argument"
msgstr "E38: ³ "
-#: ../globals.h:1057
msgid "E39: Number expected"
msgstr "E39: "
-#: ../globals.h:1058
#, c-format
msgid "E40: Can't open errorfile %s"
msgstr "E40: %s"
-#: ../globals.h:1059
msgid "E41: Out of memory!"
msgstr "E41: '!"
-#: ../globals.h:1060
msgid "Pattern not found"
msgstr " "
-#: ../globals.h:1061
#, c-format
msgid "E486: Pattern not found: %s"
msgstr "E486: : %s"
-#: ../globals.h:1062
msgid "E487: Argument must be positive"
msgstr "E487: "
-#: ../globals.h:1064
msgid "E459: Cannot go back to previous directory"
msgstr "E459: "
-#: ../globals.h:1066
msgid "E42: No Errors"
msgstr "E42: "
-#: ../globals.h:1067
msgid "E776: No location list"
msgstr "E776: "
-#: ../globals.h:1068
msgid "E43: Damaged match string"
msgstr "E43: "
-#: ../globals.h:1069
msgid "E44: Corrupted regexp program"
msgstr "E44: dz "
-#: ../globals.h:1071
msgid "E45: 'readonly' option is set (add ! to override)"
msgstr "E45: 'readonly' (! )"
-#: ../globals.h:1073
#, c-format
msgid "E46: Cannot change read-only variable \"%s\""
msgstr "E46: : %s"
-#: ../globals.h:1075
#, c-format
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr "E794: : %s"
-#: ../globals.h:1076
msgid "E47: Error while reading errorfile"
msgstr "E47: "
-#: ../globals.h:1078
msgid "E48: Not allowed in sandbox"
msgstr "E48: "
-#: ../globals.h:1080
msgid "E523: Not allowed here"
msgstr "E523: "
-#: ../globals.h:1082
msgid "E359: Screen mode setting not supported"
msgstr "E359: "
-#: ../globals.h:1083
msgid "E49: Invalid scroll size"
msgstr "E49: "
-#: ../globals.h:1084
msgid "E91: 'shell' option is empty"
msgstr "E91: 'shell' "
# msgstr "E254: "
-#: ../globals.h:1085
msgid "E255: Couldn't read in sign data!"
msgstr "E255: !"
-#: ../globals.h:1086
msgid "E72: Close error on swap file"
msgstr "E72: "
-#: ../globals.h:1087
msgid "E73: tag stack empty"
msgstr "E73: 崳 "
-#: ../globals.h:1088
msgid "E74: Command too complex"
msgstr "E74: "
-#: ../globals.h:1089
msgid "E75: Name too long"
msgstr "E75: '"
-#: ../globals.h:1090
msgid "E76: Too many ["
msgstr "E76: '['"
-#: ../globals.h:1091
msgid "E77: Too many file names"
msgstr "E77: "
-#: ../globals.h:1092
msgid "E488: Trailing characters"
msgstr "E488: "
-#: ../globals.h:1093
msgid "E78: Unknown mark"
msgstr "E78: "
-#: ../globals.h:1094
msgid "E79: Cannot expand wildcards"
msgstr "E79: "
-#: ../globals.h:1096
msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
msgstr "E591: 'winheight' 'winminheight'"
-#: ../globals.h:1098
msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
msgstr "E592: 'winwidth' 'winminwidth'"
# msgstr "E79: "
-#: ../globals.h:1099
msgid "E80: Error while writing"
msgstr "E80: "
-#: ../globals.h:1100
msgid "Zero count"
msgstr " "
-#: ../globals.h:1101
msgid "E81: Using <SID> not in a script context"
msgstr "E81: <SID> "
-#: ../globals.h:1102
#, c-format
msgid "E685: Internal error: %s"
msgstr "E685: : %s"
-#: ../globals.h:1104
msgid "E363: pattern uses more memory than 'maxmempattern'"
msgstr "E363: , 'maxmempattern', '"
-#: ../globals.h:1105
msgid "E749: empty buffer"
msgstr "E749: "
-#: ../globals.h:1108
msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: "
-#: ../globals.h:1109
msgid "E139: File is loaded in another buffer"
msgstr "E139: "
# msgstr "E235: "
-#: ../globals.h:1110
#, c-format
msgid "E764: Option '%s' is not set"
msgstr "E764: '%s' "
-#: ../globals.h:1111
msgid "E850: Invalid register name"
msgstr "E850: "
-#: ../globals.h:1114
msgid "search hit TOP, continuing at BOTTOM"
msgstr " , ʲ"
-#: ../globals.h:1115
msgid "search hit BOTTOM, continuing at TOP"
msgstr " ʲ, "
-#: ../hardcopy.c:240
msgid "E550: Missing colon"
msgstr "E550: "
# msgstr "E347: "
-#: ../hardcopy.c:252
msgid "E551: Illegal component"
msgstr "E551: "
-#: ../hardcopy.c:259
msgid "E552: digit expected"
msgstr "E552: "
-#: ../hardcopy.c:473
#, c-format
msgid "Page %d"
msgstr " %d"
-#: ../hardcopy.c:597
msgid "No text to be printed"
msgstr "ͳ "
-#: ../hardcopy.c:668
#, c-format
msgid "Printing page %d (%d%%)"
msgstr " %d (%d%%)"
-#: ../hardcopy.c:680
#, c-format
msgid " Copy %d of %d"
msgstr " %d %d"
-#: ../hardcopy.c:733
#, c-format
msgid "Printed: %s"
msgstr ": %s"
-#: ../hardcopy.c:740
msgid "Printing aborted"
msgstr " "
-#: ../hardcopy.c:1365
msgid "E455: Error writing to PostScript output file"
msgstr "E455: PostScript"
-#: ../hardcopy.c:1747
#, c-format
msgid "E624: Can't open file \"%s\""
msgstr "E624: %s"
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
#, c-format
msgid "E457: Can't read PostScript resource file \"%s\""
msgstr "E457: PostScript %s"
-#: ../hardcopy.c:1772
#, c-format
msgid "E618: file \"%s\" is not a PostScript resource file"
msgstr "E618: %s PostScript"
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
#, c-format
msgid "E619: file \"%s\" is not a supported PostScript resource file"
msgstr "E619: %s PostScript"
-#: ../hardcopy.c:1856
#, c-format
msgid "E621: \"%s\" resource file has wrong version"
msgstr "E621: %s"
-#: ../hardcopy.c:2225
msgid "E673: Incompatible multi-byte encoding and character set."
msgstr "E673: ."
-#: ../hardcopy.c:2238
msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
msgstr ""
"E674: printmbcharset ."
-#: ../hardcopy.c:2254
msgid "E675: No default font specified for multi-byte printing."
msgstr "E675: ."
-#: ../hardcopy.c:2426
msgid "E324: Can't open PostScript output file"
msgstr "E324: PostScript "
-#: ../hardcopy.c:2458
#, c-format
msgid "E456: Can't open file \"%s\""
msgstr "E456: %s"
-#: ../hardcopy.c:2583
msgid "E456: Can't find PostScript resource file \"prolog.ps\""
msgstr "E456: PostScript prolog.ps"
-#: ../hardcopy.c:2593
msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
msgstr "E456: PostScript cidfont.ps"
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
#, c-format
msgid "E456: Can't find PostScript resource file \"%s.ps\""
msgstr "E456: PostScript %s.ps"
-#: ../hardcopy.c:2654
#, c-format
msgid "E620: Unable to convert to print encoding \"%s\""
msgstr "E620: %s"
-#: ../hardcopy.c:2877
msgid "Sending to printer..."
msgstr "³ ..."
-#: ../hardcopy.c:2881
msgid "E365: Failed to print PostScript file"
msgstr "E365: PostScript"
-#: ../hardcopy.c:2883
msgid "Print job sent."
msgstr " ."
# msgstr "E255: "
-#: ../if_cscope.c:85
msgid "Add a new database"
msgstr " "
-#: ../if_cscope.c:87
msgid "Query for a pattern"
msgstr " "
-#: ../if_cscope.c:89
msgid "Show this message"
msgstr " "
-#: ../if_cscope.c:91
msgid "Kill a connection"
msgstr " '"
-#: ../if_cscope.c:93
msgid "Reinit all connections"
msgstr " '"
-#: ../if_cscope.c:95
msgid "Show connections"
msgstr " '"
-#: ../if_cscope.c:101
#, c-format
msgid "E560: Usage: cs[cope] %s"
msgstr "E560: : cs[cope] %s"
-#: ../if_cscope.c:225
msgid "This cscope command does not support splitting the window.\n"
msgstr " cscope 쳺 .\n"
-#: ../if_cscope.c:266
msgid "E562: Usage: cstag <ident>"
msgstr "E562: : cstag <->"
-#: ../if_cscope.c:313
msgid "E257: cstag: tag not found"
msgstr "E257: cstag: "
# msgstr "E257: "
-#: ../if_cscope.c:461
#, c-format
msgid "E563: stat(%s) error: %d"
msgstr "E563: stat(%s) : %d"
-#: ../if_cscope.c:551
#, c-format
msgid "E564: %s is not a directory or a valid cscope database"
msgstr "E564: %s , cscope"
-#: ../if_cscope.c:566
#, c-format
msgid "Added cscope database %s"
msgstr " cscope %s"
-#: ../if_cscope.c:616
#, c-format
msgid "E262: error reading cscope connection %<PRId64>"
msgstr "E262: ' cscope %<PRId64>"
-#: ../if_cscope.c:711
msgid "E561: unknown cscope search type"
msgstr "E561: cscope"
-#: ../if_cscope.c:752 ../if_cscope.c:789
msgid "E566: Could not create cscope pipes"
msgstr "E566: cscope"
-#: ../if_cscope.c:767
msgid "E622: Could not fork for cscope"
msgstr "E622: cscope"
-#: ../if_cscope.c:849
msgid "cs_create_connection setpgid failed"
msgstr "cs_create_connection: setpgid"
-#: ../if_cscope.c:853 ../if_cscope.c:889
msgid "cs_create_connection exec failed"
msgstr "cs_create_connection: "
-#: ../if_cscope.c:863 ../if_cscope.c:902
msgid "cs_create_connection: fdopen for to_fp failed"
msgstr "cs_create_connection: fdopen to_fp "
-#: ../if_cscope.c:865 ../if_cscope.c:906
msgid "cs_create_connection: fdopen for fr_fp failed"
msgstr "cs_create_connection: fdopen fr_fp "
-#: ../if_cscope.c:890
msgid "E623: Could not spawn cscope process"
msgstr "E623: cscope"
-#: ../if_cscope.c:932
msgid "E567: no cscope connections"
msgstr "E567: ' cscope"
-#: ../if_cscope.c:1009
#, c-format
msgid "E469: invalid cscopequickfix flag %c for %c"
msgstr "E469: cscopequickfix %c %c"
# msgstr "E258: "
-#: ../if_cscope.c:1058
#, c-format
msgid "E259: no matches found for cscope query %s of %s"
msgstr "E259: cscope %s %s "
# msgstr "E259: "
-#: ../if_cscope.c:1142
msgid "cscope commands:\n"
msgstr " cscope:\n"
-#: ../if_cscope.c:1150
#, c-format
msgid "%-5s: %s%*s (Usage: %s)"
msgstr "%-5s: %s%*s (: %s)"
-#: ../if_cscope.c:1155
msgid ""
"\n"
" c: Find functions calling this function\n"
@@ -3310,32 +2598,26 @@ msgstr ""
" s: C\n"
" t: \n"
-#: ../if_cscope.c:1226
msgid "E568: duplicate cscope database not added"
msgstr "E568: cscope "
# msgstr "E260: "
-#: ../if_cscope.c:1335
#, c-format
msgid "E261: cscope connection %s not found"
msgstr "E261: ' cscope %s "
-#: ../if_cscope.c:1364
#, c-format
msgid "cscope connection %s closed"
msgstr "' cscope %s "
#. should not reach here
-#: ../if_cscope.c:1486
msgid "E570: fatal error in cs_manage_matches"
msgstr "E570: cs_manage_matches"
-#: ../if_cscope.c:1693
#, c-format
msgid "Cscope tag: %s"
msgstr " cscope: %s"
-#: ../if_cscope.c:1711
msgid ""
"\n"
" # line"
@@ -3343,89 +2625,69 @@ msgstr ""
"\n"
" # "
-#: ../if_cscope.c:1713
msgid "filename / context / line\n"
msgstr " / / \n"
-#: ../if_cscope.c:1809
#, c-format
msgid "E609: Cscope error: %s"
msgstr "E609: cscope: %s"
-#: ../if_cscope.c:2053
msgid "All cscope databases reset"
msgstr " cscope "
-#: ../if_cscope.c:2123
msgid "no cscope connections\n"
msgstr " ' cscope\n"
-#: ../if_cscope.c:2126
msgid " # pid database name prepend path\n"
msgstr " # pid \n"
-#: ../main.c:144
msgid "Unknown option argument"
msgstr " "
-#: ../main.c:146
msgid "Too many edit arguments"
msgstr " "
-#: ../main.c:148
msgid "Argument missing after"
msgstr " "
-#: ../main.c:150
msgid "Garbage after option argument"
msgstr " "
-#: ../main.c:152
msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
msgstr " +, -c --cmd "
# msgstr "E14: "
-#: ../main.c:154
msgid "Invalid argument for"
msgstr " "
-#: ../main.c:294
#, c-format
msgid "%d files to edit\n"
msgstr "%d ()\n"
-#: ../main.c:1342
msgid "Attempt to open script file again: \""
msgstr " : \""
-#: ../main.c:1350
msgid "Cannot open for reading: \""
msgstr " : \""
-#: ../main.c:1393
msgid "Cannot open for script output: \""
msgstr " : \""
-#: ../main.c:1622
msgid "Vim: Warning: Output is not to a terminal\n"
msgstr "Vim: : \n"
-#: ../main.c:1624
msgid "Vim: Warning: Input is not from a terminal\n"
msgstr "Vim: : \n"
#. just in case..
-#: ../main.c:1891
msgid "pre-vimrc command line"
msgstr " vimrc"
-#: ../main.c:1964
#, c-format
msgid "E282: Cannot read from \"%s\""
msgstr "E282: %s"
# msgstr "E282: "
-#: ../main.c:2149
msgid ""
"\n"
"More info with: \"vim -h\"\n"
@@ -3433,23 +2695,18 @@ msgstr ""
"\n"
"ij : vim -h\n"
-#: ../main.c:2178
msgid "[file ..] edit specified file(s)"
msgstr "[ ..] "
-#: ../main.c:2179
msgid "- read text from stdin"
msgstr "- stdin"
-#: ../main.c:2180
msgid "-t tag edit file where tag is defined"
msgstr "-t "
-#: ../main.c:2181
msgid "-q [errorfile] edit file with first error"
msgstr "-q [] "
-#: ../main.c:2187
msgid ""
"\n"
"\n"
@@ -3459,11 +2716,9 @@ msgstr ""
"\n"
":"
-#: ../main.c:2189
msgid " vim [arguments] "
msgstr " vim [] "
-#: ../main.c:2193
msgid ""
"\n"
" or:"
@@ -3471,7 +2726,6 @@ msgstr ""
"\n"
" :"
-#: ../main.c:2196
msgid ""
"\n"
"\n"
@@ -3481,192 +2735,146 @@ msgstr ""
"\n"
":\n"
-#: ../main.c:2197
msgid "--\t\t\tOnly file names after this"
msgstr "--\t\t\t "
-#: ../main.c:2199
msgid "--literal\t\tDon't expand wildcards"
msgstr "--literal\t\t "
-#: ../main.c:2201
msgid "-v\t\t\tVi mode (like \"vi\")"
msgstr "-v\t\t\t Vi ( vi)"
-#: ../main.c:2202
msgid "-e\t\t\tEx mode (like \"ex\")"
msgstr "-e\t\t\t Ex ( ex)"
-#: ../main.c:2203
msgid "-E\t\t\tImproved Ex mode"
msgstr "-E\t\t\t Ex"
-#: ../main.c:2204
msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
msgstr "-s\t\t\t () ( ex)"
-#: ../main.c:2205
msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
msgstr "-d\t\t\t ( vimdiff)"
-#: ../main.c:2206
msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
msgstr "-y\t\t\t ( evim, )"
-#: ../main.c:2207
msgid "-R\t\t\tReadonly mode (like \"view\")"
msgstr "-R\t\t\t ( view)"
-#: ../main.c:2208
msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
msgstr "-Z\t\t\t ( rvim)"
-#: ../main.c:2209
msgid "-m\t\t\tModifications (writing files) not allowed"
msgstr "-m\t\t\t ( ) "
-#: ../main.c:2210
msgid "-M\t\t\tModifications in text not allowed"
msgstr "-M\t\t\t "
-#: ../main.c:2211
msgid "-b\t\t\tBinary mode"
msgstr "-b\t\t\t "
-#: ../main.c:2212
msgid "-l\t\t\tLisp mode"
msgstr "-l\t\t\t lisp"
-#: ../main.c:2213
msgid "-C\t\t\tCompatible with Vi: 'compatible'"
msgstr "-C\t\t\t Vi : 'compatible'"
-#: ../main.c:2214
msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
msgstr "-N\t\t\t Vi : 'nocompatible'"
-#: ../main.c:2215
msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
msgstr "-V[N][]\t\t [ N] [ . ]"
-#: ../main.c:2216
msgid "-D\t\t\tDebugging mode"
msgstr "-D\t\t\t "
-#: ../main.c:2217
msgid "-n\t\t\tNo swap file, use memory only"
msgstr "-n\t\t\t , '"
-#: ../main.c:2218
msgid "-r\t\t\tList swap files and exit"
msgstr "-r\t\t\t "
-#: ../main.c:2219
msgid "-r (with file name)\tRecover crashed session"
msgstr "-r ( )\t³ "
-#: ../main.c:2220
msgid "-L\t\t\tSame as -r"
msgstr "-L\t\t\t , -r"
-#: ../main.c:2221
msgid "-A\t\t\tstart in Arabic mode"
msgstr "-A\t\t\t "
-#: ../main.c:2222
msgid "-H\t\t\tStart in Hebrew mode"
msgstr "-H\t\t\t "
-#: ../main.c:2223
msgid "-F\t\t\tStart in Farsi mode"
msgstr "-F\t\t\t "
-#: ../main.c:2224
msgid "-T <terminal>\tSet terminal type to <terminal>"
msgstr "-T <>\t <>"
-#: ../main.c:2225
msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
msgstr "-u <vimrc>\t\t .vimrc"
-#: ../main.c:2226
msgid "--noplugin\t\tDon't load plugin scripts"
msgstr "--noplugin\t\t "
-#: ../main.c:2227
msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
msgstr "-p[N]\t\t³ N ( )"
-#: ../main.c:2228
msgid "-o[N]\t\tOpen N windows (default: one for each file)"
msgstr "-o[N]\t\t³ N ( )"
-#: ../main.c:2229
msgid "-O[N]\t\tLike -o but split vertically"
msgstr "-O[N]\t\tͳ -o, "
-#: ../main.c:2230
msgid "+\t\t\tStart at end of file"
msgstr "+\t\t\t "
-#: ../main.c:2231
msgid "+<lnum>\t\tStart at line <lnum>"
msgstr "+<>\t\t <>"
-#: ../main.c:2232
msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
msgstr "--cmd <>\t <> vimrc"
-#: ../main.c:2233
msgid "-c <command>\t\tExecute <command> after loading the first file"
msgstr "-c <>\t\t <> "
-#: ../main.c:2235
msgid "-S <session>\t\tSource file <session> after loading the first file"
msgstr "-S <>\t\t "
-#: ../main.c:2236
msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
msgstr "-s <>\t\t <>"
-#: ../main.c:2237
msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
msgstr "-w <>\t\t <>"
-#: ../main.c:2238
msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
msgstr "-w <>\t\t <>"
-#: ../main.c:2240
msgid "--startuptime <file>\tWrite startup timing messages to <file>"
msgstr ""
"--startuptime <>\t "
" <>"
-#: ../main.c:2242
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
msgstr "-i <viminfo>\t\t <viminfo> .viminfo"
-#: ../main.c:2243
msgid "-h or --help\tPrint Help (this message) and exit"
msgstr "-h --help\t "
-#: ../main.c:2244
msgid "--version\t\tPrint version information and exit"
msgstr "--version\t\t "
-#: ../mark.c:676
msgid "No marks set"
msgstr " "
-#: ../mark.c:678
#, c-format
msgid "E283: No marks matching \"%s\""
msgstr "E283: %s "
# msgstr "E283: "
#. Highlight title
-#: ../mark.c:687
msgid ""
"\n"
"mark line col file/text"
@@ -3675,7 +2883,6 @@ msgstr ""
". . . /"
#. Highlight title
-#: ../mark.c:789
msgid ""
"\n"
" jump line col file/text"
@@ -3685,7 +2892,6 @@ msgstr ""
# msgstr "E283: "
#. Highlight title
-#: ../mark.c:831
msgid ""
"\n"
"change line col text"
@@ -3694,7 +2900,6 @@ msgstr ""
" . . "
# TODO
-#: ../mark.c:1238
msgid ""
"\n"
"# File marks:\n"
@@ -3703,7 +2908,6 @@ msgstr ""
"# :\n"
#. Write the jumplist with -'
-#: ../mark.c:1271
msgid ""
"\n"
"# Jumplist (newest first):\n"
@@ -3712,7 +2916,6 @@ msgstr ""
"# ( ):\n"
# TODO
-#: ../mark.c:1352
msgid ""
"\n"
"# History of marks within files (newest to oldest):\n"
@@ -3720,90 +2923,71 @@ msgstr ""
"\n"
"# ( ):\n"
-#: ../mark.c:1431
msgid "Missing '>'"
msgstr " '>'"
# msgstr "E292: "
-#: ../memfile.c:426
msgid "E293: block was not locked"
msgstr "E293: "
# msgstr "E293: "
-#: ../memfile.c:799
msgid "E294: Seek error in swap file read"
msgstr "E294: "
-#: ../memfile.c:803
msgid "E295: Read error in swap file"
msgstr "E295: "
-#: ../memfile.c:849
msgid "E296: Seek error in swap file write"
msgstr "E296: "
-#: ../memfile.c:865
msgid "E297: Write error in swap file"
msgstr "E297: "
-#: ../memfile.c:1036
msgid "E300: Swap file already exists (symlink attack?)"
msgstr "E300: ( ?)"
-#: ../memline.c:318
msgid "E298: Didn't get block nr 0?"
msgstr "E298: 0?"
-#: ../memline.c:361
msgid "E298: Didn't get block nr 1?"
msgstr "E298: 1?"
# msgstr "E298: "
-#: ../memline.c:377
msgid "E298: Didn't get block nr 2?"
msgstr "E298: 2?"
#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
msgid "E301: Oops, lost the swap file!!!"
msgstr "E301: , !!!"
# msgstr "E301: "
-#: ../memline.c:477
msgid "E302: Could not rename swap file"
msgstr "E302: "
# msgstr "E302: "
-#: ../memline.c:554
#, c-format
msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
msgstr "E303: %s, "
-#: ../memline.c:666
msgid "E304: ml_upd_block0(): Didn't get block 0??"
msgstr "E304: ml_upd_block0(): 0??"
#. no swap files found
-#: ../memline.c:830
#, c-format
msgid "E305: No swap file found for %s"
msgstr "E305: %s"
# msgstr "E305: "
-#: ../memline.c:839
msgid "Enter number of swap file to use (0 to quit): "
msgstr " , , (0 ):"
-#: ../memline.c:879
#, c-format
msgid "E306: Cannot open %s"
msgstr "E306: %s"
-#: ../memline.c:897
msgid "Unable to read block 0 from "
msgstr " 0 "
-#: ../memline.c:900
msgid ""
"\n"
"Maybe no changes were made or Vim did not update the swap file."
@@ -3811,28 +2995,22 @@ msgstr ""
"\n"
", , Vim ."
-#: ../memline.c:909
msgid " cannot be used with this version of Vim.\n"
msgstr " Vim.\n"
-#: ../memline.c:911
msgid "Use Vim version 3.0.\n"
msgstr " Vim 3.0\n"
-#: ../memline.c:916
#, c-format
msgid "E307: %s does not look like a Vim swap file"
msgstr "E307: %s Vim"
-#: ../memline.c:922
msgid " cannot be used on this computer.\n"
msgstr " '.\n"
-#: ../memline.c:924
msgid "The file was created on "
msgstr " "
-#: ../memline.c:928
msgid ""
",\n"
"or the file has been damaged."
@@ -3840,89 +3018,70 @@ msgstr ""
",\n"
" ."
-#: ../memline.c:945
msgid " has been damaged (page size is smaller than minimum value).\n"
msgstr " ( ).\n"
-#: ../memline.c:974
#, c-format
msgid "Using swap file \"%s\""
msgstr " %s"
-#: ../memline.c:980
#, c-format
msgid "Original file \"%s\""
msgstr " %s"
-#: ../memline.c:995
msgid "E308: Warning: Original file may have been changed"
msgstr "E308: : , "
# msgstr "E308: "
-#: ../memline.c:1061
#, c-format
msgid "E309: Unable to read block 1 from %s"
msgstr "E309: 1 %s"
# msgstr "E309: "
-#: ../memline.c:1065
msgid "???MANY LINES MISSING"
msgstr "??? Ӫ ʲ"
-#: ../memline.c:1076
msgid "???LINE COUNT WRONG"
msgstr "??? ʲʲ ʲ"
-#: ../memline.c:1082
msgid "???EMPTY BLOCK"
msgstr "??? Ͳ "
-#: ../memline.c:1103
msgid "???LINES MISSING"
msgstr "??? Ͳ "
-#: ../memline.c:1128
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr "E310: 1 (%s ?)"
# msgstr "E310: "
-#: ../memline.c:1133
msgid "???BLOCK MISSING"
msgstr "??? "
-#: ../memline.c:1147
msgid "??? from here until ???END lines may be messed up"
msgstr "??? `??? ʲ' , , "
-#: ../memline.c:1164
msgid "??? from here until ???END lines may have been inserted/deleted"
msgstr "??? `??? ʲ' , , /"
-#: ../memline.c:1181
msgid "???END"
msgstr "??? ʲ"
-#: ../memline.c:1238
msgid "E311: Recovery Interrupted"
msgstr "E311: ³ "
-#: ../memline.c:1243
msgid ""
"E312: Errors detected while recovering; look for lines starting with ???"
msgstr ""
"E312: ϳ . , "
" ???"
-#: ../memline.c:1245
msgid "See \":help E312\" for more information."
msgstr ". :help E312 ."
-#: ../memline.c:1249
msgid "Recovery completed. You should check if everything is OK."
msgstr "³ , ."
-#: ../memline.c:1251
msgid ""
"\n"
"(You might want to write out this file under another name\n"
@@ -3930,15 +3089,12 @@ msgstr ""
"\n"
"(, \n"
-#: ../memline.c:1252
msgid "and run diff with the original file to check for changes)"
msgstr " diff )"
-#: ../memline.c:1254
msgid "Recovery completed. Buffer contents equals file contents."
msgstr "³ . ."
-#: ../memline.c:1255
msgid ""
"\n"
"You may want to delete the .swp file now.\n"
@@ -3949,51 +3105,39 @@ msgstr ""
"\n"
#. use msg() to start the scrolling properly
-#: ../memline.c:1327
msgid "Swap files found:"
msgstr " :"
-#: ../memline.c:1446
msgid " In current directory:\n"
msgstr " :\n"
-#: ../memline.c:1448
msgid " Using specified name:\n"
msgstr " :\n"
-#: ../memline.c:1450
msgid " In directory "
msgstr " "
-#: ../memline.c:1465
msgid " -- none --\n"
msgstr " -- --\n"
-#: ../memline.c:1527
msgid " owned by: "
msgstr " : "
-#: ../memline.c:1529
msgid " dated: "
msgstr " : "
-#: ../memline.c:1532 ../memline.c:3231
msgid " dated: "
msgstr " : "
-#: ../memline.c:1548
msgid " [from Vim version 3.0]"
msgstr " [ Vim 3.0]"
-#: ../memline.c:1550
msgid " [does not look like a Vim swap file]"
msgstr " [ ]"
-#: ../memline.c:1552
msgid " file name: "
msgstr " : "
-#: ../memline.c:1558
msgid ""
"\n"
" modified: "
@@ -4001,15 +3145,12 @@ msgstr ""
"\n"
" : "
-#: ../memline.c:1559
msgid "YES"
msgstr ""
-#: ../memline.c:1559
msgid "no"
msgstr ""
-#: ../memline.c:1562
msgid ""
"\n"
" user name: "
@@ -4017,11 +3158,9 @@ msgstr ""
"\n"
" : "
-#: ../memline.c:1568
msgid " host name: "
msgstr " : "
-#: ../memline.c:1570
msgid ""
"\n"
" host name: "
@@ -4029,7 +3168,6 @@ msgstr ""
"\n"
" : "
-#: ../memline.c:1575
msgid ""
"\n"
" process ID: "
@@ -4037,11 +3175,9 @@ msgstr ""
"\n"
" ID : "
-#: ../memline.c:1579
msgid " (still running)"
msgstr " ()"
-#: ../memline.c:1586
msgid ""
"\n"
" [not usable on this computer]"
@@ -4049,106 +3185,84 @@ msgstr ""
"\n"
" [ ']"
-#: ../memline.c:1590
msgid " [cannot be read]"
msgstr " [ ]"
-#: ../memline.c:1593
msgid " [cannot be opened]"
msgstr " [ ]"
-#: ../memline.c:1698
msgid "E313: Cannot preserve, there is no swap file"
msgstr "E313: , "
# msgstr "E313: "
-#: ../memline.c:1747
msgid "File preserved"
msgstr " "
-#: ../memline.c:1749
msgid "E314: Preserve failed"
msgstr "E314: "
# msgstr "E314: "
-#: ../memline.c:1819
#, c-format
msgid "E315: ml_get: invalid lnum: %<PRId64>"
msgstr "E315: ml_get: lnum: %<PRId64>"
# msgstr "E315: "
-#: ../memline.c:1851
#, c-format
msgid "E316: ml_get: cannot find line %<PRId64>"
msgstr "E316: ml_get: %<PRId64>"
# msgstr "E316: "
-#: ../memline.c:2236
msgid "E317: pointer block id wrong 3"
msgstr "E317: 3"
# msgstr "E317: "
-#: ../memline.c:2311
msgid "stack_idx should be 0"
msgstr "stack_idx 0"
-#: ../memline.c:2369
msgid "E318: Updated too many blocks?"
msgstr "E318: ?"
-#: ../memline.c:2511
msgid "E317: pointer block id wrong 4"
msgstr "E317: 4"
-#: ../memline.c:2536
msgid "deleted block 1?"
msgstr " 1 ?"
-#: ../memline.c:2707
#, c-format
msgid "E320: Cannot find line %<PRId64>"
msgstr "E320: %<PRId64>"
-#: ../memline.c:2916
msgid "E317: pointer block id wrong"
msgstr "E317: "
# msgstr "E317: "
-#: ../memline.c:2930
msgid "pe_line_count is zero"
msgstr "pe_line_count 0"
-#: ../memline.c:2955
#, c-format
msgid "E322: line number out of range: %<PRId64> past the end"
msgstr "E322: : %<PRId64> "
# msgstr "E322: "
-#: ../memline.c:2959
#, c-format
msgid "E323: line count wrong in block %<PRId64>"
msgstr "E323: ʳ %<PRId64>"
# msgstr "E323: "
-#: ../memline.c:2999
msgid "Stack size increases"
msgstr " "
-#: ../memline.c:3038
msgid "E317: pointer block id wrong 2"
msgstr "E317: 2"
-#: ../memline.c:3070
#, c-format
msgid "E773: Symlink loop for \"%s\""
msgstr "E773: %s"
# msgstr "E317: "
-#: ../memline.c:3221
msgid "E325: ATTENTION"
msgstr "E325: "
-#: ../memline.c:3222
msgid ""
"\n"
"Found a swap file by the name \""
@@ -4156,15 +3270,12 @@ msgstr ""
"\n"
" \""
-#: ../memline.c:3226
msgid "While opening file \""
msgstr " \""
-#: ../memline.c:3239
msgid " NEWER than swap file!\n"
msgstr " ² !\n"
-#: ../memline.c:3244
msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
@@ -4176,19 +3287,15 @@ msgstr ""
" , \n"
" ."
-#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
msgstr " .\n"
-#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
msgstr "(2) .\n"
-#: ../memline.c:3247
msgid " If this is the case, use \":recover\" or \"vim -r "
msgstr " , :recover vim -r "
-#: ../memline.c:3249
msgid ""
"\"\n"
" to recover the changes (see \":help recovery\").\n"
@@ -4196,11 +3303,9 @@ msgstr ""
"\n"
" (. :help recovery).\n"
-#: ../memline.c:3250
msgid " If you did this already, delete the swap file \""
msgstr " , "
-#: ../memline.c:3252
msgid ""
"\"\n"
" to avoid this message.\n"
@@ -4209,23 +3314,18 @@ msgstr ""
" .\n"
"\n"
-#: ../memline.c:3450 ../memline.c:3452
msgid "Swap file \""
msgstr " "
-#: ../memline.c:3451 ../memline.c:3455
msgid "\" already exists!"
msgstr " !"
-#: ../memline.c:3457
msgid "VIM - ATTENTION"
msgstr "VIM "
-#: ../memline.c:3459
msgid "Swap file already exists!"
msgstr " !"
-#: ../memline.c:3464
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4239,7 +3339,6 @@ msgstr ""
"&Q:\n"
"&A:"
-#: ../memline.c:3467
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4263,56 +3362,46 @@ msgstr ""
#.
#. ".s?a"
#. ".saa": tried enough, give up
-#: ../memline.c:3528
msgid "E326: Too many swap files found"
msgstr "E326: "
# msgstr "E341: "
-#: ../memory.c:227
#, c-format
msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
msgstr "E342: '! ( %<PRIu64> )"
# msgstr "E326: "
-#: ../menu.c:62
msgid "E327: Part of menu-item path is not sub-menu"
msgstr "E327: "
# msgstr "E327: "
-#: ../menu.c:63
msgid "E328: Menu only exists in another mode"
msgstr "E328: "
# msgstr "E328: "
-#: ../menu.c:64
#, c-format
msgid "E329: No menu \"%s\""
msgstr "E329: %s"
#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
msgid "E792: Empty menu name"
msgstr "E792: "
# msgstr "E329: "
-#: ../menu.c:340
msgid "E330: Menu path must not lead to a sub-menu"
msgstr "E330: "
# msgstr "E330: "
-#: ../menu.c:365
msgid "E331: Must not add menu items directly to menu bar"
msgstr "E331: "
# msgstr "E331: "
-#: ../menu.c:370
msgid "E332: Separator cannot be part of a menu path"
msgstr "E332: "
# msgstr "E332: "
#. Now we have found the matching menu, and we list the mappings
#. Highlight title
-#: ../menu.c:762
msgid ""
"\n"
"--- Menus ---"
@@ -4320,78 +3409,59 @@ msgstr ""
"\n"
"--- ---"
-#: ../menu.c:1313
msgid "E333: Menu path must lead to a menu item"
msgstr "E333: "
# msgstr "E333: "
-#: ../menu.c:1330
#, c-format
msgid "E334: Menu not found: %s"
msgstr "E334: : %s"
# msgstr "E334: "
-#: ../menu.c:1396
#, c-format
msgid "E335: Menu not defined for %s mode"
msgstr "E335: %s "
# msgstr "E335: "
-#: ../menu.c:1426
msgid "E336: Menu path must lead to a sub-menu"
msgstr "E336: "
# msgstr "E336: "
-#: ../menu.c:1447
msgid "E337: Menu not found - check menu names"
msgstr "E337: "
# msgstr "E337: "
-#: ../message.c:423
#, c-format
msgid "Error detected while processing %s:"
msgstr " %s:"
-#: ../message.c:445
#, c-format
msgid "line %4ld:"
msgstr " %4ld:"
-#: ../message.c:617
#, c-format
msgid "E354: Invalid register name: '%s'"
msgstr "E354: : '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ": <sakhnik@gmail.com>"
-
-#: ../message.c:986
msgid "Interrupt: "
msgstr ": "
-#: ../message.c:988
msgid "Press ENTER or type command to continue"
msgstr " ENTER "
-#: ../message.c:1843
#, c-format
msgid "%s line %<PRId64>"
msgstr "%s %<PRId64>"
-#: ../message.c:2392
msgid "-- More --"
msgstr "-- --"
-#: ../message.c:2398
msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
msgstr " /d/j: //, b/u/k: , q: "
-#: ../message.c:3021 ../message.c:3031
msgid "Question"
msgstr ""
-#: ../message.c:3023
msgid ""
"&Yes\n"
"&No"
@@ -4399,7 +3469,6 @@ msgstr ""
"&Y:\n"
"&N:ͳ"
-#: ../message.c:3033
msgid ""
"&Yes\n"
"&No\n"
@@ -4409,7 +3478,6 @@ msgstr ""
"&N:ͳ\n"
"&C:"
-#: ../message.c:3045
msgid ""
"&Yes\n"
"&No\n"
@@ -4423,178 +3491,139 @@ msgstr ""
"&D:\n"
"&C:"
-#: ../message.c:3058
msgid "E766: Insufficient arguments for printf()"
msgstr "E766: printf()"
-#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
msgstr "E807: Float printf()"
-#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
msgstr "E767: printf()"
# msgstr "E338: "
-#: ../misc1.c:2256
msgid "W10: Warning: Changing a readonly file"
msgstr "W10: : "
-#: ../misc1.c:2537
msgid "Type number and <Enter> or click with mouse (empty cancels): "
msgstr " <Enter> ( ): "
-#: ../misc1.c:2539
msgid "Type number and <Enter> (empty cancels): "
msgstr " <Enter> ( ): "
-#: ../misc1.c:2585
msgid "1 more line"
msgstr " "
-#: ../misc1.c:2588
msgid "1 line less"
msgstr " "
-#: ../misc1.c:2593
#, c-format
msgid "%<PRId64> more lines"
msgstr " : %<PRId64>"
-#: ../misc1.c:2596
#, c-format
msgid "%<PRId64> fewer lines"
msgstr " : %<PRId64>"
-#: ../misc1.c:2599
msgid " (Interrupted)"
msgstr " ()"
-#: ../misc1.c:2635
msgid "Beep!"
msgstr "!"
# msgstr "E342: "
-#: ../misc2.c:738
#, c-format
msgid "Calling shell to execute: \"%s\""
msgstr " : %s"
# msgstr "E348: "
-#: ../normal.c:183
msgid "E349: No identifier under cursor"
msgstr "E349: "
-#: ../normal.c:1866
msgid "E774: 'operatorfunc' is empty"
msgstr "E774: 'operatorfunc' "
-#: ../normal.c:2637
msgid "Warning: terminal cannot highlight"
msgstr ": "
-#: ../normal.c:2807
msgid "E348: No string under cursor"
msgstr "E348: "
-#: ../normal.c:3937
msgid "E352: Cannot erase folds with current 'foldmethod'"
msgstr "E352: 'foldmethod'"
-#: ../normal.c:5897
msgid "E664: changelist is empty"
msgstr "E664: "
-#: ../normal.c:5899
msgid "E662: At start of changelist"
msgstr "E662: "
-#: ../normal.c:5901
msgid "E663: At end of changelist"
msgstr "E663: ʳ "
-#: ../normal.c:7053
msgid "Type :quit<Enter> to exit Nvim"
msgstr " :quit<Enter> Vim"
-#: ../ops.c:248
#, c-format
msgid "1 line %sed 1 time"
msgstr " %s-"
-#: ../ops.c:250
#, c-format
msgid "1 line %sed %d times"
msgstr " %s- %d "
-#: ../ops.c:253
#, c-format
msgid "%<PRId64> lines %sed 1 time"
msgstr "%<PRId64> %s-"
-#: ../ops.c:256
#, c-format
msgid "%<PRId64> lines %sed %d times"
msgstr "%<PRId64> %s- %d "
-#: ../ops.c:592
#, c-format
msgid "%<PRId64> lines to indent... "
msgstr " %<PRId64> ..."
-#: ../ops.c:634
msgid "1 line indented "
msgstr " "
-#: ../ops.c:636
#, c-format
msgid "%<PRId64> lines indented "
msgstr " : %<PRId64>"
-#: ../ops.c:938
msgid "E748: No previously used register"
msgstr "E748: "
#. must display the prompt
-#: ../ops.c:1433
msgid "cannot yank; delete anyway"
msgstr " '; ?"
-#: ../ops.c:1929
msgid "1 line changed"
msgstr " "
-#: ../ops.c:1931
#, c-format
msgid "%<PRId64> lines changed"
msgstr " : %<PRId64>"
-#: ../ops.c:2521
msgid "block of 1 line yanked"
msgstr "' "
-#: ../ops.c:2523
msgid "1 line yanked"
msgstr "' "
-#: ../ops.c:2525
#, c-format
msgid "block of %<PRId64> lines yanked"
msgstr "' %<PRId64> "
-#: ../ops.c:2528
#, c-format
msgid "%<PRId64> lines yanked"
msgstr "' : %<PRId64>"
-#: ../ops.c:2710
#, c-format
msgid "E353: Nothing in register %s"
msgstr "E353: %s "
# msgstr "E353: "
#. Highlight title
-#: ../ops.c:3185
msgid ""
"\n"
"--- Registers ---"
@@ -4602,11 +3631,9 @@ msgstr ""
"\n"
"--- ---"
-#: ../ops.c:4455
msgid "Illegal register name"
msgstr " "
-#: ../ops.c:4533
msgid ""
"\n"
"# Registers:\n"
@@ -4614,17 +3641,14 @@ msgstr ""
"\n"
"# :\n"
-#: ../ops.c:4575
#, c-format
msgid "E574: Unknown register type %d"
msgstr "E574: %d"
-#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
msgstr ".: %<PRId64>; "
-#: ../ops.c:5097
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4633,7 +3657,6 @@ msgstr ""
" %s%<PRId64> %<PRId64> ; %<PRId64> %<PRId64> ; "
"%<PRId64> %<PRId64> "
-#: ../ops.c:5105
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4642,7 +3665,6 @@ msgstr ""
" %s%<PRId64> %<PRId64> ; %<PRId64> %<PRId64> ; "
"%<PRId64> of %<PRId64> ; %<PRId64> %<PRId64> "
-#: ../ops.c:5123
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
@@ -4651,7 +3673,6 @@ msgstr ""
" %s %s; %<PRId64> %<PRId64>; %<PRId64> %<PRId64>; "
" %<PRId64> %<PRId64>"
-#: ../ops.c:5133
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
@@ -4660,136 +3681,105 @@ msgstr ""
" %s %s; %<PRId64> %<PRId64>; %<PRId64> %<PRId64>; "
" %<PRId64> of %<PRId64>; %<PRId64> %<PRId64>"
-#: ../ops.c:5146
#, c-format
msgid "(+%<PRId64> for BOM)"
msgstr "(+%<PRId64> BOM)"
-#: ../option.c:1238
msgid "%<%f%h%m%=Page %N"
msgstr "%<%f%h%m%=. %N"
-#: ../option.c:1574
msgid "Thanks for flying Vim"
msgstr " Vim"
#. found a mismatch: skip
-#: ../option.c:2698
msgid "E518: Unknown option"
msgstr "E518: "
-#: ../option.c:2709
msgid "E519: Option not supported"
msgstr "E519: "
-#: ../option.c:2740
msgid "E520: Not allowed in a modeline"
msgstr "E520: modeline"
-#: ../option.c:2815
msgid "E846: Key code not set"
msgstr "E846: "
-#: ../option.c:2924
msgid "E521: Number required after ="
msgstr "E521: ϳ = "
-#: ../option.c:3226 ../option.c:3864
msgid "E522: Not found in termcap"
msgstr "E522: "
-#: ../option.c:3335
#, c-format
msgid "E539: Illegal character <%s>"
msgstr "E539: <%s>"
-#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: 'term'"
-#: ../option.c:3885
msgid "E589: 'backupext' and 'patchmode' are equal"
msgstr "E589: 'backupext' 'patchmode' "
-#: ../option.c:3964
msgid "E834: Conflicts with value of 'listchars'"
msgstr "E834: 'listchars'"
-#: ../option.c:3966
msgid "E835: Conflicts with value of 'fillchars'"
msgstr "E835: 'fillchars'"
-#: ../option.c:4163
msgid "E524: Missing colon"
msgstr "E524: "
-#: ../option.c:4165
msgid "E525: Zero length string"
msgstr "E525: "
-#: ../option.c:4220
#, c-format
msgid "E526: Missing number after <%s>"
msgstr "E526: ϳ <%s> "
-#: ../option.c:4232
msgid "E527: Missing comma"
msgstr "E527: "
-#: ../option.c:4239
msgid "E528: Must specify a ' value"
msgstr "E528: '"
-#: ../option.c:4271
msgid "E595: contains unprintable or wide character"
msgstr "E595: ̳ "
-#: ../option.c:4469
#, c-format
msgid "E535: Illegal character after <%c>"
msgstr "E535: <%c>"
-#: ../option.c:4534
msgid "E536: comma required"
msgstr "E536: "
-#: ../option.c:4543
#, c-format
msgid "E537: 'commentstring' must be empty or contain %s"
msgstr "E537: 'commentstring' %s"
-#: ../option.c:4928
msgid "E540: Unclosed expression sequence"
msgstr "E540: "
-#: ../option.c:4932
msgid "E541: too many items"
msgstr "E541: "
-#: ../option.c:4934
msgid "E542: unbalanced groups"
msgstr "E542: "
-#: ../option.c:5148
msgid "E590: A preview window already exists"
msgstr "E590: ³ "
-#: ../option.c:5311
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr ""
"W17: UTF-8, ':set encoding=utf-8'"
-#: ../option.c:5623
#, c-format
msgid "E593: Need at least %d lines"
msgstr "E593: %d "
-#: ../option.c:5631
#, c-format
msgid "E594: Need at least %d columns"
msgstr "E594: %d "
-#: ../option.c:6011
#, c-format
msgid "E355: Unknown option: %s"
msgstr "E355: : %s"
@@ -4797,13 +3787,11 @@ msgstr "E355: : %s"
#. There's another character after zeros or the string
#. * is empty. In both cases, we are trying to set a
#. * num option using a string.
-#: ../option.c:6037
#, c-format
msgid "E521: Number required: &%s = '%s'"
msgstr "E521: Number: &%s = '%s'"
# msgstr "E355: "
-#: ../option.c:6149
msgid ""
"\n"
"--- Terminal codes ---"
@@ -4811,7 +3799,6 @@ msgstr ""
"\n"
"--- ---"
-#: ../option.c:6151
msgid ""
"\n"
"--- Global option values ---"
@@ -4819,7 +3806,6 @@ msgstr ""
"\n"
"--- ---"
-#: ../option.c:6153
msgid ""
"\n"
"--- Local option values ---"
@@ -4827,7 +3813,6 @@ msgstr ""
"\n"
"--- ---"
-#: ../option.c:6155
msgid ""
"\n"
"--- Options ---"
@@ -4835,23 +3820,19 @@ msgstr ""
"\n"
"--- ---"
-#: ../option.c:6816
msgid "E356: get_varp ERROR"
msgstr "E356: get_varp"
# msgstr "E356: "
-#: ../option.c:7696
#, c-format
msgid "E357: 'langmap': Matching character missing for %s"
msgstr "E357: 'langmap': %s "
# msgstr "E357: "
-#: ../option.c:7715
#, c-format
msgid "E358: 'langmap': Extra characters after semicolon: %s"
msgstr "E358: 'langmap': `;': %s"
-#: ../os/shell.c:194
msgid ""
"\n"
"Cannot execute shell "
@@ -4860,7 +3841,6 @@ msgstr ""
" "
# msgstr "E362: "
-#: ../os/shell.c:439
msgid ""
"\n"
"shell returned "
@@ -4868,7 +3848,6 @@ msgstr ""
"\n"
" : "
-#: ../os_unix.c:465 ../os_unix.c:471
msgid ""
"\n"
"Could not get security context for "
@@ -4876,7 +3855,6 @@ msgstr ""
"\n"
" "
-#: ../os_unix.c:479
msgid ""
"\n"
"Could not set security context for "
@@ -4884,234 +3862,187 @@ msgstr ""
"\n"
" "
-#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
msgstr "dlerror = %s"
# msgstr "E446: "
-#: ../path.c:1449
#, c-format
msgid "E447: Can't find file \"%s\" in path"
msgstr "E447: %s "
# msgstr "E371: "
-#: ../quickfix.c:359
#, c-format
msgid "E372: Too many %%%c in format string"
msgstr "E372: %%%c "
# msgstr "E372: "
-#: ../quickfix.c:371
#, c-format
msgid "E373: Unexpected %%%c in format string"
msgstr "E373: `%%%c' "
# msgstr "E373: "
-#: ../quickfix.c:420
msgid "E374: Missing ] in format string"
msgstr "E374: ] "
# msgstr "E374: "
-#: ../quickfix.c:431
#, c-format
msgid "E375: Unsupported %%%c in format string"
msgstr "E375: %%%c "
# msgstr "E375: "
-#: ../quickfix.c:448
#, c-format
msgid "E376: Invalid %%%c in format string prefix"
msgstr "E376: `%%%c' "
# msgstr "E376: "
-#: ../quickfix.c:454
#, c-format
msgid "E377: Invalid %%%c in format string"
msgstr "E377: `%%%c' "
# msgstr "E377: "
#. nothing found
-#: ../quickfix.c:477
msgid "E378: 'errorformat' contains no pattern"
msgstr "E378: 'errorformat' "
# msgstr "E378: "
-#: ../quickfix.c:695
msgid "E379: Missing or empty directory name"
msgstr "E379: "
-#: ../quickfix.c:1305
msgid "E553: No more items"
msgstr "E553: "
-#: ../quickfix.c:1674
#, c-format
msgid "(%d of %d)%s%s: "
msgstr "(%d %d)%s%s: "
-#: ../quickfix.c:1676
msgid " (line deleted)"
msgstr " ( )"
-#: ../quickfix.c:1863
msgid "E380: At bottom of quickfix stack"
msgstr "E380: "
-#: ../quickfix.c:1869
msgid "E381: At top of quickfix stack"
msgstr "E381: "
-#: ../quickfix.c:1880
#, c-format
msgid "error list %d of %d; %d errors"
msgstr " %d %d; %d "
-#: ../quickfix.c:2427
msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: , 'buftype'"
-#: ../quickfix.c:2812
msgid "E683: File name missing or invalid pattern"
msgstr "E683: "
-#: ../quickfix.c:2911
#, c-format
msgid "Cannot open file \"%s\""
msgstr " %s"
-#: ../quickfix.c:3429
msgid "E681: Buffer is not loaded"
msgstr "E681: "
-#: ../quickfix.c:3487
msgid "E777: String or List expected"
msgstr "E777: String List"
-#: ../regexp.c:359
#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: %s%%[]"
-#: ../regexp.c:374
#, c-format
msgid "E769: Missing ] after %s["
msgstr "E769: ] %s["
-#: ../regexp.c:375
#, c-format
msgid "E53: Unmatched %s%%("
msgstr "E53: %s%%("
-#: ../regexp.c:376
#, c-format
msgid "E54: Unmatched %s("
msgstr "E54: %s("
-#: ../regexp.c:377
#, c-format
msgid "E55: Unmatched %s)"
msgstr "E55: %s)"
# msgstr "E406: "
-#: ../regexp.c:378
msgid "E66: \\z( not allowed here"
msgstr "E66: \\z( "
# msgstr "E406: "
-#: ../regexp.c:379
msgid "E67: \\z1 et al. not allowed here"
msgstr "E67: \\z1 . "
-#: ../regexp.c:380
#, c-format
msgid "E69: Missing ] after %s%%["
msgstr "E69: ] %s%%["
-#: ../regexp.c:381
#, c-format
msgid "E70: Empty %s%%[]"
msgstr "E70: %s%%[] "
# msgstr "E382: "
-#: ../regexp.c:1209 ../regexp.c:1224
msgid "E339: Pattern too long"
msgstr "E339: "
-#: ../regexp.c:1371
msgid "E50: Too many \\z("
msgstr "E50: \\z("
-#: ../regexp.c:1378
#, c-format
msgid "E51: Too many %s("
msgstr "E51: %s("
-#: ../regexp.c:1427
msgid "E52: Unmatched \\z("
msgstr "E52: \\z("
-#: ../regexp.c:1637
#, c-format
msgid "E59: invalid character after %s@"
msgstr "E59: %s@"
-#: ../regexp.c:1672
#, c-format
msgid "E60: Too many complex %s{...}s"
msgstr "E60: %s{...}"
# msgstr "E339: "
-#: ../regexp.c:1687
#, c-format
msgid "E61: Nested %s*"
msgstr "E61: %s*"
# msgstr "E61: "
-#: ../regexp.c:1690
#, c-format
msgid "E62: Nested %s%c"
msgstr "E62: %s%c"
-#: ../regexp.c:1800
msgid "E63: invalid use of \\_"
msgstr "E63: \\_"
# msgstr "E62: "
-#: ../regexp.c:1850
#, c-format
msgid "E64: %s%c follows nothing"
msgstr "E64: ϳ %s%c "
-#: ../regexp.c:1902
msgid "E65: Illegal back reference"
msgstr "E65: "
-#: ../regexp.c:1943
msgid "E68: Invalid character after \\z"
msgstr "E68: \\z"
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
#, c-format
msgid "E678: Invalid character after %s%%[dxouU]"
msgstr "E678: %s%%[dxouU]"
-#: ../regexp.c:2107
#, c-format
msgid "E71: Invalid character after %s%%"
msgstr "E71: %s%%"
# msgstr "E64: "
-#: ../regexp.c:3017
#, c-format
msgid "E554: Syntax error in %s{...}"
msgstr "E554: %s{...}"
-#: ../regexp.c:3805
msgid "External submatches:\n"
msgstr " -:\n"
-#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
"used "
@@ -5119,62 +4050,49 @@ msgstr ""
"E864: \\%#= 0, 1, or 2. "
" "
-#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) "
-#: ../regexp_nfa.c:240
#, c-format
msgid "E866: (NFA regexp) Misplaced %c"
msgstr "E866: (NFA regexp) %c"
-#: ../regexp_nfa.c:242
#, c-format
msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
+msgstr "E877: (NFA regexp) : %<PRId64>"
-#: ../regexp_nfa.c:1261
#, c-format
msgid "E867: (NFA) Unknown operator '\\z%c'"
msgstr "E867: (NFA) '\\z%c'"
-#: ../regexp_nfa.c:1387
#, c-format
msgid "E867: (NFA) Unknown operator '\\%%%c'"
msgstr "E867: (NFA) '\\%%%c'"
-#: ../regexp_nfa.c:1802
#, c-format
msgid "E869: (NFA) Unknown operator '\\@%c'"
msgstr "E869: (NFA) '\\@%c'"
-#: ../regexp_nfa.c:1831
msgid "E870: (NFA regexp) Error reading repetition limits"
msgstr "E870: (NFA regexp) "
#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
msgstr "E871: (NFA regexp) !"
#. Too many `('
-#: ../regexp_nfa.c:2037
msgid "E872: (NFA regexp) Too many '('"
msgstr "E872: (NFA regexp) '('"
-#: ../regexp_nfa.c:2042
msgid "E879: (NFA regexp) Too many \\z("
msgstr "E879: (NFA regexp) \\z("
-#: ../regexp_nfa.c:2066
msgid "E873: (NFA regexp) proper termination error"
msgstr "E873: (NFA regexp) "
-#: ../regexp_nfa.c:2599
msgid "E874: (NFA) Could not pop the stack !"
msgstr "E874: (NFA) !"
-#: ../regexp_nfa.c:3298
msgid ""
"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
"left on stack"
@@ -5182,178 +4100,137 @@ msgstr ""
"E875: (NFA regexp) (ϳ NFA) "
" "
-#: ../regexp_nfa.c:3302
msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
msgstr "E876: (NFA regexp) , NFA "
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
msgid ""
"Could not open temporary log file for writing, displaying on stderr ... "
msgstr ""
" , "
"stderr ... "
-#: ../regexp_nfa.c:4840
#, c-format
msgid "(NFA) COULD NOT OPEN %s !"
msgstr "(NFA) ² %s!"
-#: ../regexp_nfa.c:6049
msgid "Could not open temporary log file for writing "
msgstr " "
-#: ../screen.c:7435
msgid " VREPLACE"
msgstr " ² ̲"
-#: ../screen.c:7437
msgid " REPLACE"
msgstr " ̲"
-#: ../screen.c:7440
msgid " REVERSE"
msgstr " в"
-#: ../screen.c:7441
msgid " INSERT"
msgstr " "
-#: ../screen.c:7443
msgid " (insert)"
msgstr " ()"
-#: ../screen.c:7445
msgid " (replace)"
msgstr " ()"
-#: ../screen.c:7447
msgid " (vreplace)"
msgstr " ( )"
-#: ../screen.c:7449
msgid " Hebrew"
msgstr " "
-#: ../screen.c:7454
msgid " Arabic"
msgstr " "
-#: ../screen.c:7456
msgid " (lang)"
msgstr " ()"
-#: ../screen.c:7459
msgid " (paste)"
msgstr " ()"
-#: ../screen.c:7469
msgid " VISUAL"
msgstr " "
-#: ../screen.c:7470
msgid " VISUAL LINE"
msgstr " ʲ"
-#: ../screen.c:7471
msgid " VISUAL BLOCK"
msgstr " "
-#: ../screen.c:7472
msgid " SELECT"
msgstr " IJ"
-#: ../screen.c:7473
msgid " SELECT LINE"
msgstr " IJ ʲ"
-#: ../screen.c:7474
msgid " SELECT BLOCK"
msgstr " IJ "
-#: ../screen.c:7486 ../screen.c:7541
msgid "recording"
msgstr " "
-#: ../search.c:487
#, c-format
msgid "E383: Invalid search string: %s"
msgstr "E383: : %s"
-#: ../search.c:832
#, c-format
msgid "E384: search hit TOP without match for: %s"
msgstr "E384: %s"
-#: ../search.c:835
#, c-format
msgid "E385: search hit BOTTOM without match for: %s"
msgstr "E385: ʲ %s"
-#: ../search.c:1200
msgid "E386: Expected '?' or '/' after ';'"
msgstr "E386: ϳ `;' `?' `/'"
# msgstr "E386: "
-#: ../search.c:4085
msgid " (includes previously listed match)"
msgstr " ( )"
#. cursor at status line
-#: ../search.c:4104
msgid "--- Included files "
msgstr "--- "
-#: ../search.c:4106
msgid "not found "
msgstr " "
-#: ../search.c:4107
msgid "in path ---\n"
msgstr " ---\n"
-#: ../search.c:4168
msgid " (Already listed)"
msgstr " ( )"
-#: ../search.c:4170
msgid " NOT FOUND"
msgstr " "
-#: ../search.c:4211
#, c-format
msgid "Scanning included file: %s"
msgstr " : %s"
-#: ../search.c:4216
#, c-format
msgid "Searching included file %s"
msgstr " %s"
-#: ../search.c:4405
msgid "E387: Match is on current line"
msgstr "E387: "
-#: ../search.c:4517
msgid "All included files were found"
msgstr " "
-#: ../search.c:4519
msgid "No included files"
msgstr " "
-#: ../search.c:4527
msgid "E388: Couldn't find definition"
msgstr "E388: "
-#: ../search.c:4529
msgid "E389: Couldn't find pattern"
msgstr "E389: "
-#: ../search.c:4668
msgid "Substitute "
msgstr " "
-#: ../search.c:4681
#, c-format
msgid ""
"\n"
@@ -5364,100 +4241,79 @@ msgstr ""
"# . %s :\n"
"~"
-#: ../spell.c:951
msgid "E759: Format error in spell file"
msgstr "E759: "
# msgstr "E364: "
-#: ../spell.c:952
msgid "E758: Truncated spell file"
msgstr "E758: "
-#: ../spell.c:953
#, c-format
msgid "Trailing text in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:954
#, c-format
msgid "Affix name too long in %s line %d: %s"
msgstr " %s %d: %s"
# msgstr "E430: "
-#: ../spell.c:955
msgid "E761: Format error in affix file FOL, LOW or UPP"
msgstr "E761: FOL, LOW UPP"
-#: ../spell.c:957
msgid "E762: Character in FOL, LOW or UPP is out of range"
msgstr "E762: FOL, LOW UPP "
-#: ../spell.c:958
msgid "Compressing word tree..."
msgstr " ..."
-#: ../spell.c:1951
msgid "E756: Spell checking is not enabled"
msgstr "E756: "
-#: ../spell.c:2249
#, c-format
msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
msgstr ""
": %s.%s.spl %s.ascii.spl"
-#: ../spell.c:2473
#, c-format
msgid "Reading spell file \"%s\""
msgstr " %s"
-#: ../spell.c:2496
msgid "E757: This does not look like a spell file"
msgstr "E757: "
-#: ../spell.c:2501
msgid "E771: Old spell file, needs to be updated"
msgstr "E771: , "
-#: ../spell.c:2504
msgid "E772: Spell file is for newer version of Vim"
msgstr "E772: Vim"
-#: ../spell.c:2602
msgid "E770: Unsupported section in spell file"
msgstr "E770: "
-#: ../spell.c:3762
#, c-format
msgid "Warning: region %s not supported"
msgstr ": %s "
-#: ../spell.c:4550
#, c-format
msgid "Reading affix file %s ..."
msgstr " %s ..."
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
#, c-format
msgid "Conversion failure for word in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:4630 ../spell.c:6170
#, c-format
msgid "Conversion in %s not supported: from %s to %s"
msgstr " %s : %s %s"
-#: ../spell.c:4642
#, c-format
msgid "Invalid value for FLAG in %s line %d: %s"
msgstr " FLAG %s %d: %s"
-#: ../spell.c:4655
#, c-format
msgid "FLAG after using flags in %s line %d: %s"
msgstr "FLAG %s %d: %s"
-#: ../spell.c:4723
#, c-format
msgid ""
"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
@@ -5466,7 +4322,6 @@ msgstr ""
" COMPOUNDFORBIDFLAG PFX "
" %s %d"
-#: ../spell.c:4731
#, c-format
msgid ""
"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
@@ -5475,43 +4330,35 @@ msgstr ""
" COMPOUNDPERMITFLAG PFX "
" %s %d"
-#: ../spell.c:4747
#, c-format
msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
msgstr " COMPOUNDRULES %s %d: %s"
-#: ../spell.c:4771
#, c-format
msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
msgstr " COMPOUNDWORDMAX %s %d: %s"
-#: ../spell.c:4777
#, c-format
msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
msgstr " COMPOUNDMIN %s %d: %s"
-#: ../spell.c:4783
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
msgstr " COMPOUNDSYLMAX %s %d: %s"
-#: ../spell.c:4795
#, c-format
msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
msgstr " CHECKCOMPOUNDPATTERN %s %d: %s"
-#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr ""
" %s %d: %s"
-#: ../spell.c:4850
#, c-format
msgid "Duplicate affix in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:4871
#, c-format
msgid ""
"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
@@ -5520,337 +4367,268 @@ msgstr ""
" BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
"NOSUGGEST %s %d: %s"
-#: ../spell.c:4893
#, c-format
msgid "Expected Y or N in %s line %d: %s"
msgstr " Y N %s %d: %s"
-#: ../spell.c:4968
#, c-format
msgid "Broken condition in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5091
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
msgstr " REP(SAL) %s %d"
-#: ../spell.c:5120
#, c-format
msgid "Expected MAP count in %s line %d"
msgstr " MAP %s %d"
-#: ../spell.c:5132
#, c-format
msgid "Duplicate character in MAP in %s line %d"
msgstr " MAP %s %d"
-#: ../spell.c:5176
#, c-format
msgid "Unrecognized or duplicate item in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5197
#, c-format
msgid "Missing FOL/LOW/UPP line in %s"
msgstr " FOL/LOW/UPP %s"
-#: ../spell.c:5220
msgid "COMPOUNDSYLMAX used without SYLLABLE"
msgstr " COMPOUNDSYLMAX SYLLABLE"
-#: ../spell.c:5236
msgid "Too many postponed prefixes"
msgstr " "
-#: ../spell.c:5238
msgid "Too many compound flags"
msgstr " "
-#: ../spell.c:5240
msgid "Too many postponed prefixes and/or compound flags"
msgstr " / "
-#: ../spell.c:5250
#, c-format
msgid "Missing SOFO%s line in %s"
msgstr " SOFO%s %s"
-#: ../spell.c:5253
#, c-format
msgid "Both SAL and SOFO lines in %s"
msgstr " SAL SOFO %s"
-#: ../spell.c:5331
#, c-format
msgid "Flag is not a number in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5334
#, c-format
msgid "Illegal flag in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5493 ../spell.c:5501
#, c-format
msgid "%s value differs from what is used in another .aff file"
msgstr " %s , .aff"
-#: ../spell.c:5602
#, c-format
msgid "Reading dictionary file %s ..."
msgstr " %s ..."
-#: ../spell.c:5611
#, c-format
msgid "E760: No word count in %s"
msgstr "E760: %s"
-#: ../spell.c:5669
#, c-format
msgid "line %6d, word %6d - %s"
msgstr " %6d, %6d - %s"
-#: ../spell.c:5691
#, c-format
msgid "Duplicate word in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5694
#, c-format
msgid "First duplicate word in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:5746
#, c-format
msgid "%d duplicate word(s) in %s"
msgstr "%d %s"
-#: ../spell.c:5748
#, c-format
msgid "Ignored %d word(s) with non-ASCII characters in %s"
msgstr " %d (~) -ASCII %s"
-#: ../spell.c:6115
#, c-format
msgid "Reading word file %s ..."
msgstr " %s ..."
-#: ../spell.c:6155
#, c-format
msgid "Duplicate /encoding= line ignored in %s line %d: %s"
msgstr " /encoding= %s %d: %s"
-#: ../spell.c:6159
#, c-format
msgid "/encoding= line after word ignored in %s line %d: %s"
msgstr " /encoding= %s %d: %s"
-#: ../spell.c:6180
#, c-format
msgid "Duplicate /regions= line ignored in %s line %d: %s"
msgstr " /regions= %s %d: %s"
-#: ../spell.c:6185
#, c-format
msgid "Too many regions in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:6198
#, c-format
msgid "/ line ignored in %s line %d: %s"
msgstr " / %s %d: %s"
-#: ../spell.c:6224
#, c-format
msgid "Invalid region nr in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:6230
#, c-format
msgid "Unrecognized flags in %s line %d: %s"
msgstr " %s %d: %s"
-#: ../spell.c:6257
#, c-format
msgid "Ignored %d words with non-ASCII characters"
msgstr " %d -ASCII "
-#: ../spell.c:6656
#, c-format
msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
msgstr " %d %d ; %d (%d%%)"
-#: ../spell.c:7340
msgid "Reading back spell file..."
msgstr " ..."
#. Go through the trie of good words, soundfold each word and add it to
#. the soundfold trie.
-#: ../spell.c:7357
msgid "Performing soundfolding..."
msgstr " ..."
-#: ../spell.c:7368
#, c-format
msgid "Number of words after soundfolding: %<PRId64>"
msgstr "ʳ : %<PRId64>"
-#: ../spell.c:7476
#, c-format
msgid "Total number of words: %d"
msgstr " : %d"
-#: ../spell.c:7655
#, c-format
msgid "Writing suggestion file %s ..."
msgstr " %s ..."
-#: ../spell.c:7707 ../spell.c:7927
#, c-format
msgid "Estimated runtime memory use: %d bytes"
msgstr " ': %d "
-#: ../spell.c:7820
msgid "E751: Output file name must not have region name"
msgstr "E751: "
-#: ../spell.c:7822
msgid "E754: Only up to 8 regions supported"
msgstr "E754: ϳ "
-#: ../spell.c:7846
#, c-format
msgid "E755: Invalid region in %s"
msgstr "E755: %s"
-#: ../spell.c:7907
msgid "Warning: both compounding and NOBREAK specified"
msgstr ": ` ' NOBREAK"
-#: ../spell.c:7920
#, c-format
msgid "Writing spell file %s ..."
msgstr " %s ..."
-#: ../spell.c:7925
msgid "Done!"
msgstr "!"
-#: ../spell.c:8034
#, c-format
msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' %<PRId64> "
-#: ../spell.c:8074
#, c-format
msgid "Word '%.*s' removed from %s"
msgstr " '%.*s' %s"
-#: ../spell.c:8117
#, c-format
msgid "Word '%.*s' added to %s"
msgstr " '%.*s' %s"
-#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
msgstr "E763: "
-#: ../spell.c:8684
msgid "Sorry, no suggestions"
msgstr ", "
-#: ../spell.c:8687
#, c-format
msgid "Sorry, only %<PRId64> suggestions"
msgstr ", %<PRId64> "
#. for when 'cmdheight' > 1
#. avoid more prompt
-#: ../spell.c:8704
#, c-format
msgid "Change \"%.*s\" to:"
msgstr " %.*s :"
-#: ../spell.c:8737
#, c-format
msgid " < \"%.*s\""
msgstr " < %.*s"
# msgstr "E34: "
-#: ../spell.c:8882
msgid "E752: No previous spell replacement"
msgstr "E752: "
# msgstr "E333: "
-#: ../spell.c:8925
#, c-format
msgid "E753: Not found: %s"
msgstr "E753: : %s"
-#: ../spell.c:9276
#, c-format
msgid "E778: This does not look like a .sug file: %s"
msgstr "E778: .sug: %s"
-#: ../spell.c:9282
#, c-format
msgid "E779: Old .sug file, needs to be updated: %s"
msgstr "E779: .sug, : %s"
-#: ../spell.c:9286
#, c-format
msgid "E780: .sug file is for newer version of Vim: %s"
msgstr "E780: .sug Vim: %s"
-#: ../spell.c:9295
#, c-format
msgid "E781: .sug file doesn't match .spl file: %s"
msgstr "E781: .sug .spl: %s"
-#: ../spell.c:9305
#, c-format
msgid "E782: error while reading .sug file: %s"
msgstr "E782: .sug: %s"
#. This should have been checked when generating the .spl
#. file.
-#: ../spell.c:11575
msgid "E783: duplicate char in MAP entry"
msgstr "E783: MAP"
# msgstr "E391: "
-#: ../syntax.c:266
msgid "No Syntax items defined for this buffer"
msgstr " "
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
#, c-format
msgid "E390: Illegal argument: %s"
msgstr "E390: : %s"
-#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
msgstr "E391: : %s"
-#: ../syntax.c:3433
msgid "syncing on C-style comments"
msgstr " "
-#: ../syntax.c:3439
msgid "no syncing"
msgstr " "
-#: ../syntax.c:3441
msgid "syncing starts "
msgstr " "
-#: ../syntax.c:3443 ../syntax.c:3506
msgid " lines before top line"
msgstr " "
-#: ../syntax.c:3448
msgid ""
"\n"
"--- Syntax sync items ---"
@@ -5858,7 +4636,6 @@ msgstr ""
"\n"
"--- ---"
-#: ../syntax.c:3452
msgid ""
"\n"
"syncing on items"
@@ -5866,7 +4643,6 @@ msgstr ""
"\n"
" "
-#: ../syntax.c:3457
msgid ""
"\n"
"--- Syntax items ---"
@@ -5874,300 +4650,241 @@ msgstr ""
"\n"
"--- ---"
-#: ../syntax.c:3475
#, c-format
msgid "E392: No such syntax cluster: %s"
msgstr "E392: : %s"
-#: ../syntax.c:3497
msgid "minimal "
msgstr " "
-#: ../syntax.c:3503
msgid "maximal "
msgstr " "
-#: ../syntax.c:3513
msgid "; match "
msgstr "; "
-#: ../syntax.c:3515
msgid " line breaks"
msgstr " "
-#: ../syntax.c:4076
msgid "E395: contains argument not accepted here"
msgstr "E395: ̳ "
# msgstr "E14: "
-#: ../syntax.c:4096
msgid "E844: invalid cchar value"
msgstr "E844: cchar"
-#: ../syntax.c:4107
msgid "E393: group[t]here not accepted here"
msgstr "E393: group[t]hete "
-#: ../syntax.c:4126
#, c-format
msgid "E394: Didn't find region item for %s"
msgstr "E394: %s"
# msgstr "E396: "
-#: ../syntax.c:4188
msgid "E397: Filename required"
msgstr "E397: "
-#: ../syntax.c:4221
msgid "E847: Too many syntax includes"
msgstr "E847: "
-#: ../syntax.c:4303
#, c-format
msgid "E789: Missing ']': %s"
msgstr "E789: ']': %s"
-#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
msgstr "E398: `=': %s"
# ---------------------------------------
-#: ../syntax.c:4666
#, c-format
msgid "E399: Not enough arguments: syntax region %s"
msgstr "E399: : %s"
-#: ../syntax.c:4870
msgid "E848: Too many syntax clusters"
msgstr "E848: "
-#: ../syntax.c:4954
msgid "E400: No cluster specified"
msgstr "E400: "
#. end delimiter not found
-#: ../syntax.c:4986
#, c-format
msgid "E401: Pattern delimiter not found: %s"
msgstr "E401: ʳ : %s"
-#: ../syntax.c:5049
#, c-format
msgid "E402: Garbage after pattern: %s"
msgstr "E402: : %s"
# msgstr "E402: "
-#: ../syntax.c:5120
msgid "E403: syntax sync: line continuations pattern specified twice"
msgstr ""
"E403: : "
-#: ../syntax.c:5169
#, c-format
msgid "E404: Illegal arguments: %s"
msgstr "E404: : %s"
# msgstr "E404: "
-#: ../syntax.c:5217
#, c-format
msgid "E405: Missing equal sign: %s"
msgstr "E405: : %s"
# msgstr "E405: "
-#: ../syntax.c:5222
#, c-format
msgid "E406: Empty argument: %s"
msgstr "E406: : %s"
# msgstr "E406: "
-#: ../syntax.c:5240
#, c-format
msgid "E407: %s not allowed here"
msgstr "E407: %s "
-#: ../syntax.c:5246
#, c-format
msgid "E408: %s must be first in contains list"
msgstr "E408: %s contains"
-#: ../syntax.c:5304
#, c-format
msgid "E409: Unknown group name: %s"
msgstr "E409: : %s"
# msgstr "E409: "
-#: ../syntax.c:5512
#, c-format
msgid "E410: Invalid :syntax subcommand: %s"
msgstr "E410: :syntax: %s"
-#: ../syntax.c:5854
msgid ""
" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
msgstr ""
" - ϲ. ². . "
-#: ../syntax.c:6146
msgid "E679: recursive loop loading syncolor.vim"
msgstr "E679: syncolor.vim"
# msgstr "E410: "
-#: ../syntax.c:6256
#, c-format
msgid "E411: highlight group not found: %s"
msgstr "E411: : %s"
# msgstr "E411: "
-#: ../syntax.c:6278
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
msgstr "E412: : :highlight link %s"
# msgstr "E412: "
-#: ../syntax.c:6284
#, c-format
msgid "E413: Too many arguments: \":highlight link %s\""
msgstr "E413: : :highlight link %s"
# msgstr "E413: "
-#: ../syntax.c:6302
msgid "E414: group has settings, highlight link ignored"
msgstr "E414: settings, highlight link "
# msgstr "E414: "
-#: ../syntax.c:6367
#, c-format
msgid "E415: unexpected equal sign: %s"
msgstr "E415: : %s"
# msgstr "E415: "
-#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
msgstr "E416: : %s"
-#: ../syntax.c:6418
#, c-format
msgid "E417: missing argument: %s"
msgstr "E417: : %s"
-#: ../syntax.c:6446
#, c-format
msgid "E418: Illegal value: %s"
msgstr "E418: : %s"
# msgstr "E418: "
-#: ../syntax.c:6496
msgid "E419: FG color unknown"
msgstr "E419: "
# msgstr "E419: "
-#: ../syntax.c:6504
msgid "E420: BG color unknown"
msgstr "E420: "
# msgstr "E420: "
-#: ../syntax.c:6564
#, c-format
msgid "E421: Color name or number not recognized: %s"
msgstr "E421: : %s"
# msgstr "E421: "
-#: ../syntax.c:6714
#, c-format
msgid "E422: terminal code too long: %s"
msgstr "E422: : %s"
# msgstr "E422: "
-#: ../syntax.c:6753
#, c-format
msgid "E423: Illegal argument: %s"
msgstr "E423: : %s"
# msgstr "E423: "
-#: ../syntax.c:6925
msgid "E424: Too many different highlighting attributes in use"
msgstr "E424: "
-#: ../syntax.c:7427
msgid "E669: Unprintable character in group name"
msgstr "E669: "
# msgstr "E181: "
-#: ../syntax.c:7434
msgid "W18: Invalid character in group name"
msgstr "W18: "
-#: ../syntax.c:7448
msgid "E849: Too many highlight and syntax groups"
msgstr "E849: "
# msgstr "E424: "
-#: ../tag.c:104
msgid "E555: at bottom of tag stack"
msgstr "E555: ʳ 崳"
-#: ../tag.c:105
msgid "E556: at top of tag stack"
msgstr "E556: 崳"
-#: ../tag.c:380
msgid "E425: Cannot go before first matching tag"
msgstr "E425: "
# msgstr "E425: "
-#: ../tag.c:504
#, c-format
msgid "E426: tag not found: %s"
msgstr "E426: : %s"
# msgstr "E426: "
-#: ../tag.c:528
msgid " # pri kind tag"
msgstr " # "
-#: ../tag.c:531
msgid "file\n"
msgstr "\n"
-#: ../tag.c:829
msgid "E427: There is only one matching tag"
msgstr "E427: "
# msgstr "E427: "
-#: ../tag.c:831
msgid "E428: Cannot go beyond last matching tag"
msgstr "E428: "
# msgstr "E428: "
-#: ../tag.c:850
#, c-format
msgid "File \"%s\" does not exist"
msgstr " %s "
#. Give an indication of the number of matching tags
-#: ../tag.c:859
#, c-format
msgid "tag %d of %d%s"
msgstr " %d %d%s"
-#: ../tag.c:862
msgid " or more"
msgstr " "
-#: ../tag.c:864
msgid " Using tag with different case!"
msgstr " , "
-#: ../tag.c:909
#, c-format
msgid "E429: File \"%s\" does not exist"
msgstr "E429: %s "
# msgstr "E429: "
#. Highlight title
-#: ../tag.c:960
msgid ""
"\n"
" # TO tag FROM line in file/text"
@@ -6175,85 +4892,68 @@ msgstr ""
"\n"
" # /"
-#: ../tag.c:1303
#, c-format
msgid "Searching tags file %s"
msgstr " 崳 %s"
-#: ../tag.c:1545
msgid "Ignoring long line in tags file"
msgstr " "
# msgstr "E430: "
-#: ../tag.c:1915
#, c-format
msgid "E431: Format error in tags file \"%s\""
msgstr "E431: 崳 %s"
# msgstr "E431: "
-#: ../tag.c:1917
#, c-format
msgid "Before byte %<PRId64>"
msgstr " %<PRId64>"
-#: ../tag.c:1929
#, c-format
msgid "E432: Tags file not sorted: %s"
msgstr "E432: 崳 : %s"
# msgstr "E432: "
#. never opened any tags file
-#: ../tag.c:1960
msgid "E433: No tags file"
msgstr "E433: 崳"
# msgstr "E433: "
-#: ../tag.c:2536
msgid "E434: Can't find tag pattern"
msgstr "E434: "
# msgstr "E434: "
-#: ../tag.c:2544
msgid "E435: Couldn't find tag, just guessing!"
msgstr "E435: , !"
-#: ../tag.c:2797
#, c-format
msgid "Duplicate field name: %s"
msgstr " : %s"
# msgstr "E435: "
-#: ../term.c:1442
msgid "' not known. Available builtin terminals are:"
msgstr "' . :"
-#: ../term.c:1463
msgid "defaulting to '"
msgstr " '"
-#: ../term.c:1731
msgid "E557: Cannot open termcap file"
msgstr "E557: "
-#: ../term.c:1735
msgid "E558: Terminal entry not found in terminfo"
msgstr "E558: "
-#: ../term.c:1737
msgid "E559: Terminal entry not found in termcap"
msgstr "E559: "
-#: ../term.c:1878
#, c-format
msgid "E436: No \"%s\" entry in termcap"
msgstr "E436: %s "
-#: ../term.c:2249
msgid "E437: terminal capability \"cm\" required"
msgstr "E437: cm"
#. Highlight title
-#: ../term.c:4376
msgid ""
"\n"
"--- Terminal keys ---"
@@ -6261,174 +4961,136 @@ msgstr ""
"\n"
"--- ---"
-#: ../ui.c:481
msgid "Vim: Error reading input, exiting...\n"
msgstr "Vim: , ...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
msgid "E881: Line count changed unexpectedly"
-msgstr "E834: ʳ "
+msgstr "E881: ʳ "
-#: ../undo.c:627
#, c-format
msgid "E828: Cannot open undo file for writing: %s"
msgstr "E828: : %s"
-#: ../undo.c:717
#, c-format
msgid "E825: Corrupted undo file (%s): %s"
msgstr "E825: (%s): %s"
-#: ../undo.c:1039
msgid "Cannot write undo file in any directory in 'undodir'"
msgstr " 'undodir'"
-#: ../undo.c:1074
#, c-format
msgid "Will not overwrite with undo file, cannot read: %s"
msgstr "Will not overwrite with undo file, cannot read: %s"
-#: ../undo.c:1092
#, c-format
msgid "Will not overwrite, this is not an undo file: %s"
msgstr " , : %s"
-#: ../undo.c:1108
msgid "Skipping undo file write, nothing to undo"
msgstr " , "
-#: ../undo.c:1121
#, c-format
msgid "Writing undo file: %s"
msgstr " : %s"
-#: ../undo.c:1213
#, c-format
msgid "E829: write error in undo file: %s"
msgstr "E829: : %s"
-#: ../undo.c:1280
#, c-format
msgid "Not reading undo file, owner differs: %s"
msgstr " , : %s"
-#: ../undo.c:1292
#, c-format
msgid "Reading undo file: %s"
msgstr " : %s"
-#: ../undo.c:1299
#, c-format
msgid "E822: Cannot open undo file for reading: %s"
msgstr "E822: : %s"
# msgstr "E333: "
-#: ../undo.c:1308
#, c-format
msgid "E823: Not an undo file: %s"
msgstr "E823: : %s"
-#: ../undo.c:1313
#, c-format
msgid "E824: Incompatible undo file: %s"
msgstr "E824: : %s"
-#: ../undo.c:1328
msgid "File contents changed, cannot use undo info"
msgstr " , "
-#: ../undo.c:1497
#, c-format
msgid "Finished reading undo file %s"
msgstr " %s"
-#: ../undo.c:1586 ../undo.c:1812
msgid "Already at oldest change"
msgstr " "
-#: ../undo.c:1597 ../undo.c:1814
msgid "Already at newest change"
msgstr " "
-#: ../undo.c:1806
#, c-format
msgid "E830: Undo number %<PRId64> not found"
msgstr "E830: %<PRId64> "
-#: ../undo.c:1979
msgid "E438: u_undo: line numbers wrong"
msgstr "E438: u_undo: "
-#: ../undo.c:2183
msgid "more line"
msgstr " "
-#: ../undo.c:2185
msgid "more lines"
msgstr " "
-#: ../undo.c:2187
msgid "line less"
msgstr " "
-#: ../undo.c:2189
msgid "fewer lines"
msgstr " "
# msgstr "E438: "
-#: ../undo.c:2193
msgid "change"
msgstr ""
# msgstr "E438: "
-#: ../undo.c:2195
msgid "changes"
msgstr ""
-#: ../undo.c:2225
#, c-format
msgid "%<PRId64> %s; %s #%<PRId64> %s"
msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-#: ../undo.c:2228
msgid "before"
msgstr ""
-#: ../undo.c:2228
msgid "after"
msgstr ""
-#: ../undo.c:2325
msgid "Nothing to undo"
msgstr " "
-#: ../undo.c:2330
msgid "number changes when saved"
msgstr " "
-#: ../undo.c:2360
#, c-format
msgid "%<PRId64> seconds ago"
msgstr "%<PRId64> "
# msgstr "E406: "
-#: ../undo.c:2372
msgid "E790: undojoin is not allowed after undo"
msgstr "E790: undojoin undo"
-#: ../undo.c:2466
msgid "E439: undo list corrupt"
msgstr "E439: "
# msgstr "E439: "
-#: ../undo.c:2495
msgid "E440: undo line missing"
msgstr "E440: ³ "
-#: ../version.c:600
msgid ""
"\n"
"Included patches: "
@@ -6436,7 +5098,6 @@ msgstr ""
"\n"
" : "
-#: ../version.c:627
msgid ""
"\n"
"Extra patches: "
@@ -6444,11 +5105,9 @@ msgstr ""
"\n"
" : "
-#: ../version.c:639 ../version.c:864
msgid "Modified by "
msgstr " "
-#: ../version.c:646
msgid ""
"\n"
"Compiled "
@@ -6456,11 +5115,9 @@ msgstr ""
"\n"
" "
-#: ../version.c:649
msgid "by "
msgstr " "
-#: ../version.c:660
msgid ""
"\n"
"Huge version "
@@ -6468,1921 +5125,126 @@ msgstr ""
"\n"
"ó "
-#: ../version.c:661
msgid "without GUI."
msgstr " GUI."
-#: ../version.c:662
msgid " Features included (+) or not (-):\n"
msgstr " (+) (-) :\n"
-#: ../version.c:667
msgid " system vimrc file: \""
msgstr " vimrc: \""
-#: ../version.c:672
msgid " user vimrc file: \""
msgstr " vimrc : \""
-#: ../version.c:677
msgid " 2nd user vimrc file: \""
msgstr " vimrc : \""
-#: ../version.c:682
msgid " 3rd user vimrc file: \""
msgstr " vimrc : \""
-#: ../version.c:687
msgid " user exrc file: \""
msgstr " exrc : \""
-#: ../version.c:692
msgid " 2nd user exrc file: \""
msgstr " exrc : \""
-#: ../version.c:699
msgid " fall-back for $VIM: \""
msgstr " $VIM: \""
-#: ../version.c:705
msgid " f-b for $VIMRUNTIME: \""
msgstr " $VIMRUNTIME: \""
-#: ../version.c:709
msgid "Compilation: "
msgstr ": "
-#: ../version.c:712
msgid "Linking: "
msgstr ": "
-#: ../version.c:717
msgid " DEBUG BUILD"
msgstr " Ѳ "
-#: ../version.c:767
msgid "VIM - Vi IMproved"
msgstr "VIM - Vi"
-#: ../version.c:769
msgid "version "
msgstr " "
-#: ../version.c:770
msgid "by Bram Moolenaar et al."
msgstr ": Bram Moolenaar ."
-#: ../version.c:774
msgid "Vim is open source and freely distributable"
msgstr "Vim "
-#: ../version.c:776
msgid "Help poor children in Uganda!"
msgstr " !"
-#: ../version.c:777
msgid "type :help iccf<Enter> for information "
msgstr ":help iccf<Enter> "
-#: ../version.c:779
msgid "type :q<Enter> to exit "
msgstr ":q<Enter> Vim "
-#: ../version.c:780
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ":help<Enter> <F1> "
-#: ../version.c:781
msgid "type :help version7<Enter> for version info"
msgstr ":help version7<Enter> "
-#: ../version.c:784
msgid "Running in Vi compatible mode"
msgstr " Vi"
-#: ../version.c:785
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ":set nocp<Enter> Vi "
-#: ../version.c:786
msgid "type :help cp-default<Enter> for info on this"
msgstr ":help cp-default<Enter> "
-#: ../version.c:827
msgid "Sponsor Vim development!"
msgstr "ϳ Vim!"
-#: ../version.c:828
msgid "Become a registered Vim user!"
msgstr " Vim!"
-#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
msgstr ":help sponsor<Enter> "
-#: ../version.c:832
msgid "type :help register<Enter> for information "
msgstr ":help register<Enter> "
-#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
msgstr " ->/ "
# msgstr "E444: "
-#: ../window.c:119
msgid "Already only one window"
msgstr " "
-#: ../window.c:224
msgid "E441: There is no preview window"
msgstr "E441: "
# msgstr "E441: "
-#: ../window.c:559
msgid "E442: Can't split topleft and botright at the same time"
msgstr "E442: topleft botright"
# msgstr "E442: "
-#: ../window.c:1228
msgid "E443: Cannot rotate when another window is split"
msgstr "E443: , "
# msgstr "E443: "
-#: ../window.c:1803
msgid "E444: Cannot close last window"
msgstr "E444: "
# msgstr "E443: "
-#: ../window.c:1810
msgid "E813: Cannot close autocmd window"
msgstr "E813: autocmd"
# msgstr "E443: "
-#: ../window.c:1814
msgid "E814: Cannot close window, only autocmd window would remain"
msgstr "E814: , autocmd"
-#: ../window.c:2717
msgid "E445: Other window contains changes"
msgstr "E445: "
# msgstr "E445: "
-#: ../window.c:4805
msgid "E446: No file name under cursor"
msgstr "E446: "
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: bf_key_init() "
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Blowfish (BE/LE)"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: sha256"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Blowfish"
-
-#~ msgid "Patch file"
-#~ msgstr ""
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&O:\n"
-#~ "&C:"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: ' Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: "
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: 볺"
-
-#~ msgid "Save As"
-#~ msgstr " "
-
-#~ msgid "Source Vim script"
-#~ msgstr " Vim"
-
-#~ msgid "Edit File"
-#~ msgstr " "
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " ( )"
-
-#~ msgid "unknown"
-#~ msgstr ""
-
-# msgstr "E185: "
-#~ msgid "Edit File in new window"
-#~ msgstr " "
-
-#~ msgid "Append File"
-#~ msgstr " "
-
-# msgstr "E187: "
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr " : X %d, Y %d"
-
-# msgstr "E188: "
-#~ msgid "Save Redirection"
-#~ msgstr " "
-
-#~ msgid "Save View"
-#~ msgstr " "
-
-#~ msgid "Save Session"
-#~ msgstr " "
-
-#~ msgid "Save Setup"
-#~ msgstr " "
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: "
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr " ( 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr " stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: "
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans "
-
-# msgstr "E391: "
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr " NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr " 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: ó (! )"
-
-#~ msgid "<cannot open> "
-#~ msgstr "< > "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: "
-
-#~ msgid "Pathname:"
-#~ msgstr ":"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: "
-
-#~ msgid "OK"
-#~ msgstr ""
-
-#~ msgid "Cancel"
-#~ msgstr ""
-
-#~ msgid "Vim dialog"
-#~ msgstr "ij Vim"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "Scrollbar Widget: ."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: BalloonEval "
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: GUI"
-
-# msgstr "E228: "
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: GUI"
-
-# msgstr "E229: "
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: %s"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: GUI, "
-
-# msgstr "E230: "
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' "
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr " , "
-
-#~ msgid "Input _Methods"
-#~ msgstr " "
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - ..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - ..."
-
-#~ msgid "Find what:"
-#~ msgstr ":"
-
-#~ msgid "Replace with:"
-#~ msgstr " :"
-
-#~ msgid "Match whole word only"
-#~ msgstr " "
-
-#~ msgid "Match case"
-#~ msgstr " "
-
-#~ msgid "Direction"
-#~ msgstr ""
-
-#~ msgid "Up"
-#~ msgstr ""
-
-#~ msgid "Down"
-#~ msgstr ""
-
-#~ msgid "Find Next"
-#~ msgstr ""
-
-#~ msgid "Replace"
-#~ msgstr ""
-
-#~ msgid "Replace All"
-#~ msgstr " "
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: die \n"
-
-#~ msgid "Close"
-#~ msgstr ""
-
-#~ msgid "New tab"
-#~ msgstr " "
-
-#~ msgid "Open Tab..."
-#~ msgstr "³ ..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: \n"
-
-#~ msgid "&Filter"
-#~ msgstr "&F:Գ"
-
-#~ msgid "&Cancel"
-#~ msgstr "&C:"
-
-#~ msgid "Directories"
-#~ msgstr ""
-
-#~ msgid "Filter"
-#~ msgstr "Գ"
-
-#~ msgid "&Help"
-#~ msgstr "&H:"
-
-#~ msgid "Files"
-#~ msgstr ""
-
-#~ msgid "&OK"
-#~ msgstr "&O:"
-
-#~ msgid "Selection"
-#~ msgstr ""
-
-#~ msgid "Find &Next"
-#~ msgstr "&N: "
-
-#~ msgid "&Replace"
-#~ msgstr "&R:"
-
-#~ msgid "Replace &All"
-#~ msgstr "&A: "
-
-#~ msgid "&Undo"
-#~ msgstr "&U:"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: %s"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: : -%s; OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: MDI"
-
-#~ msgid "Close tab"
-#~ msgstr " "
-
-#~ msgid "Open tab..."
-#~ msgstr "³ ..."
-
-# msgstr "E245: "
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr " ('\\\\' '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr " ('\\\\' '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr ""
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "\t*.\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: , "
-#~ ""
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: %s:"
-
-# msgstr "E250: "
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: : %s"
-
-# msgstr "E252: "
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr " '%s' "
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: : %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr " %<PRId64> 0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr " 0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr " 1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr " "
-
-#~ msgid "&Dismiss"
-#~ msgstr "&D:"
-
-#~ msgid "no specific match"
-#~ msgstr " "
-
-# msgstr "E234: "
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - "
-
-#~ msgid "Name:"
-#~ msgstr ":"
-
-#~ msgid "Show size in Points"
-#~ msgstr " "
-
-#~ msgid "Encoding:"
-#~ msgstr ":"
-
-#~ msgid "Font:"
-#~ msgstr ":"
-
-#~ msgid "Style:"
-#~ msgstr ":"
-
-#~ msgid "Size:"
-#~ msgstr ":"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr " Lua"
-
-#~ msgid "cannot save undo information"
-#~ msgstr " "
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: , , MzScheme "
-#~ "."
-
-#~ msgid "invalid expression"
-#~ msgstr " "
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr " "
-
-#~ msgid "hidden option"
-#~ msgstr " "
-
-#~ msgid "unknown option"
-#~ msgstr " "
-
-#~ msgid "window index is out of range"
-#~ msgstr " "
-
-#~ msgid "couldn't open buffer"
-#~ msgstr " "
-
-#~ msgid "cannot delete line"
-#~ msgstr " "
-
-#~ msgid "cannot replace line"
-#~ msgstr " "
-
-#~ msgid "cannot insert line"
-#~ msgstr " "
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr " "
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr " Scheme Vim"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr " Vim: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr " Vim"
-
-#~ msgid "buffer is invalid"
-#~ msgstr " "
-
-#~ msgid "window is invalid"
-#~ msgstr " "
-
-#~ msgid "linenr out of range"
-#~ msgstr " "
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr " Vim"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: :py :py3 "
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: , , Python "
-#~ "."
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: :py :py3 "
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Python"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ String"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: , , Ruby "
-#~ "."
-
-# msgstr "E414: "
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: retry rescue"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: "
-
-# msgstr "E233: "
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: longjmp: %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr " /"
-
-#~ msgid "Show base class of"
-#~ msgstr " "
-
-#~ msgid "Show overridden member function"
-#~ msgstr " -"
-
-#~ msgid "Retrieve from file"
-#~ msgstr " "
-
-#~ msgid "Retrieve from project"
-#~ msgstr " "
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr " "
-
-#~ msgid "Retrieve"
-#~ msgstr ""
-
-#~ msgid "Show source of"
-#~ msgstr ""
-
-#~ msgid "Find symbol"
-#~ msgstr " "
-
-#~ msgid "Browse class"
-#~ msgstr " "
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr " "
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr " "
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref "
-
-#~ msgid "Xref referred by"
-#~ msgstr " Xref "
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref "
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref "
-
-#~ msgid "Show docu of"
-#~ msgstr " docu"
-
-#~ msgid "Generate docu for"
-#~ msgstr " docu "
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ " ' SNiFF+. (sniffemacs "
-#~ " $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: . ³'"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ "
-
-#~ msgid "not "
-#~ msgstr " "
-
-#~ msgid "connected"
-#~ msgstr "'"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: ' SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ '"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: . ³'"
-
-#~ msgid "invalid buffer number"
-#~ msgstr " "
-
-#~ msgid "not implemented yet"
-#~ msgstr " "
-
-#~ msgid "cannot set line(s)"
-#~ msgstr " "
-
-#~ msgid "invalid mark name"
-#~ msgstr " "
-
-# msgstr "E19: "
-#~ msgid "mark not set"
-#~ msgstr " "
-
-#~ msgid "row %d column %d"
-#~ msgstr " %d %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr " / "
-
-#~ msgid "line number out of range"
-#~ msgstr " "
-
-#~ msgid "unknown flag: "
-#~ msgstr " : "
-
-#~ msgid "unknown vimOption"
-#~ msgstr " vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr " "
-
-#~ msgid "vim error"
-#~ msgstr " Vim"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr " /: ' "
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr " : / "
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: TCL: !? "
-#~ ", vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ " 䳿: / "
-#~ ""
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: , , Tcl "
-#~ "."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: %d"
-
-#~ msgid "cannot get line"
-#~ msgstr " "
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr " "
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: -"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: : %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: VIM . !"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr " Vim ."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr " '-nb': \n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: : gvim NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ " , / "
-#~ "."
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\t gvim OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\t gvim OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\t GUI ( gvim)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f --nofork\t : GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\t newcli "
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <>\t\t\t <> /"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-u <gvimrc>\t\t .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\t "
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <>\tϳ' vim X"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\t ' X "
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr ""
-#~ "--remote <>\t <> Vim, "
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-silent <> , "
-#~ ""
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <> ..., "
-#~ ""
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <> , , "
-#~ ""
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <> , --remote, "
-#~ " "
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <> ³ <> "
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr ""
-#~ "--remote-expr <> <> Vim "
-#~ ""
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr ""
-#~ "--serverlist\t\t Vim "
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <>\t / Vim <>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ " gvim ( Motif)\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ " gvim ( neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ " gvim ( Athena)\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <>\t vim <>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\t Vim "
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <>\t <> (: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <>\t <> (: -"
-#~ "fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr ""
-#~ "-font <>\t <> (: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <>\t <> "
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <>\t <> "
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <>\t (: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <>\t <> (: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <> (: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <>\t <> (: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\t (: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t (: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <>\t\t "
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ " gvim ( GTK+)\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <>\t vim <> (: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr ""
-#~ "--role <>\t "
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\t³ Vim GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "--echo-wid\t\t gvim stdout"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P < >\t³ Vim "
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\t³ Vim win32"
-
-#~ msgid "No display"
-#~ msgstr " "
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": .\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": . \n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr " %d %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr " : ³ .\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": ³ .\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: "
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: "
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: "
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: "
-
-# msgstr "E286: "
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr ""
-#~ "E287: : "
-
-# msgstr "E287: "
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: "
-
-# msgstr "E288: "
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: "
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: "
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s , Vim "
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr " : %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ " , ,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ " ."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ " , enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ " "
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr " .\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [ Vim]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "³ "
-
-#~ msgid "Select Directory dialog"
-#~ msgstr " "
-
-#~ msgid "Save File dialog"
-#~ msgstr "' "
-
-#~ msgid "Open File dialog"
-#~ msgstr "³ "
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: , "
-
-#~ msgid "ERROR: "
-#~ msgstr ": "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[] /. %<PRIu64>/%<PRIu64>, . %<PRIu64>, . "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[] re/malloc() - %<PRIu64>, free() - %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: "
-
-# msgstr "E340: "
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: : lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: "
-
-#~ msgid "Enter encryption key: "
-#~ msgstr " : "
-
-#~ msgid "Enter same key again: "
-#~ msgstr " : "
-
-#~ msgid "Keys don't match!"
-#~ msgstr " !"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr " ' Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr " ' Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: ' "
-#~ "NetBenans: %s"
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr " Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: ' NetBeans %<PRId64>"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans '"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s (! )"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: eval "
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr " : %<PRId64>"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: term GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: :gui GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: GUI GTK+ 2"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: () ()"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: "
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: "
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: "
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: "
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: "
-
-# msgstr "E358: "
-#~ msgid "cannot open "
-#~ msgstr " "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: !\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr " Amigados 2.04 \n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr " %s %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr " NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr " "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr " ?!\n"
-
-# msgstr "E359: "
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: -f"
-
-# msgstr "E360: "
-#~ msgid "Cannot execute "
-#~ msgstr " "
-
-#~ msgid "shell "
-#~ msgstr " "
-
-#~ msgid " returned\n"
-#~ msgstr " \n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE "
-
-#~ msgid "I/O ERROR"
-#~ msgstr " /"
-
-#~ msgid "Message"
-#~ msgstr ""
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' 80, "
-
-# msgstr "E364: "
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: "
-
-#~ msgid "to %s on %s"
-#~ msgstr " %s %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: : %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: : %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr " '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: %s %s"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: %c %s"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr " X %<PRId64> "
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr " "
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr " "
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ " `sh'\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ " \n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ " \n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ " \n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP ' ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr " X"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP ' '"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP '"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ' ICE "
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection: %s"
-
-#~ msgid "At line"
-#~ msgstr ":"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr " vim32.dll"
-
-#~ msgid "VIM Error"
-#~ msgstr " VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr " DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr " %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: %s\n"
-
-#~ msgid "close"
-#~ msgstr "close"
-
-#~ msgid "logoff"
-#~ msgstr "logoff"
-
-#~ msgid "shutdown"
-#~ msgstr "shutdown"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: "
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ " VIMRUN.EXE .\n"
-#~ " .\n"
-#~ " :help win32-vimrun ."
-
-#~ msgid "Vim Warning"
-#~ msgstr " Vim"
-
-# msgstr "E231: "
-#~ msgid "Error file"
-#~ msgstr " "
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: NFA !"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (NFA) !"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ ": %s_%s.spl %s_ascii.spl"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr " %s "
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: , "
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: 崳 %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr " \n"
-
-# msgstr "E242: "
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr " CUT_BUFFER0 "
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr " , "
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: : %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: : %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: : %s"
-
-# msgstr "E440: "
-# ---------------------------------------
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ " GUI 16/32- Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ " GUI 64- MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ " GUI 32- Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ " 64- Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ " 32- Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ " 16- Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ " 32- MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ " 16- MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ " MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ " MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ " MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ " OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ " "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ " "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ " "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ " "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr " GUI GTK2-GNOME."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr " GUI GTK2."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr " GUI X11-Motif."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr " GUI X11-neXtaw."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr " GUI X11-Athena."
-
-#~ msgid "with Photon GUI."
-#~ msgstr " GUI Photon."
-
-#~ msgid "with GUI."
-#~ msgstr " GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr " GUI Carbon."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr " GUI Cocoa."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr " () GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc : \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr " gvimrc : \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr " gvimrc : \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " : \""
-
-#~ msgid "Compiler: "
-#~ msgstr ": "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr " Help->Orphans "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr " , "
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr " Edit->Global Settings->Toggle Insert Mode "
-
-#~ msgid " for two modes "
-#~ msgstr " "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr " Edit->Global Settings->Toggle Vi Compatible "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " Vi"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr ": Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr ":help windows95<Enter> "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ ", , Perl ."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: Perl Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr " (&m) Vim"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr " &Vim"
-
-#~ msgid "Diff with Vim"
-#~ msgstr " Vim"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr " &Vim"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr " Vim - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr " Vim"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr " , gvim !"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr " gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr " !"
-
-# msgstr "E233: "
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: : %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: : %s"
-
-# msgstr "E235: "
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: %s "
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: : \n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: : \n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E800: : "
-#~ "\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: %s"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: "
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: "
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: "
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans "
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr " %s : "
-
-# msgstr "E406: "
-#~ msgid "empty keys are not allowed"
-#~ msgstr " "
-
-#~ msgid "dictionary is locked"
-#~ msgstr " "
-
-#~ msgid "list is locked"
-#~ msgstr " "
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr " '%s' "
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr " , %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr " str() unicode(), %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr " bytes() str(), %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ " int(), long() , long(), "
-#~ " %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ " int() , int(), %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr " , C int"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr " , C int"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr " , "
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr " , "
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr " OutputObject"
-
-# msgstr "E180: "
-#~ msgid "invalid attribute: %s"
-#~ msgstr " : %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: ' /"
-
-#~ msgid "failed to change directory"
-#~ msgstr " "
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr " 3- imp.find_module(), %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr " 3- imp.find_module(), %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr " : imp.find_module NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr " vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr " "
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr " %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "- "
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ " 2, "
-#~ "%d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr " "
-
-#~ msgid "list index out of range"
-#~ msgstr " "
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr " : vim %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr " "
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr " : vim %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr " : "
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr " vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr " "
-
-# msgstr "E428: "
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr " %s "
-
-# msgstr "E428: "
-#~ msgid "function %s does not exist"
-#~ msgstr " %s "
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr " "
-
-#~ msgid "failed to run function %s"
-#~ msgstr " %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr " "
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr " %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr " %s, "
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr " "
-
-#~ msgid "no such tab page"
-#~ msgstr " "
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr " "
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr " : "
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr " "
-
-#~ msgid "no such window"
-#~ msgstr " "
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr " "
-
-#~ msgid "failed to rename buffer"
-#~ msgstr " "
-
-#~ msgid "mark name must be a single character"
-#~ msgstr " "
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr " ᒺ vim.Buffer, %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr " %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr " ᒺ vim.Window, %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr " "
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr " "
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr " ᒺ vim.TabPage, %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr " "
-
-#~ msgid "failed to run the code"
-#~ msgstr " "
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Eval ᒺ python"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: ᒺ python vim"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr " %s vim"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr " %s vim"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr " : NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr " : "
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ " : sys.path_hooks \n"
-#~ " :\n"
-#~ "- vim.path_hook sys.path_hooks\n"
-#~ "- vim.VIM_SPECIAL_PATH sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ " : sys.path \n"
-#~ " vim.VIM_SPECIAL_PATH sys.path"
diff --git a/src/nvim/po/uk.po b/src/nvim/po/uk.po
index eaa3a5bfa9..6a75018726 100644
--- a/src/nvim/po/uk.po
+++ b/src/nvim/po/uk.po
@@ -21,204 +21,157 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../api/private/helpers.c:201
-#, fuzzy
msgid "Unable to get option value"
-msgstr "не вдалося отримати значення опції"
+msgstr "Не вдалося отримати значення опції"
-#: ../api/private/helpers.c:204
msgid "internal error: unknown option type"
msgstr "внутрішня помилка: невідомий тип опції"
-#: ../buffer.c:92
msgid "[Location List]"
msgstr "[Список місць]"
-#: ../buffer.c:93
msgid "[Quickfix List]"
msgstr "[Список виправлень]"
-#: ../buffer.c:94
msgid "E855: Autocommands caused command to abort"
msgstr "E855: Автокоманди призвели до скасування команди"
-#: ../buffer.c:135
msgid "E82: Cannot allocate any buffer, exiting..."
msgstr "E82: Немає можливості розмістити хоч один буфер, завершення роботи..."
-#: ../buffer.c:138
msgid "E83: Cannot allocate buffer, using other one..."
msgstr "E83: Немає можливості розмістити буфер, буде використано інший..."
-#: ../buffer.c:763
msgid "E515: No buffers were unloaded"
msgstr "E515: Жоден з буферів не був вивантажений"
-#: ../buffer.c:765
msgid "E516: No buffers were deleted"
msgstr "E516: Жоден з буферів не знищено"
-#: ../buffer.c:767
msgid "E517: No buffers were wiped out"
msgstr "E517: Жоден з буферів не витерто"
-#: ../buffer.c:772
msgid "1 buffer unloaded"
msgstr "Вивантажено один буфер"
-#: ../buffer.c:774
#, c-format
msgid "%d buffers unloaded"
msgstr "Вивантажено %d буфери(ів)"
-#: ../buffer.c:777
msgid "1 buffer deleted"
msgstr "Знищено один буфер"
-#: ../buffer.c:779
#, c-format
msgid "%d buffers deleted"
msgstr "Знищено %d буфери(ів)"
-#: ../buffer.c:782
msgid "1 buffer wiped out"
msgstr "Витерто один буфер"
-#: ../buffer.c:784
#, c-format
msgid "%d buffers wiped out"
msgstr "Витерто %d буфери(ів)"
-#: ../buffer.c:806
msgid "E90: Cannot unload last buffer"
msgstr "E90: Не можу вивантажити останній буфер"
-#: ../buffer.c:874
msgid "E84: No modified buffer found"
msgstr "E84: Жоден буфер не змінено"
#. back where we started, didn't find anything.
-#: ../buffer.c:903
msgid "E85: There is no listed buffer"
msgstr "E85: У списку немає буферів"
-#: ../buffer.c:913
#, c-format
msgid "E86: Buffer %<PRId64> does not exist"
msgstr "E86: Буфера %<PRId64> немає"
-#: ../buffer.c:915
msgid "E87: Cannot go beyond last buffer"
msgstr "E87: Це вже останній буфер"
-#: ../buffer.c:917
msgid "E88: Cannot go before first buffer"
msgstr "E88: Це вже найперший буфер"
-#: ../buffer.c:945
#, c-format
msgid ""
"E89: No write since last change for buffer %<PRId64> (add ! to override)"
msgstr "E89: Буфер %<PRId64> має зміни (! щоб не зважати)"
#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
msgid "W14: Warning: List of file names overflow"
msgstr "W14: Обережно: Список назв файлів переповнено"
-#: ../buffer.c:1555 ../quickfix.c:3361
#, c-format
msgid "E92: Buffer %<PRId64> not found"
msgstr "E92: Буфер %<PRId64> не знайдено"
-#: ../buffer.c:1798
#, c-format
msgid "E93: More than one match for %s"
msgstr "E93: Знайдено кілька збігів з %s"
-#: ../buffer.c:1800
#, c-format
msgid "E94: No matching buffer for %s"
msgstr "E94: Не знайдено буфер, схожий на %s"
-#: ../buffer.c:2161
#, c-format
msgid "line %<PRId64>"
msgstr "рядок %<PRId64>"
-#: ../buffer.c:2233
msgid "E95: Buffer with this name already exists"
msgstr "E95: Буфер з такою назвою вже існує"
-#: ../buffer.c:2498
msgid " [Modified]"
msgstr " [Змінено]"
-#: ../buffer.c:2501
msgid "[Not edited]"
msgstr "[Не редаговано]"
-#: ../buffer.c:2504
msgid "[New file]"
msgstr "[Новий файл]"
-#: ../buffer.c:2505
msgid "[Read errors]"
msgstr "[Помилки читання]"
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
msgid "[RO]"
msgstr "[RO]"
-#: ../buffer.c:2507 ../fileio.c:1807
msgid "[readonly]"
msgstr "[лише читати]"
-#: ../buffer.c:2524
#, c-format
msgid "1 line --%d%%--"
msgstr "один рядок --%d%%--"
-#: ../buffer.c:2526
#, c-format
msgid "%<PRId64> lines --%d%%--"
msgstr "%<PRId64> рядки(ів) --%d%%--"
-#: ../buffer.c:2530
#, c-format
msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
msgstr "рядок %<PRId64> з %<PRId64> --%d%%-- колонка "
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
msgid "[No Name]"
msgstr "[Без назви]"
#. must be a help buffer
-#: ../buffer.c:2667
msgid "help"
msgstr "допомога"
-#: ../buffer.c:3225 ../screen.c:4883
msgid "[Help]"
msgstr "[Допомога]"
-#: ../buffer.c:3254 ../screen.c:4887
msgid "[Preview]"
msgstr "[Перегляд]"
-#: ../buffer.c:3528
msgid "All"
msgstr "Усе"
-#: ../buffer.c:3528
msgid "Bot"
msgstr "Знизу"
-#: ../buffer.c:3531
msgid "Top"
msgstr "Вгорі"
-#: ../buffer.c:4244
msgid ""
"\n"
"# Buffer list:\n"
@@ -226,11 +179,9 @@ msgstr ""
"\n"
"# Список буферів:\n"
-#: ../buffer.c:4289
msgid "[Scratch]"
msgstr "[З нуля]"
-#: ../buffer.c:4529
msgid ""
"\n"
"--- Signs ---"
@@ -238,202 +189,155 @@ msgstr ""
"\n"
"--- Позначки ---"
-#: ../buffer.c:4538
#, c-format
msgid "Signs for %s:"
msgstr "Позначки для %s:"
-#: ../buffer.c:4543
#, c-format
msgid " line=%<PRId64> id=%d name=%s"
msgstr " рядок=%<PRId64> id=%d назва=%s"
-#: ../cursor_shape.c:68
msgid "E545: Missing colon"
msgstr "E545: Пропущено двокрапку"
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
msgid "E546: Illegal mode"
msgstr "E546: Неправильний режим"
-#: ../cursor_shape.c:134
msgid "E548: digit expected"
msgstr "E548: Потрібна цифра"
-#: ../cursor_shape.c:138
msgid "E549: Illegal percentage"
msgstr "E549: Неправильний відсоток"
-#: ../diff.c:146
#, c-format
msgid "E96: Can not diff more than %<PRId64> buffers"
msgstr "E96: Не можна порівнювати понад %<PRId64> буфери(ів)"
-#: ../diff.c:753
msgid "E810: Cannot read or write temp files"
msgstr "E810: Не можна читати чи записувати тимчасові файли"
-#: ../diff.c:755
msgid "E97: Cannot create diffs"
msgstr "E97: Не вдалося створити порівняння"
-#: ../diff.c:966
msgid "E816: Cannot read patch output"
msgstr "E816: Не вдалося прочитати результат patch"
-#: ../diff.c:1220
msgid "E98: Cannot read diff output"
msgstr "E98: Не вдалося прочитати результат diff"
-#: ../diff.c:2081
msgid "E99: Current buffer is not in diff mode"
msgstr "E99: Цей буфер не в режимі порівняння"
-#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
msgstr "E793: Немає більше модифіковних буферів в режимі порівняння"
-#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
msgstr "E100: Немає інших буферів в режимі порівняння"
-#: ../diff.c:2112
msgid "E101: More than two buffers in diff mode, don't know which one to use"
msgstr ""
"E101: Понад два буфери у режимі порівняння, не зрозуміло, котрий із них "
"використати"
-#: ../diff.c:2141
#, c-format
msgid "E102: Can't find buffer \"%s\""
msgstr "E102: Не вдалося знайти буфер «%s»"
-#: ../diff.c:2152
#, c-format
msgid "E103: Buffer \"%s\" is not in diff mode"
msgstr "E103: Буфер «%s» не в режимі порівняння"
-#: ../diff.c:2193
msgid "E787: Buffer changed unexpectedly"
msgstr "E787: Буфер несподівано змінився"
-#: ../digraph.c:1598
msgid "E104: Escape not allowed in digraph"
msgstr "E104: У диграфах не може міститися escape"
-#: ../digraph.c:1760
msgid "E544: Keymap file not found"
msgstr "E544: Не знайдено файл розкладки"
-#: ../digraph.c:1785
msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :loadkeymap використано не у файлі команд"
-#: ../digraph.c:1821
msgid "E791: Empty keymap entry"
msgstr "E791: Елемент розкладки порожній"
-#: ../edit.c:82
msgid " Keyword completion (^N^P)"
msgstr " Доповнення ключових слів (^N^P)"
#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
msgstr " Режим ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-#: ../edit.c:85
msgid " Whole line completion (^L^N^P)"
msgstr " Доповнення усього рядка (^L^N^P)"
-#: ../edit.c:86
msgid " File name completion (^F^N^P)"
msgstr " Доповнення назви файлу (^F^N^P)"
-#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
msgstr " Доповнення теґів (^]^N^P)"
-#: ../edit.c:88
msgid " Path pattern completion (^N^P)"
msgstr " Доповнення шляху за зразком (^N^P)"
-#: ../edit.c:89
msgid " Definition completion (^D^N^P)"
msgstr " Доповнення визначення (^D^N^P)"
-#: ../edit.c:91
msgid " Dictionary completion (^K^N^P)"
msgstr " Доповнення зі словника (^K^N^P)"
-#: ../edit.c:92
msgid " Thesaurus completion (^T^N^P)"
msgstr " Доповнення з тезаурусу (^T^N^P)"
-#: ../edit.c:93
msgid " Command-line completion (^V^N^P)"
msgstr " Доповнення команд (^V^N^P)"
-#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
msgstr " Користувацьке доповнення (^U^N^P)"
-#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
msgstr " Кмітливе доповнення (^O^N^P)"
-#: ../edit.c:96
msgid " Spelling suggestion (s^N^P)"
msgstr " Орфографічна підказка (s^N^P)"
-#: ../edit.c:97
msgid " Keyword Local completion (^N^P)"
msgstr " Доповнення місцевих ключових слів (^N^P)"
-#: ../edit.c:100
msgid "Hit end of paragraph"
msgstr "Трапився кінець параграфа"
# msgstr "E443: "
-#: ../edit.c:101
msgid "E839: Completion function changed window"
msgstr "E839: Функція доповнення змінила вікно"
-#: ../edit.c:102
msgid "E840: Completion function deleted text"
msgstr "E840: Функція доповнення знищила текст"
-#: ../edit.c:1847
msgid "'dictionary' option is empty"
msgstr "Опція 'dictionary' порожня"
-#: ../edit.c:1848
msgid "'thesaurus' option is empty"
msgstr "Опція 'thesaurus' порожня"
-#: ../edit.c:2655
#, c-format
msgid "Scanning dictionary: %s"
msgstr "Сканується словник: %s"
-#: ../edit.c:3079
msgid " (insert) Scroll (^E/^Y)"
msgstr " (вставка) Прогорнути (^E/^Y)"
-#: ../edit.c:3081
msgid " (replace) Scroll (^E/^Y)"
msgstr " (заміна) Прогорнути (^E/^Y)"
-#: ../edit.c:3587
#, c-format
msgid "Scanning: %s"
msgstr "Пошук у: %s"
-#: ../edit.c:3614
msgid "Scanning tags."
msgstr "Пошук серед теґів."
-#: ../edit.c:4519
msgid " Adding"
msgstr " Додається"
@@ -441,598 +345,468 @@ msgstr " Додається"
#. * be called before line = ml_get(), or when this address is no
#. * longer needed. -- Acevedo.
#.
-#: ../edit.c:4562
msgid "-- Searching..."
msgstr "-- Пошук..."
-#: ../edit.c:4618
msgid "Back at original"
msgstr "Початковий варіант"
-#: ../edit.c:4621
msgid "Word from other line"
msgstr "Слово з іншого рядка"
-#: ../edit.c:4624
msgid "The only match"
msgstr "Єдиний збіг"
-#: ../edit.c:4680
#, c-format
msgid "match %d of %d"
msgstr "збіг %d з %d"
-#: ../edit.c:4684
#, c-format
msgid "match %d"
msgstr "збіг %d"
# msgstr "E17: "
-#: ../eval.c:137
msgid "E18: Unexpected characters in :let"
msgstr "E18: Неочікувані символи у :let"
-#: ../eval.c:138
#, c-format
msgid "E684: list index out of range: %<PRId64>"
msgstr "E684: Індекс списку поза межами: %<PRId64>"
-#: ../eval.c:139
#, c-format
msgid "E121: Undefined variable: %s"
msgstr "E121: Невизначена змінна: %s"
-#: ../eval.c:140
msgid "E111: Missing ']'"
msgstr "E111: Бракує ']'"
-#: ../eval.c:141
#, c-format
msgid "E686: Argument of %s must be a List"
msgstr "E686: Аргумент у %s має бути списком"
-#: ../eval.c:143
#, c-format
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: Аргумент у %s має бути списком чи словником"
-#: ../eval.c:144
msgid "E713: Cannot use empty key for Dictionary"
msgstr "E713: Ключ словника не може бути порожнім"
# msgstr "E396: "
-#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: Потрібен список"
-#: ../eval.c:146
msgid "E715: Dictionary required"
msgstr "E715: Потрібен словник"
-#: ../eval.c:147
#, c-format
msgid "E118: Too many arguments for function: %s"
msgstr "E118: Забагато аргументів для функції: %s"
-#: ../eval.c:148
#, c-format
msgid "E716: Key not present in Dictionary: %s"
msgstr "E716: Немає такого ключа у словнику: %s"
-#: ../eval.c:150
#, c-format
msgid "E122: Function %s already exists, add ! to replace it"
msgstr "E122: Функція %s уже існує, ! щоб замінити"
-#: ../eval.c:151
msgid "E717: Dictionary entry already exists"
msgstr "E717: Запис у словнику вже існує"
-#: ../eval.c:152
msgid "E718: Funcref required"
msgstr "E718: Треба посилання на функцію"
-#: ../eval.c:153
msgid "E719: Cannot use [:] with a Dictionary"
msgstr "E719: Не можна використати [:] зі словником"
-#: ../eval.c:154
#, c-format
msgid "E734: Wrong variable type for %s="
msgstr "E734: Неправильний тип змінної для %s="
-#: ../eval.c:155
#, c-format
msgid "E130: Unknown function: %s"
msgstr "E130: Невідома функція: %s"
-#: ../eval.c:156
#, c-format
msgid "E461: Illegal variable name: %s"
msgstr "E461: Неприпустима назва змінної: %s"
# msgstr "E373: "
-#: ../eval.c:157
msgid "E806: using Float as a String"
msgstr "E806: Float вжито як String"
-#: ../eval.c:1830
msgid "E687: Less targets than List items"
msgstr "E687: Цілей менше, ніж елементів списку"
-#: ../eval.c:1834
msgid "E688: More targets than List items"
msgstr "E688: Цілей більше, ніж елементів списку"
-#: ../eval.c:1906
msgid "Double ; in list of variables"
msgstr "Друга ; у списку змінних"
# msgstr "E235: "
-#: ../eval.c:2078
#, c-format
msgid "E738: Can't list variables for %s"
msgstr "E738: Не можна перерахувати змінні у %s"
-#: ../eval.c:2391
msgid "E689: Can only index a List or Dictionary"
msgstr "E689: Індексний доступ може бути тільки до списку чи словника"
-#: ../eval.c:2396
msgid "E708: [:] must come last"
msgstr "E708: [:] має бути останньою"
-#: ../eval.c:2439
msgid "E709: [:] requires a List value"
msgstr "E709: [:] вимагає список"
-#: ../eval.c:2674
msgid "E710: List value has more items than target"
msgstr "E710: Список має більше елементів, ніж ціль"
-#: ../eval.c:2678
msgid "E711: List value has not enough items"
msgstr "E711: Список має недостатньо елементів"
-#: ../eval.c:2867
msgid "E690: Missing \"in\" after :for"
msgstr "E690: Пропущено «in» після :for"
-#: ../eval.c:3063
#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: Пропущено дужки: %s"
-#: ../eval.c:3263
#, c-format
msgid "E108: No such variable: \"%s\""
msgstr "E108: Змінної немає: «%s»"
-#: ../eval.c:3333
msgid "E743: variable nested too deep for (un)lock"
msgstr "E743: Змінна має забагато вкладень щоб бути за-/відкритою."
-#: ../eval.c:3630
msgid "E109: Missing ':' after '?'"
msgstr "E109: Бракує ':' після '?'"
-#: ../eval.c:3893
msgid "E691: Can only compare List with List"
msgstr "E691: Список можна порівняти тільки зі списком"
-#: ../eval.c:3895
msgid "E692: Invalid operation for Lists"
msgstr "E692: Некоректна операція над списком"
-#: ../eval.c:3915
msgid "E735: Can only compare Dictionary with Dictionary"
msgstr "E735: Словник можна порівняти тільки із словником"
-#: ../eval.c:3917
msgid "E736: Invalid operation for Dictionary"
msgstr "E736: Некоректна операція над словником"
-#: ../eval.c:3932
msgid "E693: Can only compare Funcref with Funcref"
msgstr "E693: Функцію можна порівняти тільки з функцією"
-#: ../eval.c:3934
msgid "E694: Invalid operation for Funcrefs"
msgstr "E694: Некоректна операція над функцією"
-#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
msgstr "E804: Не можна виконати '%' над Float"
-#: ../eval.c:4478
msgid "E110: Missing ')'"
msgstr "E110: Пропущено ')'"
-#: ../eval.c:4609
msgid "E695: Cannot index a Funcref"
msgstr "E695: Функція не має індексації"
-#: ../eval.c:4839
#, c-format
msgid "E112: Option name missing: %s"
msgstr "E112: Бракує назви опції: %s"
-#: ../eval.c:4855
#, c-format
msgid "E113: Unknown option: %s"
msgstr "E113: Невідома опція: %s"
-#: ../eval.c:4904
#, c-format
msgid "E114: Missing quote: %s"
msgstr "E114: Бракує лапки: %s"
-#: ../eval.c:5020
#, c-format
msgid "E115: Missing quote: %s"
msgstr "E115: Бракує лапки: %s"
# msgstr "E404: "
-#: ../eval.c:5084
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr "E696: Бракує коми у списку: %s"
-#: ../eval.c:5091
#, c-format
msgid "E697: Missing end of List ']': %s"
msgstr "E697: Немає кінцівки списку ']': %s"
# msgstr "E235: "
-#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
msgstr "E720: Бракує двокрапки у словнику: %s"
-#: ../eval.c:6499
#, c-format
msgid "E721: Duplicate key in Dictionary: \"%s\""
msgstr "E721: Повторення ключа в словнику: «%s»"
# msgstr "E235: "
-#: ../eval.c:6517
#, c-format
msgid "E722: Missing comma in Dictionary: %s"
msgstr "E722: Бракує коми у словнику: %s"
-#: ../eval.c:6524
#, c-format
msgid "E723: Missing end of Dictionary '}': %s"
msgstr "E723: Немає кінцівки словника '}': %s"
# msgstr "E21: "
-#: ../eval.c:6555
msgid "E724: variable nested too deep for displaying"
msgstr "E724: У змінній забагато вкладень щоб її показати"
-#: ../eval.c:7188
#, c-format
msgid "E740: Too many arguments for function %s"
msgstr "E740: Забагато аргументів для функції %s"
-#: ../eval.c:7190
#, c-format
msgid "E116: Invalid arguments for function %s"
msgstr "E116: Неправильні аргументи функції %s"
-#: ../eval.c:7377
#, c-format
msgid "E117: Unknown function: %s"
msgstr "E117: Невідома функція: %s"
-#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
msgstr "E119: Замало аргументів для функції %s"
-#: ../eval.c:7387
#, c-format
msgid "E120: Using <SID> not in a script context: %s"
msgstr "E120: <SID> використовується не у контексті скрипту: %s"
-#: ../eval.c:7391
#, c-format
msgid "E725: Calling dict function without Dictionary: %s"
msgstr "E725: Виклик dict-функції без словника: %s"
-#: ../eval.c:7453
msgid "E808: Number or Float required"
msgstr "E808: Треба вказати Number чи Float"
# msgstr "E14: "
-#: ../eval.c:7503
msgid "add() argument"
msgstr "аргумент add()"
-#: ../eval.c:7907
msgid "E699: Too many arguments"
msgstr "E699: Забагато аргументів"
# msgstr "E327: "
-#: ../eval.c:8073
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() можна вживати тільки в режимі вставки"
-#: ../eval.c:8156
msgid "&Ok"
msgstr "&O:Гаразд"
# msgstr "E226: "
-#: ../eval.c:8676
#, c-format
msgid "E737: Key already exists: %s"
msgstr "E737: Ключ вже існує: %s"
# msgstr "E14: "
-#: ../eval.c:8692
msgid "extend() argument"
msgstr "аргумент extend()"
# msgstr "E14: "
-#: ../eval.c:8915
msgid "map() argument"
msgstr "аргумент map()"
# msgstr "E14: "
-#: ../eval.c:8916
msgid "filter() argument"
msgstr "аргумент filter()"
-#: ../eval.c:9229
#, c-format
msgid "+-%s%3ld lines: "
msgstr "+-%s%3ld рядків: "
-#: ../eval.c:9291
#, c-format
msgid "E700: Unknown function: %s"
msgstr "E700: Невідома функція: %s"
-#: ../eval.c:10729
msgid "called inputrestore() more often than inputsave()"
msgstr "Виклики до inputrestore() частіше, ніж до inputsave()"
# msgstr "E14: "
-#: ../eval.c:10771
msgid "insert() argument"
msgstr "аргумент insert()"
# msgstr "E406: "
-#: ../eval.c:10841
msgid "E786: Range not allowed"
msgstr "E786: Інтервал не дозволено"
# msgstr "E177: "
-#: ../eval.c:11140
msgid "E701: Invalid type for len()"
msgstr "E701: Некоректний тип для len()"
-#: ../eval.c:11980
msgid "E726: Stride is zero"
msgstr "E726: Крок нульовий"
-#: ../eval.c:11982
msgid "E727: Start past end"
msgstr "E727: Початок за кінцем"
-#: ../eval.c:12024 ../eval.c:15297
msgid "<empty>"
msgstr "<нічого>"
# msgstr "E14: "
-#: ../eval.c:12282
msgid "remove() argument"
msgstr "аргумент remove()"
-#: ../eval.c:12466
msgid "E655: Too many symbolic links (cycle?)"
msgstr "E655: Забагато символьних посилань (цикл?)"
# msgstr "E14: "
-#: ../eval.c:12593
msgid "reverse() argument"
msgstr "аргумент reverse()"
# msgstr "E14: "
-#: ../eval.c:13721
msgid "sort() argument"
msgstr "аргумент sort()"
# msgstr "E14: "
-#: ../eval.c:13721
-#, fuzzy
msgid "uniq() argument"
-msgstr "аргумент add()"
+msgstr "аргумент uniq()"
# msgstr "E364: "
-#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: Помилка у функції порівняння"
# msgstr "E364: "
-#: ../eval.c:13806
-#, fuzzy
msgid "E882: Uniq compare function failed"
-msgstr "E702: Помилка у функції порівняння"
+msgstr "E882: Помилка у функції порівняння uniq"
-#: ../eval.c:14085
msgid "(Invalid)"
msgstr "(Неможливо)"
-#: ../eval.c:14590
msgid "E677: Error writing temp file"
msgstr "E677: Не вдалося записати тимчасовий файл"
-#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
msgstr "E805: Float вжито як Number"
-#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
msgstr "E703: Funcref вжито як Number"
-#: ../eval.c:16170
msgid "E745: Using a List as a Number"
msgstr "E745: List вжито як Number"
-#: ../eval.c:16173
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Dictionary вжито як Number"
-#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: Funcref вжито як String"
# msgstr "E373: "
-#: ../eval.c:16262
msgid "E730: using List as a String"
msgstr "E730: List вжито як String"
-#: ../eval.c:16265
msgid "E731: using Dictionary as a String"
msgstr "E731: Dictionary вжито як String"
-#: ../eval.c:16619
#, c-format
msgid "E706: Variable type mismatch for: %s"
msgstr "E706: Неправильний тип змінної: %s"
-#: ../eval.c:16705
#, c-format
msgid "E795: Cannot delete variable %s"
msgstr "E795: Не можна знищити змінну %s"
-#: ../eval.c:16724
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr "E704: Назва змінної Funcref має починатися з великої літери: %s"
-#: ../eval.c:16732
#, c-format
msgid "E705: Variable name conflicts with existing function: %s"
msgstr "E705: Назва змінної співпадає з існуючою функцією: %s"
-#: ../eval.c:16763
#, c-format
msgid "E741: Value is locked: %s"
msgstr "E741: Значення захищене: %s"
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
msgid "Unknown"
msgstr "Невідомо"
-#: ../eval.c:16768
#, c-format
msgid "E742: Cannot change value of %s"
msgstr "E742: Не можна змінити значення %s"
-#: ../eval.c:16838
msgid "E698: variable nested too deep for making a copy"
msgstr "E698: Змінна вкладена занадто глибоко щоб зробити її копію"
-#: ../eval.c:17249
#, c-format
msgid "E123: Undefined function: %s"
msgstr "E123: Невизначена функція: %s"
-#: ../eval.c:17260
#, c-format
msgid "E124: Missing '(': %s"
msgstr "E124: Бракує '(': %s"
-#: ../eval.c:17293
msgid "E862: Cannot use g: here"
msgstr "E862: Тут не можна використати g:"
-#: ../eval.c:17312
#, c-format
msgid "E125: Illegal argument: %s"
msgstr "E125: Недозволений аргумент: %s"
-#: ../eval.c:17323
#, c-format
msgid "E853: Duplicate argument name: %s"
msgstr "E853: Назва аргументу повторюється: %s"
-#: ../eval.c:17416
msgid "E126: Missing :endfunction"
msgstr "E126: Бракує :endfunction"
-#: ../eval.c:17537
#, c-format
msgid "E707: Function name conflicts with variable: %s"
msgstr "E707: Назва функції співпадає зі змінною: %s"
-#: ../eval.c:17549
#, c-format
msgid "E127: Cannot redefine function %s: It is in use"
msgstr "E127: Не вдалося перевизначити функцію %s: вона використовується"
-#: ../eval.c:17604
#, c-format
msgid "E746: Function name does not match script file name: %s"
msgstr "E746: Назва функції не збігається з назвою файлу скрипту: %s"
-#: ../eval.c:17716
msgid "E129: Function name required"
msgstr "E129: Не вказано назву функції"
-#: ../eval.c:17824
-#, fuzzy, c-format
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
msgstr ""
-"E128: Назва функції має починатися з великої літери або містити двокрапку: %s"
+"E128: Назва функції має починатися з великої літери або \"s:\": %s"
-#: ../eval.c:17833
-#, fuzzy, c-format
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
msgstr ""
-"E128: Назва функції має починатися з великої літери або містити двокрапку: %s"
+"E884: Назва функції не може містити двокрапку: %s"
-#: ../eval.c:18336
#, c-format
msgid "E131: Cannot delete function %s: It is in use"
msgstr "E131: Не вдалося знищити функцію %s: Вона використовується"
-#: ../eval.c:18441
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr "E132: Глибина викликів функції перевищує 'maxfuncdepth'"
-#: ../eval.c:18568
#, c-format
msgid "calling %s"
msgstr "викликається %s"
-#: ../eval.c:18651
#, c-format
msgid "%s aborted"
msgstr "%s припинено"
-#: ../eval.c:18653
#, c-format
msgid "%s returning #%<PRId64>"
msgstr "%s повертає #%<PRId64>"
-#: ../eval.c:18670
#, c-format
msgid "%s returning %s"
msgstr "%s повертає %s"
-#: ../eval.c:18691 ../ex_cmds2.c:2695
#, c-format
msgid "continuing in %s"
msgstr "продовження в %s"
-#: ../eval.c:18795
msgid "E133: :return not inside a function"
msgstr "E133: :return поза межами функції"
-#: ../eval.c:19159
msgid ""
"\n"
"# global variables:\n"
@@ -1040,7 +814,6 @@ msgstr ""
"\n"
"# глобальні змінні:\n"
-#: ../eval.c:19254
msgid ""
"\n"
"\tLast set from "
@@ -1048,104 +821,82 @@ msgstr ""
"\n"
"\tВостаннє змінена у "
-#: ../eval.c:19272
msgid "No old files"
msgstr "Жодного старого файлу"
-#: ../ex_cmds.c:122
#, c-format
msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
msgstr "<%s>%s%s %d, шіст %02x, віс %03o"
-#: ../ex_cmds.c:145
#, c-format
msgid "> %d, Hex %04x, Octal %o"
msgstr "> %d, шіст %04x, віс %o"
-#: ../ex_cmds.c:146
#, c-format
msgid "> %d, Hex %08x, Octal %o"
msgstr "> %d, шіст %08x, віс %o"
-#: ../ex_cmds.c:684
msgid "E134: Move lines into themselves"
msgstr "E134: Неможливо перемістити рядки самі в себе"
-#: ../ex_cmds.c:747
msgid "1 line moved"
msgstr "Переміщено один рядок"
-#: ../ex_cmds.c:749
#, c-format
msgid "%<PRId64> lines moved"
msgstr "Переміщено %<PRId64> рядки(ів)"
-#: ../ex_cmds.c:1175
#, c-format
msgid "%<PRId64> lines filtered"
msgstr "Відфільтровано %<PRId64> рядки(ів)"
-#: ../ex_cmds.c:1194
msgid "E135: *Filter* Autocommands must not change current buffer"
msgstr "E135: Автокоманди *Filter* не повинні змінювати поточний буфер"
-#: ../ex_cmds.c:1244
msgid "[No write since last change]\n"
msgstr "[Зміни не записано]\n"
-#: ../ex_cmds.c:1424
#, c-format
msgid "%sviminfo: %s in line: "
msgstr "%sviminfo: %s в рядку: "
-#: ../ex_cmds.c:1431
msgid "E136: viminfo: Too many errors, skipping rest of file"
msgstr "E136: viminfo: Забагато помилок, решта файлу буде пропущено"
-#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
msgstr "Зчитується файл viminfo: «%s»%s%s%s"
-#: ../ex_cmds.c:1460
msgid " info"
msgstr " інформація"
-#: ../ex_cmds.c:1461
msgid " marks"
msgstr " позначки"
-#: ../ex_cmds.c:1462
msgid " oldfiles"
msgstr " старі файли"
-#: ../ex_cmds.c:1463
msgid " FAILED"
msgstr " НЕ ВДАЛОСЯ"
#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
#, c-format
msgid "E137: Viminfo file is not writable: %s"
msgstr "E137: Не дозволено запис у файл viminfo: %s"
-#: ../ex_cmds.c:1626
#, c-format
msgid "E138: Can't write viminfo file %s!"
msgstr "E138: Не вдалося записати файл viminfo %s!"
-#: ../ex_cmds.c:1635
#, c-format
msgid "Writing viminfo file \"%s\""
msgstr "Записується файл viminfo «%s»"
#. Write the info:
-#: ../ex_cmds.c:1720
#, c-format
msgid "# This viminfo file was generated by Vim %s.\n"
msgstr "# Цей файл автоматично створений Vim %s.\n"
-#: ../ex_cmds.c:1722
msgid ""
"# You may edit it if you're careful!\n"
"\n"
@@ -1153,47 +904,37 @@ msgstr ""
"# Можете редагувати, але ОБЕРЕЖНО!\n"
"\n"
-#: ../ex_cmds.c:1723
msgid "# Value of 'encoding' when this file was written\n"
msgstr "# Значення 'encoding' під час створення цього файлу\n"
-#: ../ex_cmds.c:1800
msgid "Illegal starting char"
msgstr "Недозволений символ на початку рядка"
-#: ../ex_cmds.c:2162
msgid "Write partial file?"
msgstr "Записати частину файлу?"
-#: ../ex_cmds.c:2166
msgid "E140: Use ! to write partial buffer"
msgstr "E140: Використайте ! для запису частини буфера"
-#: ../ex_cmds.c:2281
#, c-format
msgid "Overwrite existing file \"%s\"?"
msgstr "Переписати існуючий файл «%s»?"
-#: ../ex_cmds.c:2317
#, c-format
msgid "Swap file \"%s\" exists, overwrite anyway?"
msgstr "Файл обміну «%s» існує, перезаписати?"
-#: ../ex_cmds.c:2326
#, c-format
msgid "E768: Swap file exists: %s (:silent! overrides)"
msgstr "E768: Файл обміну існує: %s (:silent! переважує)"
-#: ../ex_cmds.c:2381
#, c-format
msgid "E141: No file name for buffer %<PRId64>"
msgstr "E141: Немає вхідного файлу для буфера %<PRId64>"
-#: ../ex_cmds.c:2412
msgid "E142: File not written: Writing is disabled by 'write' option"
msgstr "E142: Файл не записано: запис заборонено опцією 'write'"
-#: ../ex_cmds.c:2434
#, c-format
msgid ""
"'readonly' option is set for \"%s\".\n"
@@ -1202,7 +943,6 @@ msgstr ""
"Для «%s» встановлено 'readonly'.\n"
"Бажаєте все одно продовжити запис?"
-#: ../ex_cmds.c:2439
#, c-format
msgid ""
"File permissions of \"%s\" are read-only.\n"
@@ -1213,84 +953,66 @@ msgstr ""
"Проте, можливо, його можна записати.\n"
"Хочете спробувати?"
-#: ../ex_cmds.c:2451
#, c-format
msgid "E505: \"%s\" is read-only (add ! to override)"
msgstr "E505: «%s» тільки для читання (! щоб не зважати)"
-#: ../ex_cmds.c:3120
#, c-format
msgid "E143: Autocommands unexpectedly deleted new buffer %s"
msgstr "E143: Автокоманди несподівано знищили новий буфер %s"
-#: ../ex_cmds.c:3313
msgid "E144: non-numeric argument to :z"
msgstr "E144: нечисловий аргумент для :z"
-#: ../ex_cmds.c:3404
msgid "E145: Shell commands not allowed in rvim"
msgstr "E145: У rvim не дозволені команди оболонки"
-#: ../ex_cmds.c:3498
msgid "E146: Regular expressions can't be delimited by letters"
msgstr "E146: Регулярні вирази не можна розділяти літерами"
-#: ../ex_cmds.c:3964
#, c-format
msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
msgstr "Замінити на %s (y/n/a/q/l/^E/^Y)?"
-#: ../ex_cmds.c:4379
msgid "(Interrupted) "
msgstr "(Перервано) "
# msgstr "E31: "
-#: ../ex_cmds.c:4384
msgid "1 match"
msgstr "Один збіг"
-#: ../ex_cmds.c:4384
msgid "1 substitution"
msgstr "Одна заміна"
-#: ../ex_cmds.c:4387
#, c-format
msgid "%<PRId64> matches"
msgstr "%<PRId64> збіги(ів)"
-#: ../ex_cmds.c:4388
#, c-format
msgid "%<PRId64> substitutions"
msgstr "%<PRId64> замін(и)"
-#: ../ex_cmds.c:4392
msgid " on 1 line"
msgstr " в одному рядку"
-#: ../ex_cmds.c:4395
#, c-format
msgid " on %<PRId64> lines"
msgstr " в %<PRId64> рядках"
-#: ../ex_cmds.c:4438
msgid "E147: Cannot do :global recursive"
msgstr "E147: :global не можна вживати рекурсивно"
-#: ../ex_cmds.c:4467
msgid "E148: Regular expression missing from global"
msgstr "E148: У global бракує зразка"
-#: ../ex_cmds.c:4508
#, c-format
msgid "Pattern found in every line: %s"
msgstr "Зразок знайдено у кожному рядку: %s"
-#: ../ex_cmds.c:4510
#, c-format
msgid "Pattern not found: %s"
msgstr "Зразок не знайдено: %s"
-#: ../ex_cmds.c:4587
msgid ""
"\n"
"# Last Substitute String:\n"
@@ -1300,338 +1022,265 @@ msgstr ""
"# Остання заміна:\n"
"$"
-#: ../ex_cmds.c:4679
msgid "E478: Don't panic!"
msgstr "E478: Без паніки!"
-#: ../ex_cmds.c:4717
#, c-format
msgid "E661: Sorry, no '%s' help for %s"
msgstr "E661: Вибачте, немає допомоги '%s' для %s"
-#: ../ex_cmds.c:4719
#, c-format
msgid "E149: Sorry, no help for %s"
msgstr "E149: Вибачте, немає допомоги для %s"
-#: ../ex_cmds.c:4751
#, c-format
msgid "Sorry, help file \"%s\" not found"
msgstr "Вибачте, файл допомоги «%s» не знайдено"
-#: ../ex_cmds.c:5323
#, c-format
msgid "E150: Not a directory: %s"
msgstr "E150: Не є каталогом: %s"
-#: ../ex_cmds.c:5446
#, c-format
msgid "E152: Cannot open %s for writing"
msgstr "E152: Не вдалося відкрити %s для запису"
-#: ../ex_cmds.c:5471
#, c-format
msgid "E153: Unable to open %s for reading"
msgstr "E153: Не вдалося відкрити %s для читання"
-#: ../ex_cmds.c:5500
#, c-format
msgid "E670: Mix of help file encodings within a language: %s"
msgstr "E670: Мішанина кодувань файлу допомоги для мови %s"
-#: ../ex_cmds.c:5565
#, c-format
msgid "E154: Duplicate tag \"%s\" in file %s/%s"
msgstr "E154: Повторення теґу «%s» у файлі %s/%s"
-#: ../ex_cmds.c:5687
#, c-format
msgid "E160: Unknown sign command: %s"
msgstr "E160: Невідома команда надпису: %s"
-#: ../ex_cmds.c:5704
msgid "E156: Missing sign name"
msgstr "E156: Пропущено назву надпису"
-#: ../ex_cmds.c:5746
msgid "E612: Too many signs defined"
msgstr "E612: Визначено забагато надписів"
-#: ../ex_cmds.c:5813
#, c-format
msgid "E239: Invalid sign text: %s"
msgstr "E239: Некоректний надпис: %s"
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
#, c-format
msgid "E155: Unknown sign: %s"
msgstr "E155: Невідомий надпис: %s"
-#: ../ex_cmds.c:5877
msgid "E159: Missing sign number"
msgstr "E159: Пропущено номер надпису"
-#: ../ex_cmds.c:5971
#, c-format
msgid "E158: Invalid buffer name: %s"
msgstr "E158: Некоректна назва буфера: %s"
-#: ../ex_cmds.c:6008
#, c-format
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: Неправильний ID надпису: %<PRId64>"
-#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " (не підтримується)"
-#: ../ex_cmds.c:6169
msgid "[Deleted]"
msgstr "[Знищено]"
-#: ../ex_cmds2.c:139
msgid "Entering Debug mode. Type \"cont\" to continue."
msgstr "Режим налагодження. Щоб продовжити введіть «cont»."
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
#, c-format
msgid "line %<PRId64>: %s"
msgstr "рядок %<PRId64>: %s"
-#: ../ex_cmds2.c:145
#, c-format
msgid "cmd: %s"
msgstr "команда: %s"
-#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
msgstr "Точка зупинки в «%s%s» рядок %<PRId64>"
-#: ../ex_cmds2.c:581
#, c-format
msgid "E161: Breakpoint not found: %s"
msgstr "E161: Точку зупинки не знайдено: %s"
-#: ../ex_cmds2.c:611
msgid "No breakpoints defined"
msgstr "Не визначено жодної точки зупинки"
-#: ../ex_cmds2.c:617
#, c-format
msgid "%3d %s %s line %<PRId64>"
msgstr "%3d %s %s рядок %<PRId64>"
-#: ../ex_cmds2.c:942
msgid "E750: First use \":profile start {fname}\""
msgstr "E750: Спочатку зробіть «:profile start {файл}»"
-#: ../ex_cmds2.c:1269
#, c-format
msgid "Save changes to \"%s\"?"
msgstr "Зберегти зміни в «%s»?"
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
msgid "Untitled"
msgstr "Неназваний"
-#: ../ex_cmds2.c:1421
#, c-format
msgid "E162: No write since last change for buffer \"%s\""
msgstr "E162: Буфер «%s» має незбережені зміни"
-#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
msgstr ""
"Обережно: Несподівано опинилися у іншому буфері (перевірте автокоманди)"
-#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
msgstr "E163: Редагується лише один файл"
-#: ../ex_cmds2.c:1828
msgid "E164: Cannot go before first file"
msgstr "E164: Це вже найперший файл"
-#: ../ex_cmds2.c:1830
msgid "E165: Cannot go beyond last file"
msgstr "E165: Це вже останній файл"
-#: ../ex_cmds2.c:2175
#, c-format
msgid "E666: compiler not supported: %s"
msgstr "E666: Компілятор не підтримується: %s"
# msgstr "E195: "
-#: ../ex_cmds2.c:2257
#, c-format
msgid "Searching for \"%s\" in \"%s\""
msgstr "Пошук «%s» в «%s»"
-#: ../ex_cmds2.c:2284
#, c-format
msgid "Searching for \"%s\""
msgstr "Пошук «%s»"
-#: ../ex_cmds2.c:2307
#, c-format
msgid "not found in 'runtimepath': \"%s\""
msgstr "В 'runtimepath' не знайдено «%s»"
-#: ../ex_cmds2.c:2472
#, c-format
msgid "Cannot source a directory: \"%s\""
msgstr "Не вдалося прочитати каталог: «%s»"
-#: ../ex_cmds2.c:2518
#, c-format
msgid "could not source \"%s\""
msgstr "Не вдалося виконати «%s»"
-#: ../ex_cmds2.c:2520
#, c-format
msgid "line %<PRId64>: could not source \"%s\""
msgstr "рядок %<PRId64>: не вдалося виконати «%s»"
-#: ../ex_cmds2.c:2535
#, c-format
msgid "sourcing \"%s\""
msgstr "виконується «%s»"
-#: ../ex_cmds2.c:2537
#, c-format
msgid "line %<PRId64>: sourcing \"%s\""
msgstr "рядок %<PRId64>: виконується «%s»"
-#: ../ex_cmds2.c:2693
#, c-format
msgid "finished sourcing %s"
msgstr "закінчено виконання %s"
-#: ../ex_cmds2.c:2765
msgid "modeline"
msgstr "modeline"
# msgstr "E14: "
-#: ../ex_cmds2.c:2767
msgid "--cmd argument"
msgstr "--cmd аргумент"
# msgstr "E14: "
-#: ../ex_cmds2.c:2769
msgid "-c argument"
msgstr "-c аргумент"
-#: ../ex_cmds2.c:2771
msgid "environment variable"
msgstr "змінна оточення"
-#: ../ex_cmds2.c:2773
msgid "error handler"
msgstr "обробник помилки"
-#: ../ex_cmds2.c:3020
msgid "W15: Warning: Wrong line separator, ^M may be missing"
msgstr "W15: Застереження: Неправильний роздільник рядків, можливо, бракує ^M"
-#: ../ex_cmds2.c:3139
msgid "E167: :scriptencoding used outside of a sourced file"
msgstr "E167: :scriptencoding використано поза виконуваним файлом"
-#: ../ex_cmds2.c:3166
msgid "E168: :finish used outside of a sourced file"
msgstr "E168: :finish використано поза виконуваним файлом"
-#: ../ex_cmds2.c:3389
#, c-format
msgid "Current %slanguage: \"%s\""
msgstr "Мова (%s): «%s»"
-#: ../ex_cmds2.c:3404
#, c-format
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: Не вдалося встановити мову «%s»"
#. don't redisplay the window
#. don't wait for return
-#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
msgstr "Режим Ex. Для повернення до нормального режиму виконайте «visual»"
-#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
msgstr "E501: Кінець файлу"
-#: ../ex_docmd.c:513
msgid "E169: Command too recursive"
msgstr "E169: Команда занадто рекурсивна"
-#: ../ex_docmd.c:1006
#, c-format
msgid "E605: Exception not caught: %s"
msgstr "E605: Виняткова ситуація не оброблена: %s"
-#: ../ex_docmd.c:1085
msgid "End of sourced file"
msgstr "Кінець виконуваного файлу"
-#: ../ex_docmd.c:1086
msgid "End of function"
msgstr "Кінець функції"
-#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
msgstr "E464: Неоднозначний вжиток команди користувача"
-#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
msgstr "E492: Це не команда редактора"
-#: ../ex_docmd.c:1729
msgid "E493: Backwards range given"
msgstr "E493: Інтервал задано навиворіт"
-#: ../ex_docmd.c:1733
msgid "Backwards range given, OK to swap"
msgstr "Інтервал задано навиворіт, щоб поміняти місцями — ГАРАЗД"
#. append
#. typed wrong
-#: ../ex_docmd.c:1787
msgid "E494: Use w or w>>"
msgstr "E494: Спробуйте w або w>>"
-#: ../ex_docmd.c:3454
msgid "E319: The command is not available in this version"
msgstr "E319: Вибачте, цієї команди немає у цій версії"
-#: ../ex_docmd.c:3752
msgid "E172: Only one file name allowed"
msgstr "E172: Дозволено тільки одну назву файлу"
-#: ../ex_docmd.c:4238
msgid "1 more file to edit. Quit anyway?"
msgstr "Залишилося відредагувати ще один файл. Все одно вийти?"
-#: ../ex_docmd.c:4242
#, c-format
msgid "%d more files to edit. Quit anyway?"
msgstr "Ще є %d не редагованих файлів. Все одно вийти?"
-#: ../ex_docmd.c:4248
msgid "E173: 1 more file to edit"
msgstr "E173: Залишилося відредагувати ще один файл"
-#: ../ex_docmd.c:4250
#, c-format
msgid "E173: %<PRId64> more files to edit"
msgstr "E173: Залишилося %<PRId64> не редагованих файлів"
-#: ../ex_docmd.c:4320
msgid "E174: Command already exists: add ! to replace it"
msgstr "E174: Команда вже існує, ! щоб замінити її"
-#: ../ex_docmd.c:4432
msgid ""
"\n"
" Name Args Range Complete Definition"
@@ -1639,353 +1288,276 @@ msgstr ""
"\n"
" Назва Арг. Межа Доповнення Визначення"
-#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
msgstr "Не знайдено команд користувача"
-#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
msgstr "E175: Не вказано атрибутів"
-#: ../ex_docmd.c:4583
msgid "E176: Invalid number of arguments"
msgstr "E176: Неправильна кількість аргументів"
-#: ../ex_docmd.c:4594
msgid "E177: Count cannot be specified twice"
msgstr "E177: Лічильник не може бути вказано двічі"
# msgstr "E177: "
-#: ../ex_docmd.c:4603
msgid "E178: Invalid default value for count"
msgstr "E178: Неправильне початкове значення лічильника"
# msgstr "E178: "
-#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
msgstr "E179: для -complete потрібний аргумент"
# msgstr "E180: "
-#: ../ex_docmd.c:4635
#, c-format
msgid "E181: Invalid attribute: %s"
msgstr "E181: Неправильний атрибут: %s"
# msgstr "E181: "
-#: ../ex_docmd.c:4678
msgid "E182: Invalid command name"
msgstr "E182: Неправильна назва команди"
# msgstr "E182: "
-#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
msgstr "E183: Команди користувача повинні починатися з великої літери"
-#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
msgstr ""
"E841: Зарезервована назва, не можна використати для користувацької команди"
# msgstr "E183: "
-#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
msgstr "E184: Команду користувача не знайдено: %s"
# msgstr "E179: "
-#: ../ex_docmd.c:5219
#, c-format
msgid "E180: Invalid complete value: %s"
msgstr "E180: Неправильне доповнення: %s"
-#: ../ex_docmd.c:5225
msgid "E468: Completion argument only allowed for custom completion"
msgstr "E468: Аргумент дозволений тільки для користувацького доповнення"
-#: ../ex_docmd.c:5231
msgid "E467: Custom completion requires a function argument"
msgstr "E467: Користувацьке доповнення вимагає аргумент-функцію"
# msgstr "E184: "
-#: ../ex_docmd.c:5257
#, c-format
msgid "E185: Cannot find color scheme '%s'"
msgstr "E185: Не вдалося знайти схему кольорів «%s»"
-#: ../ex_docmd.c:5263
msgid "Greetings, Vim user!"
msgstr "Вітання, користувачу Vim!"
# msgstr "E443: "
-#: ../ex_docmd.c:5431
msgid "E784: Cannot close last tab page"
msgstr "E784: Не можна закрити останню вкладку"
# msgstr "E444: "
-#: ../ex_docmd.c:5462
msgid "Already only one tab page"
msgstr "Вже й так лише одна вкладка"
-#: ../ex_docmd.c:6004
#, c-format
msgid "Tab page %d"
msgstr "Вкладка %d"
-#: ../ex_docmd.c:6295
msgid "No swap file"
msgstr "Немає файлу обміну"
-#: ../ex_docmd.c:6478
msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
msgstr "E747: Не вдалося змінити каталог, буфер має зміни (! щоб не зважати)"
-#: ../ex_docmd.c:6485
msgid "E186: No previous directory"
msgstr "E186: Це вже найперший каталог"
# msgstr "E186: "
-#: ../ex_docmd.c:6530
msgid "E187: Unknown"
msgstr "E187: Невідомо"
-#: ../ex_docmd.c:6610
msgid "E465: :winsize requires two number arguments"
msgstr "E465: :winsize вимагає два числових аргументи"
-#: ../ex_docmd.c:6655
msgid "E188: Obtaining window position not implemented for this platform"
msgstr "E188: Не можна отримати позицію вікна на цій платформі"
-#: ../ex_docmd.c:6662
msgid "E466: :winpos requires two number arguments"
msgstr "E466: :winpos вимагає два числових аргументи"
-#: ../ex_docmd.c:7241
#, c-format
msgid "E739: Cannot create directory: %s"
msgstr "E739: Не вдалося створити каталог: %s"
-#: ../ex_docmd.c:7268
#, c-format
msgid "E189: \"%s\" exists (add ! to override)"
msgstr "E189: Файл «%s» існує (! щоб не зважати)"
# msgstr "E189: "
-#: ../ex_docmd.c:7273
#, c-format
msgid "E190: Cannot open \"%s\" for writing"
msgstr "E190: Не вдалося відкрити «%s» для запису"
# msgstr "E190: "
#. set mark
-#: ../ex_docmd.c:7294
msgid "E191: Argument must be a letter or forward/backward quote"
msgstr "E191: Аргумент має бути літерою, ` або '"
# msgstr "E191: "
-#: ../ex_docmd.c:7333
msgid "E192: Recursive use of :normal too deep"
msgstr "E192: Забагато вкладених :normal"
# msgstr "E193: "
-#: ../ex_docmd.c:7807
msgid "E194: No alternate file name to substitute for '#'"
msgstr "E194: Немає назви вторинного файлу для заміни '#'"
-#: ../ex_docmd.c:7841
msgid "E495: no autocommand file name to substitute for \"<afile>\""
msgstr "E495: Немає назви файлу автокоманди для заміни «<afile>»"
-#: ../ex_docmd.c:7850
msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
msgstr "E496: Немає номера буфера автокоманди для заміни «<abuf>»"
-#: ../ex_docmd.c:7861
msgid "E497: no autocommand match name to substitute for \"<amatch>\""
msgstr "E497: Немає назви збігу автокоманди для заміни «<amatch>»"
-#: ../ex_docmd.c:7870
msgid "E498: no :source file name to substitute for \"<sfile>\""
msgstr "E498: Немає назви файлу :source для заміни «<sfile>»"
-#: ../ex_docmd.c:7876
msgid "E842: no line number to use for \"<slnum>\""
msgstr "E842: немає номера рядка, щоб використати з «<sfile>»"
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
+#, c-format
msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
msgstr "E499: Назва файлу для '%' чи '#' порожня, працює лише з «:p:h»"
-#: ../ex_docmd.c:7905
msgid "E500: Evaluates to an empty string"
msgstr "E500: Результат — порожній рядок"
-#: ../ex_docmd.c:8838
msgid "E195: Cannot open viminfo file for reading"
msgstr "E195: Не вдалося прочитати файл viminfo"
-#: ../ex_eval.c:464
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr "E608: Не можна викидати (:throw) винятки з префіксом 'Vim'"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
#, c-format
msgid "Exception thrown: %s"
msgstr "Виняткова ситуація: %s"
-#: ../ex_eval.c:545
#, c-format
msgid "Exception finished: %s"
msgstr "Виняток закінчено: %s"
-#: ../ex_eval.c:546
#, c-format
msgid "Exception discarded: %s"
msgstr "Виняток скинуто: %s"
-#: ../ex_eval.c:588 ../ex_eval.c:634
#, c-format
msgid "%s, line %<PRId64>"
msgstr "%s, рядок %<PRId64>"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
#, c-format
msgid "Exception caught: %s"
msgstr "Спіймано виняткову ситуацію: %s"
-#: ../ex_eval.c:676
#, c-format
msgid "%s made pending"
msgstr "Очікується %s"
-#: ../ex_eval.c:679
#, c-format
msgid "%s resumed"
msgstr "Відновлено %s"
-#: ../ex_eval.c:683
#, c-format
msgid "%s discarded"
msgstr "Скинуто %s"
-#: ../ex_eval.c:708
msgid "Exception"
msgstr "Виняток"
-#: ../ex_eval.c:713
msgid "Error and interrupt"
msgstr "Помилка, перервано"
# msgstr "E231: "
-#: ../ex_eval.c:715
msgid "Error"
msgstr "Помилка"
#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
msgid "Interrupt"
msgstr "Перервано"
-#: ../ex_eval.c:795
msgid "E579: :if nesting too deep"
msgstr "E579: Занадто багато вкладених :if"
-#: ../ex_eval.c:830
msgid "E580: :endif without :if"
msgstr "E580: :endif без :if"
-#: ../ex_eval.c:873
msgid "E581: :else without :if"
msgstr "E581: :else без :if"
-#: ../ex_eval.c:876
msgid "E582: :elseif without :if"
msgstr "E582: :elseif без :if"
-#: ../ex_eval.c:880
msgid "E583: multiple :else"
msgstr "E583: Не одне :else"
-#: ../ex_eval.c:883
msgid "E584: :elseif after :else"
msgstr "E584: :elseif після :else"
-#: ../ex_eval.c:941
msgid "E585: :while/:for nesting too deep"
msgstr "E585: Забагато вкладених :while/:for"
-#: ../ex_eval.c:1028
msgid "E586: :continue without :while or :for"
msgstr "E586: :continue без :while чи :for"
-#: ../ex_eval.c:1061
msgid "E587: :break without :while or :for"
msgstr "E587: :break без :while чи :for"
-#: ../ex_eval.c:1102
msgid "E732: Using :endfor with :while"
msgstr "E732: Вжито :endfor із :while"
-#: ../ex_eval.c:1104
msgid "E733: Using :endwhile with :for"
msgstr "E733: Вжито :endwhile із :for"
-#: ../ex_eval.c:1247
msgid "E601: :try nesting too deep"
msgstr "E601: Забагато вкладених :try"
-#: ../ex_eval.c:1317
msgid "E603: :catch without :try"
msgstr "E603: :catch без :try"
#. Give up for a ":catch" after ":finally" and ignore it.
#. * Just parse.
-#: ../ex_eval.c:1332
msgid "E604: :catch after :finally"
msgstr "E604: :catch після :finally"
-#: ../ex_eval.c:1451
msgid "E606: :finally without :try"
msgstr "E606: :finally без :try"
#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
msgid "E607: multiple :finally"
msgstr "E607: Не одне :finally"
-#: ../ex_eval.c:1571
msgid "E602: :endtry without :try"
msgstr "E602: :entry без :try"
-#: ../ex_eval.c:2026
msgid "E193: :endfunction not inside a function"
msgstr "E193: :endfunction поза межами функції"
-#: ../ex_getln.c:1643
msgid "E788: Not allowed to edit another buffer now"
msgstr "E788: Зараз не можна редагувати інший буфер"
-#: ../ex_getln.c:1656
msgid "E811: Not allowed to change buffer information now"
msgstr "E811: Зараз не можна змінювати інформацію буфера"
# msgstr "E197: "
-#: ../ex_getln.c:3178
msgid "tagname"
msgstr "назва теґу"
-#: ../ex_getln.c:3181
msgid " kind file\n"
msgstr " тип файлу\n"
-#: ../ex_getln.c:4799
msgid "'history' option is zero"
msgstr "Опція 'history' порожня"
-#: ../ex_getln.c:5046
#, c-format
msgid ""
"\n"
@@ -1994,35 +1566,27 @@ msgstr ""
"\n"
"# Попередні %s (від найновіших):\n"
-#: ../ex_getln.c:5047
msgid "Command Line"
msgstr "команди"
-#: ../ex_getln.c:5048
msgid "Search String"
msgstr "шукані рядки"
-#: ../ex_getln.c:5049
msgid "Expression"
msgstr "вирази"
-#: ../ex_getln.c:5050
msgid "Input Line"
msgstr "введені рядки"
-#: ../ex_getln.c:5117
msgid "E198: cmd_pchar beyond the command length"
msgstr "E198: cmd_pchar поза межами команди"
-#: ../ex_getln.c:5279
msgid "E199: Active window or buffer deleted"
msgstr "E199: Активне вікно або буфер було знищено"
-#: ../file_search.c:203
msgid "E854: path too long for completion"
msgstr "E854: шлях занадто довгий для доповнення"
-#: ../file_search.c:446
#, c-format
msgid ""
"E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -2032,217 +1596,169 @@ msgstr ""
"'%s'."
# msgstr "E343: "
-#: ../file_search.c:1505
#, c-format
msgid "E344: Can't find directory \"%s\" in cdpath"
msgstr "E344: Не вдалося знайти каталог «%s» у cdpath"
# msgstr "E344: "
-#: ../file_search.c:1508
#, c-format
msgid "E345: Can't find file \"%s\" in path"
msgstr "E345: Не вдалося знайти файл «%s» у path"
# msgstr "E345: "
-#: ../file_search.c:1512
#, c-format
msgid "E346: No more directory \"%s\" found in cdpath"
msgstr "E346: У cdpath немає більше каталогу «%s»"
# msgstr "E346: "
-#: ../file_search.c:1515
#, c-format
msgid "E347: No more file \"%s\" found in path"
msgstr "E347: У шляху пошуку більше немає файлів «%s»"
-#: ../fileio.c:137
msgid "E812: Autocommands changed buffer or buffer name"
msgstr "E812: Автокоманди змінили буфер чи його назву"
# msgstr "E199: "
-#: ../fileio.c:368
msgid "Illegal file name"
msgstr "Недозволена назва файлу"
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
msgstr "каталог"
-#: ../fileio.c:397
msgid "is not a file"
msgstr "не файл"
-#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
msgstr "[Новий файл]"
-#: ../fileio.c:511
msgid "[New DIRECTORY]"
msgstr "[Новий каталог]"
-#: ../fileio.c:529 ../fileio.c:532
msgid "[File too big]"
msgstr "[Файл завеликий]"
-#: ../fileio.c:534
msgid "[Permission Denied]"
msgstr "[Відмовлено]"
-#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: Автокоманди *ReadPre унеможливили читання файлу"
# msgstr "E200: "
-#: ../fileio.c:655
msgid "E201: *ReadPre autocommands must not change current buffer"
msgstr "E201: Автокоманди *ReadPre не повинні змінювати цей буфер"
# msgstr "E201: "
-#: ../fileio.c:672
msgid "Nvim: Reading from stdin...\n"
msgstr "Vim: Читається з stdin...\n"
#. Re-opening the original file failed!
-#: ../fileio.c:909
msgid "E202: Conversion made file unreadable!"
msgstr "E202: Конвертація унеможливила читання файлу!"
# msgstr "E202: "
#. fifo or socket
-#: ../fileio.c:1782
msgid "[fifo/socket]"
msgstr "[канал/сокет]"
#. fifo
-#: ../fileio.c:1788
msgid "[fifo]"
msgstr "[канал]"
#. or socket
-#: ../fileio.c:1794
msgid "[socket]"
msgstr "[сокет]"
#. or character special
-#: ../fileio.c:1801
msgid "[character special]"
msgstr "[спец. символьний]"
-#: ../fileio.c:1815
msgid "[CR missing]"
msgstr "[Бракує CR]"
-#: ../fileio.c:1819
msgid "[long lines split]"
msgstr "[Розбито довгі рядки]"
-#: ../fileio.c:1823 ../fileio.c:3512
msgid "[NOT converted]"
msgstr "[НЕ конвертовано]"
-#: ../fileio.c:1826 ../fileio.c:3515
msgid "[converted]"
msgstr "[конвертовано]"
-#: ../fileio.c:1831
#, c-format
msgid "[CONVERSION ERROR in line %<PRId64>]"
msgstr "[ПОМИЛКА КОНВЕРТАЦІЇ у рядку %<PRId64>]"
-#: ../fileio.c:1835
#, c-format
msgid "[ILLEGAL BYTE in line %<PRId64>]"
msgstr "[НЕКОРЕКТНИЙ БАЙТ у рядку %<PRId64>]"
-#: ../fileio.c:1838
msgid "[READ ERRORS]"
msgstr "[ПОМИЛКА ЧИТАННЯ]"
-#: ../fileio.c:2104
msgid "Can't find temp file for conversion"
msgstr "Не вдалося підшукати тимчасовий файл для конвертації"
-#: ../fileio.c:2110
msgid "Conversion with 'charconvert' failed"
msgstr "Конвертація з 'charconvert' не вдалася"
-#: ../fileio.c:2113
msgid "can't read output of 'charconvert'"
msgstr "не вдалося прочитати вивід 'charconvert'"
# msgstr "E217: "
-#: ../fileio.c:2437
msgid "E676: No matching autocommands for acwrite buffer"
msgstr "E676: Немає відповідних автокоманд"
-#: ../fileio.c:2466
msgid "E203: Autocommands deleted or unloaded buffer to be written"
msgstr "E203: Автокоманда знищила або вивантажила буфер, що мав бути записаний"
-#: ../fileio.c:2486
msgid "E204: Autocommand changed number of lines in unexpected way"
msgstr "E204: Автокоманда несподіваним чином змінила кількість рядків"
-#: ../fileio.c:2548 ../fileio.c:2565
msgid "is not a file or writable device"
msgstr "Не придатний для запису"
-#: ../fileio.c:2601
msgid "is read-only (add ! to override)"
msgstr "лише для читання (! щоб не зважати)"
-#: ../fileio.c:2886
msgid "E506: Can't write to backup file (add ! to override)"
msgstr "E506: Не вдалося записати резервний файл (! щоб не зважати)"
-#: ../fileio.c:2898
msgid "E507: Close error for backup file (add ! to override)"
msgstr "E507: Помилка закриття резервного файлу (! щоб не зважати)"
-#: ../fileio.c:2901
msgid "E508: Can't read file for backup (add ! to override)"
msgstr ""
"E508: Не вдалося прочитати файл щоб створити резервну копію (! щоб не "
"зважати)"
-#: ../fileio.c:2923
msgid "E509: Cannot create backup file (add ! to override)"
msgstr "E509: Не вдалося створити резервну копію (! щоб не зважати)"
-#: ../fileio.c:3008
msgid "E510: Can't make backup file (add ! to override)"
msgstr "E510: Не вдалося зробити резервну копію (! щоб не зважати)"
#. Can't write without a tempfile!
-#: ../fileio.c:3121
msgid "E214: Can't find temp file for writing"
msgstr "E214: Не вдалося підшукати тимчасовий файл для запису"
-#: ../fileio.c:3134
msgid "E213: Cannot convert (add ! to write without conversion)"
msgstr "E213: Не вдалося перетворити (! щоб записати без конвертації)"
-#: ../fileio.c:3169
msgid "E166: Can't open linked file for writing"
msgstr "E166: Не вдалося відкрити для запису зв'язаний файл"
-#: ../fileio.c:3173
msgid "E212: Can't open file for writing"
msgstr "E212: Не вдалося відкрити файл для запису"
-#: ../fileio.c:3363
msgid "E667: Fsync failed"
msgstr "E667: Не вдалося виконати fsync"
-#: ../fileio.c:3398
msgid "E512: Close failed"
msgstr "E512: Не вдалося закрити"
-#: ../fileio.c:3436
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: Помилка запису, конвертація не вдалася (скиньте 'fenc')"
-#: ../fileio.c:3441
#, c-format
msgid ""
"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
@@ -2251,56 +1767,43 @@ msgstr ""
"E513: Помилка запису, конвертація не вдалася у рядку %<PRId64> (скиньте "
"'fenc')"
-#: ../fileio.c:3448
msgid "E514: write error (file system full?)"
msgstr "E514: Помилка запису (скінчилось вільне місце?)"
-#: ../fileio.c:3506
msgid " CONVERSION ERROR"
msgstr " ПОМИЛКА КОНВЕРТАЦІЇ"
-#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
msgstr " у рядку %<PRId64>;"
-#: ../fileio.c:3519
msgid "[Device]"
msgstr "[Пристрій]"
-#: ../fileio.c:3522
msgid "[New]"
msgstr "[Новий]"
-#: ../fileio.c:3535
msgid " [a]"
msgstr "[д]"
-#: ../fileio.c:3535
msgid " appended"
msgstr " дописаний"
-#: ../fileio.c:3537
msgid " [w]"
msgstr "[з]"
-#: ../fileio.c:3537
msgid " written"
msgstr " записаний"
-#: ../fileio.c:3579
msgid "E205: Patchmode: can't save original file"
msgstr "E205: Латання: не вдалося зберегти оригінал"
-#: ../fileio.c:3602
msgid "E206: patchmode: can't touch empty original file"
msgstr "E206: Латання: не вдалося створити оригінал"
-#: ../fileio.c:3616
msgid "E207: Can't delete backup file"
msgstr "E207: Не вдалося знищити резервний файл"
-#: ../fileio.c:3672
msgid ""
"\n"
"WARNING: Original file may be lost or damaged\n"
@@ -2308,134 +1811,105 @@ msgstr ""
"\n"
"ЗАСТЕРЕЖЕННЯ: Оригінал, мабуть, втрачений чи пошкоджений\n"
-#: ../fileio.c:3675
msgid "don't quit the editor until the file is successfully written!"
msgstr "Не виходьте з редактора, доки файл не записано!"
-#: ../fileio.c:3795
msgid "[dos]"
msgstr "[dos]"
-#: ../fileio.c:3795
msgid "[dos format]"
msgstr "[формат dos]"
-#: ../fileio.c:3801
msgid "[mac]"
msgstr "[mac]"
-#: ../fileio.c:3801
msgid "[mac format]"
msgstr "[формат mac]"
-#: ../fileio.c:3807
msgid "[unix]"
msgstr "[unix]"
-#: ../fileio.c:3807
msgid "[unix format]"
msgstr "[формат unix]"
-#: ../fileio.c:3831
msgid "1 line, "
msgstr "один рядок, "
-#: ../fileio.c:3833
#, c-format
msgid "%<PRId64> lines, "
msgstr "%<PRId64> рядків, "
-#: ../fileio.c:3836
msgid "1 character"
msgstr "один символ"
-#: ../fileio.c:3838
#, c-format
msgid "%<PRId64> characters"
msgstr "%<PRId64> символів"
-#: ../fileio.c:3849
msgid "[noeol]"
msgstr "[noeol]"
-#: ../fileio.c:3849
msgid "[Incomplete last line]"
msgstr "[Неповний останній рядок]"
#. don't overwrite messages here
#. must give this prompt
#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
msgid "WARNING: The file has been changed since reading it!!!"
msgstr "ЗАСТЕРЕЖЕННЯ: Файл змінився з часу останнього читання!!!"
-#: ../fileio.c:3867
msgid "Do you really want to write to it"
msgstr "Ви справді хочете його переписати??"
-#: ../fileio.c:4648
#, c-format
msgid "E208: Error writing to \"%s\""
msgstr "E208: Помилка запису у «%s»"
-#: ../fileio.c:4655
#, c-format
msgid "E209: Error closing \"%s\""
msgstr "E209: Помилка закриття «%s»"
-#: ../fileio.c:4657
#, c-format
msgid "E210: Error reading \"%s\""
msgstr "E210: Помилка читання «%s»"
-#: ../fileio.c:4883
msgid "E246: FileChangedShell autocommand deleted buffer"
msgstr "E246: Автокоманда FileChangedShell знищила буфер"
-#: ../fileio.c:4894
#, c-format
msgid "E211: File \"%s\" no longer available"
msgstr "E211: Файл «%s» більше не досяжний"
-#: ../fileio.c:4906
#, c-format
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
"well"
msgstr "W12: Застереження: Файл «%s» змінився, але й буфер у Vim також"
-#: ../fileio.c:4907
msgid "See \":help W12\" for more info."
msgstr "Див. «:help W12» для уточнення."
-#: ../fileio.c:4910
#, c-format
msgid "W11: Warning: File \"%s\" has changed since editing started"
msgstr "W11: Застереження: Файл «%s» змінився після початку редагування"
-#: ../fileio.c:4911
msgid "See \":help W11\" for more info."
msgstr "Див. «:help W11» для уточнення."
-#: ../fileio.c:4914
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr "W16: Застереження: Режим файлу «%s» змінився після початку редагування"
-#: ../fileio.c:4915
msgid "See \":help W16\" for more info."
msgstr "Див. «:help W16» для уточнення."
-#: ../fileio.c:4927
#, c-format
msgid "W13: Warning: File \"%s\" has been created after editing started"
msgstr "W13: Застереження: Файл «%s» було створено після початку редагування"
-#: ../fileio.c:4947
msgid "Warning"
msgstr "Застереження"
-#: ../fileio.c:4948
msgid ""
"&OK\n"
"&Load File"
@@ -2443,51 +1917,42 @@ msgstr ""
"&O:Гаразд\n"
"&L:Завантажити"
-#: ../fileio.c:5065
#, c-format
msgid "E462: Could not prepare for reloading \"%s\""
msgstr "E462: Не вдалося підготувати «%s», щоб перечитати"
-#: ../fileio.c:5078
#, c-format
msgid "E321: Could not reload \"%s\""
msgstr "E321: Не вдалося перечитати «%s»"
-#: ../fileio.c:5601
msgid "--Deleted--"
msgstr "--Знищено--"
-#: ../fileio.c:5732
#, c-format
msgid "auto-removing autocommand: %s <buffer=%d>"
msgstr "Автоматичне знищення автокоманди: %s <буфер=%d>"
#. the group doesn't exist
-#: ../fileio.c:5772
#, c-format
msgid "E367: No such group: \"%s\""
msgstr "E367: Немає такої групи: «%s»"
-#: ../fileio.c:5897
#, c-format
msgid "E215: Illegal character after *: %s"
msgstr "E215: Недозволений символ після *: %s"
# msgstr "E215: "
-#: ../fileio.c:5905
#, c-format
msgid "E216: No such event: %s"
msgstr "E216: Немає такої події: %s"
# msgstr "E215: "
-#: ../fileio.c:5907
#, c-format
msgid "E216: No such group or event: %s"
msgstr "E216: Немає такої групи чи події: %s"
# msgstr "E216: "
#. Highlight title
-#: ../fileio.c:6090
msgid ""
"\n"
"--- Auto-Commands ---"
@@ -2495,111 +1960,89 @@ msgstr ""
"\n"
"--- Автокоманди ---"
-#: ../fileio.c:6293
#, c-format
msgid "E680: <buffer=%d>: invalid buffer number "
msgstr "E680: <буфер=%d>: некоректний номер буфера "
-#: ../fileio.c:6370
msgid "E217: Can't execute autocommands for ALL events"
msgstr "E217: Не можу виконувати автокоманди для УСІХ подій"
# msgstr "E217: "
-#: ../fileio.c:6393
msgid "No matching autocommands"
msgstr "Немає відповідних автокоманд"
-#: ../fileio.c:6831
msgid "E218: autocommand nesting too deep"
msgstr "E218: Забагато вкладених автокоманд"
# msgstr "E218: "
-#: ../fileio.c:7143
#, c-format
msgid "%s Auto commands for \"%s\""
msgstr "Автокоманди %s для «%s»"
-#: ../fileio.c:7149
#, c-format
msgid "Executing %s"
msgstr "Виконується %s"
-#: ../fileio.c:7211
#, c-format
msgid "autocommand %s"
msgstr "автокоманда %s"
-#: ../fileio.c:7795
msgid "E219: Missing {."
msgstr "E219: Бракує {."
# msgstr "E219: "
-#: ../fileio.c:7797
msgid "E220: Missing }."
msgstr "E220: Бракує }."
# msgstr "E220: "
-#: ../fold.c:93
msgid "E490: No fold found"
msgstr "E490: Згорток не знайдено"
# msgstr "E349: "
-#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
msgstr "E350: Не вдалося створити згортку методом 'foldmethod'"
-#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
msgstr "E351: Не вдалося знищити згортку методом 'foldmethod'"
-#: ../fold.c:1784
#, c-format
msgid "+--%3ld lines folded "
msgstr "+-- згорнуто %3ld рядків "
#. buffer has already been read
-#: ../getchar.c:273
msgid "E222: Add to read buffer"
msgstr "E222: Додати до буфера читання"
-#: ../getchar.c:2040
msgid "E223: recursive mapping"
msgstr "E223: Заміна рекурсивна"
# msgstr "E223: "
-#: ../getchar.c:2849
#, c-format
msgid "E224: global abbreviation already exists for %s"
msgstr "E224: Загальне скорочення для %s вже існує"
# msgstr "E224: "
-#: ../getchar.c:2852
#, c-format
msgid "E225: global mapping already exists for %s"
msgstr "E225: Загальна заміна для %s вже існує"
# msgstr "E225: "
-#: ../getchar.c:2952
#, c-format
msgid "E226: abbreviation already exists for %s"
msgstr "E226: Вже є скорочення для %s"
# msgstr "E226: "
-#: ../getchar.c:2955
#, c-format
msgid "E227: mapping already exists for %s"
msgstr "E227: Вже є заміна для %s"
# msgstr "E227: "
-#: ../getchar.c:3008
msgid "No abbreviation found"
msgstr "Скорочення не знайдено"
-#: ../getchar.c:3010
msgid "No mapping found"
msgstr "Заміни не знайдено"
-#: ../getchar.c:3974
msgid "E228: makemap: Illegal mode"
msgstr "E228: makemap: Неприпустимий режим"
@@ -2607,7 +2050,6 @@ msgstr "E228: makemap: Неприпустимий режим"
#. key value of 'cedit' option
#. type of cmdline window or 0
#. result of cmdline window or 0
-#: ../globals.h:924
msgid "--No lines in buffer--"
msgstr "--Жодного рядка--"
@@ -2615,680 +2057,526 @@ msgstr "--Жодного рядка--"
#. * The error messages that can be shared are included here.
#. * Excluded are errors that are only used once and debugging messages.
#.
-#: ../globals.h:996
msgid "E470: Command aborted"
msgstr "E470: Команду перервано"
-#: ../globals.h:997
msgid "E471: Argument required"
msgstr "E471: Необхідно вказати аргумент"
-#: ../globals.h:998
msgid "E10: \\ should be followed by /, ? or &"
msgstr "E10: За \\ має йти /, ? або &"
# msgstr "E10: "
-#: ../globals.h:1000
msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
msgstr "E11: Неприпустимо у вікні команд, <CR> виконує, CTRL-C виходить"
-#: ../globals.h:1002
msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
msgstr ""
"E12: Команда не дозволена у exrc/vimrc у пошуку поточного каталогу чи теґу"
-#: ../globals.h:1003
msgid "E171: Missing :endif"
msgstr "E171: Бракує :endif"
-#: ../globals.h:1004
msgid "E600: Missing :endtry"
msgstr "E600: Бракує :endtry"
-#: ../globals.h:1005
msgid "E170: Missing :endwhile"
msgstr "E170: Бракує :endwhile"
-#: ../globals.h:1006
msgid "E170: Missing :endfor"
msgstr "E170: Бракує :endfor"
-#: ../globals.h:1007
msgid "E588: :endwhile without :while"
msgstr "E588: :endwhile без :while"
-#: ../globals.h:1008
msgid "E588: :endfor without :for"
msgstr "E588: :endfor без :for"
-#: ../globals.h:1009
msgid "E13: File exists (add ! to override)"
msgstr "E13: Файл існує (! щоб не зважати)"
-#: ../globals.h:1010
msgid "E472: Command failed"
msgstr "E472: Команда на вдалась"
-#: ../globals.h:1011
msgid "E473: Internal error"
msgstr "E473: Внутрішня помилка"
-#: ../globals.h:1012
msgid "Interrupted"
msgstr "Перервано"
-#: ../globals.h:1013
msgid "E14: Invalid address"
msgstr "E14: Неправильна адреса"
# msgstr "E14: "
-#: ../globals.h:1014
msgid "E474: Invalid argument"
msgstr "E474: Некоректний аргумент"
-#: ../globals.h:1015
#, c-format
msgid "E475: Invalid argument: %s"
msgstr "E475: Некоректний аргумент: %s"
-#: ../globals.h:1016
#, c-format
msgid "E15: Invalid expression: %s"
msgstr "E15: Неправильний вираз: %s"
# msgstr "E15: "
-#: ../globals.h:1017
msgid "E16: Invalid range"
msgstr "E16: Неправильні межі"
# msgstr "E16: "
-#: ../globals.h:1018
msgid "E476: Invalid command"
msgstr "E476: Некоректна команда"
-#: ../globals.h:1019
#, c-format
msgid "E17: \"%s\" is a directory"
msgstr "E17: «%s» — це каталог"
-#: ../globals.h:1020
-#, fuzzy
msgid "E900: Invalid job id"
-msgstr "E49: Некоректний розмір зсуву"
+msgstr "E900: Некоректний ід. завдання"
-#: ../globals.h:1021
msgid "E901: Job table is full"
-msgstr ""
+msgstr "E901: Таблиця завдань заповнена"
-#: ../globals.h:1022
#, c-format
msgid "E902: \"%s\" is not an executable"
-msgstr ""
+msgstr "E902: \"%s\" не можна виконати"
-#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
msgstr "E364: Бібліотечний виклик до «%s()» не вдався"
# msgstr "E18: "
-#: ../globals.h:1026
msgid "E19: Mark has invalid line number"
msgstr "E19: У помітки некоректний номер рядка"
# msgstr "E19: "
-#: ../globals.h:1027
msgid "E20: Mark not set"
msgstr "E20: Помітку не встановлено"
# msgstr "E20: "
-#: ../globals.h:1029
msgid "E21: Cannot make changes, 'modifiable' is off"
msgstr "E21: Зміни не дозволені: вимкнено 'modifiable'"
# msgstr "E21: "
-#: ../globals.h:1030
msgid "E22: Scripts nested too deep"
msgstr "E22: Забагато вкладених скриптів"
# msgstr "E22: "
-#: ../globals.h:1031
msgid "E23: No alternate file"
msgstr "E23: Немає вторинного файлу"
# msgstr "E23: "
-#: ../globals.h:1032
msgid "E24: No such abbreviation"
msgstr "E24: Такого скорочення немає"
# msgstr "E24: "
-#: ../globals.h:1033
msgid "E477: No ! allowed"
msgstr "E477: ! не дозволено"
-#: ../globals.h:1035
msgid "E25: Nvim does not have a built-in GUI"
msgstr "E25: Не можна використати GUI: Не ввімкнено під час компіляції"
# msgstr "E25: "
-#: ../globals.h:1036
#, c-format
msgid "E28: No such highlight group name: %s"
msgstr "E28: Немає такої групи підсвічування: %s"
# msgstr "E28: "
-#: ../globals.h:1037
msgid "E29: No inserted text yet"
msgstr "E29: Текст ще не було додано"
# msgstr "E29: "
-#: ../globals.h:1038
msgid "E30: No previous command line"
msgstr "E30: Ще не було команд"
# msgstr "E30: "
-#: ../globals.h:1039
msgid "E31: No such mapping"
msgstr "E31: Немає такої заміни"
# msgstr "E31: "
-#: ../globals.h:1040
msgid "E479: No match"
msgstr "E479: Жодного збігу"
-#: ../globals.h:1041
#, c-format
msgid "E480: No match: %s"
msgstr "E480: Жодного збігу: %s"
-#: ../globals.h:1042
msgid "E32: No file name"
msgstr "E32: Бракує назви файлу"
# msgstr "E32: "
-#: ../globals.h:1044
msgid "E33: No previous substitute regular expression"
msgstr "E33: Заміна зразків ще не використовувалась"
# msgstr "E33: "
-#: ../globals.h:1045
msgid "E34: No previous command"
msgstr "E34: Команд ще не було"
# msgstr "E34: "
-#: ../globals.h:1046
msgid "E35: No previous regular expression"
msgstr "E35: Зразків пошуку ще не було"
# msgstr "E35: "
-#: ../globals.h:1047
msgid "E481: No range allowed"
msgstr "E481: Не дозволено вказувати межі"
-#: ../globals.h:1048
msgid "E36: Not enough room"
msgstr "E36: Місця не вистачить"
# msgstr "E36: "
-#: ../globals.h:1049
#, c-format
msgid "E482: Can't create file %s"
msgstr "E482: Не вдалося створити файл %s"
-#: ../globals.h:1050
msgid "E483: Can't get temp file name"
msgstr "E483: Не вдалося сформувати назву тимчасового файлу"
-#: ../globals.h:1051
#, c-format
msgid "E484: Can't open file %s"
msgstr "E484: Не вдалося відкрити файл %s"
-#: ../globals.h:1052
#, c-format
msgid "E485: Can't read file %s"
msgstr "E485: Не вдалося прочитати файл %s"
-#: ../globals.h:1054
msgid "E37: No write since last change (add ! to override)"
msgstr "E37: Зміни не було записано (! щоб не зважати)"
-#: ../globals.h:1055
-#, fuzzy
msgid "E37: No write since last change"
-msgstr "[Зміни не записано]\n"
+msgstr "E37: Не записано після останніх змін"
-#: ../globals.h:1056
msgid "E38: Null argument"
msgstr "E38: Відсутній аргумент"
-#: ../globals.h:1057
msgid "E39: Number expected"
msgstr "E39: Очікується число"
-#: ../globals.h:1058
#, c-format
msgid "E40: Can't open errorfile %s"
msgstr "E40: Не вдалося відкрити файл помилок %s"
-#: ../globals.h:1059
msgid "E41: Out of memory!"
msgstr "E41: Забракло пам'яті!"
-#: ../globals.h:1060
msgid "Pattern not found"
msgstr "Зразок не знайдено"
-#: ../globals.h:1061
#, c-format
msgid "E486: Pattern not found: %s"
msgstr "E486: Зразок не знайдено: %s"
-#: ../globals.h:1062
msgid "E487: Argument must be positive"
msgstr "E487: Аргумент має бути додатний"
-#: ../globals.h:1064
msgid "E459: Cannot go back to previous directory"
msgstr "E459: Не вдалося перейти до попереднього каталогу"
-#: ../globals.h:1066
msgid "E42: No Errors"
msgstr "E42: Жодної помилки"
-#: ../globals.h:1067
msgid "E776: No location list"
msgstr "E776: Немає списку місць"
-#: ../globals.h:1068
msgid "E43: Damaged match string"
msgstr "E43: Текст збігу пошкоджено"
-#: ../globals.h:1069
msgid "E44: Corrupted regexp program"
msgstr "E44: Зіпсована програма регулярних виразів"
-#: ../globals.h:1071
msgid "E45: 'readonly' option is set (add ! to override)"
msgstr "E45: Встановлено опцію 'readonly' (! щоб не зважати)"
-#: ../globals.h:1073
#, c-format
msgid "E46: Cannot change read-only variable \"%s\""
msgstr "E46: Змінна тільки для читання: «%s»"
-#: ../globals.h:1075
#, c-format
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr "E794: Не можна встановити змінну у пісочниці: «%s»"
-#: ../globals.h:1076
msgid "E47: Error while reading errorfile"
msgstr "E47: Помилка читання файлу помилок"
-#: ../globals.h:1078
msgid "E48: Not allowed in sandbox"
msgstr "E48: На дозволено у пісочниці"
-#: ../globals.h:1080
msgid "E523: Not allowed here"
msgstr "E523: Не дозволено тут"
-#: ../globals.h:1082
msgid "E359: Screen mode setting not supported"
msgstr "E359: Режим екрану не підтримується"
-#: ../globals.h:1083
msgid "E49: Invalid scroll size"
msgstr "E49: Некоректний розмір зсуву"
-#: ../globals.h:1084
msgid "E91: 'shell' option is empty"
msgstr "E91: Опція 'shell' порожня"
# msgstr "E254: "
-#: ../globals.h:1085
msgid "E255: Couldn't read in sign data!"
msgstr "E255: Не можна зчитати дані напису!"
-#: ../globals.h:1086
msgid "E72: Close error on swap file"
msgstr "E72: Помилка під час закриття файлу обміну"
-#: ../globals.h:1087
msgid "E73: tag stack empty"
msgstr "E73: Стек теґів порожній"
-#: ../globals.h:1088
msgid "E74: Command too complex"
msgstr "E74: Занадто складна команда"
-#: ../globals.h:1089
msgid "E75: Name too long"
msgstr "E75: Задовге ім'я"
-#: ../globals.h:1090
msgid "E76: Too many ["
msgstr "E76: Забагато '['"
-#: ../globals.h:1091
msgid "E77: Too many file names"
msgstr "E77: Забагато назв файлів"
-#: ../globals.h:1092
msgid "E488: Trailing characters"
msgstr "E488: Надлишкові символи"
-#: ../globals.h:1093
msgid "E78: Unknown mark"
msgstr "E78: Невідома помітка"
-#: ../globals.h:1094
msgid "E79: Cannot expand wildcards"
msgstr "E79: Не вдалося розкрити шаблон"
-#: ../globals.h:1096
msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
msgstr "E591: 'winheight' не може бути меншим за 'winminheight'"
-#: ../globals.h:1098
msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
msgstr "E592: 'winwidth' не може бути меншим за 'winminwidth'"
# msgstr "E79: "
-#: ../globals.h:1099
msgid "E80: Error while writing"
msgstr "E80: Помилка під час запису"
-#: ../globals.h:1100
msgid "Zero count"
msgstr "Нульова кількість"
-#: ../globals.h:1101
msgid "E81: Using <SID> not in a script context"
msgstr "E81: <SID> використовується не в контексті скрипту"
-#: ../globals.h:1102
#, c-format
msgid "E685: Internal error: %s"
msgstr "E685: Внутрішня помилка: %s"
-#: ../globals.h:1104
msgid "E363: pattern uses more memory than 'maxmempattern'"
msgstr "E363: Зразок використовує більше, ніж 'maxmempattern', пам'яті"
-#: ../globals.h:1105
msgid "E749: empty buffer"
msgstr "E749: Порожній буфер"
-#: ../globals.h:1108
msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: Некоректний зразок для пошуку чи роздільник"
-#: ../globals.h:1109
msgid "E139: File is loaded in another buffer"
msgstr "E139: Файл уже завантажено в інший буфер"
# msgstr "E235: "
-#: ../globals.h:1110
#, c-format
msgid "E764: Option '%s' is not set"
msgstr "E764: Опція '%s' не встановлена"
-#: ../globals.h:1111
msgid "E850: Invalid register name"
msgstr "E850: Неправильна назва регістру"
-#: ../globals.h:1114
msgid "search hit TOP, continuing at BOTTOM"
msgstr "Пошук дійшов до ПОЧАТКУ, продовжується з КІНЦЯ"
-#: ../globals.h:1115
msgid "search hit BOTTOM, continuing at TOP"
msgstr "Пошук дійшов до КІНЦЯ, продовжується з ПОЧАТКУ"
-#: ../hardcopy.c:240
msgid "E550: Missing colon"
msgstr "E550: Пропущено двокрапку"
# msgstr "E347: "
-#: ../hardcopy.c:252
msgid "E551: Illegal component"
msgstr "E551: Некоректний компонент"
-#: ../hardcopy.c:259
msgid "E552: digit expected"
msgstr "E552: очікується цифра"
-#: ../hardcopy.c:473
#, c-format
msgid "Page %d"
msgstr "Сторінка %d"
-#: ../hardcopy.c:597
msgid "No text to be printed"
msgstr "Нічого друкувати"
-#: ../hardcopy.c:668
#, c-format
msgid "Printing page %d (%d%%)"
msgstr "Друкується сторінка %d (%d%%)"
-#: ../hardcopy.c:680
#, c-format
msgid " Copy %d of %d"
msgstr " Копія %d з %d"
-#: ../hardcopy.c:733
#, c-format
msgid "Printed: %s"
msgstr "Надруковано: %s"
-#: ../hardcopy.c:740
msgid "Printing aborted"
msgstr "Друк перервано"
-#: ../hardcopy.c:1365
msgid "E455: Error writing to PostScript output file"
msgstr "E455: Не вдалося записати вихідний файл PostScript"
-#: ../hardcopy.c:1747
#, c-format
msgid "E624: Can't open file \"%s\""
msgstr "E624: Не вдалося відкрити файл «%s»"
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
#, c-format
msgid "E457: Can't read PostScript resource file \"%s\""
msgstr "E457: Не вдалося прочитати файл ресурсів PostScript «%s»"
-#: ../hardcopy.c:1772
#, c-format
msgid "E618: file \"%s\" is not a PostScript resource file"
msgstr "E618: «%s» не є файлом ресурсів PostScript"
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
#, c-format
msgid "E619: file \"%s\" is not a supported PostScript resource file"
msgstr "E619: «%s» не є підтримуваним файлом ресурсів PostScript"
-#: ../hardcopy.c:1856
#, c-format
msgid "E621: \"%s\" resource file has wrong version"
msgstr "E621: Неправильна версія файлу ресурсів «%s»"
-#: ../hardcopy.c:2225
msgid "E673: Incompatible multi-byte encoding and character set."
msgstr "E673: Несумісні багатобайтове кодування й набір символів."
-#: ../hardcopy.c:2238
msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
msgstr ""
"E674: printmbcharset не може бути порожнім з багатобайтовим кодуванням."
-#: ../hardcopy.c:2254
msgid "E675: No default font specified for multi-byte printing."
msgstr "E675: Не зазначено шрифт для багатобайтового друку."
-#: ../hardcopy.c:2426
msgid "E324: Can't open PostScript output file"
msgstr "E324: Не вдалося відкрити файл PostScript для виводу"
-#: ../hardcopy.c:2458
#, c-format
msgid "E456: Can't open file \"%s\""
msgstr "E456: Не вдалося відкрити файл «%s»"
-#: ../hardcopy.c:2583
msgid "E456: Can't find PostScript resource file \"prolog.ps\""
msgstr "E456: Не вдалося знайти файл ресурсів PostScript «prolog.ps»"
-#: ../hardcopy.c:2593
msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
msgstr "E456: Не вдалося знайти файл ресурсів PostScript «cidfont.ps»"
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
#, c-format
msgid "E456: Can't find PostScript resource file \"%s.ps\""
msgstr "E456: Не вдалося знайти файл ресурсів PostScript «%s.ps»"
-#: ../hardcopy.c:2654
#, c-format
msgid "E620: Unable to convert to print encoding \"%s\""
msgstr "E620: Не вдалося перетворити до кодування друку «%s»"
-#: ../hardcopy.c:2877
msgid "Sending to printer..."
msgstr "Відсилається на принтер..."
-#: ../hardcopy.c:2881
msgid "E365: Failed to print PostScript file"
msgstr "E365: Не вдалося надрукувати файл PostScript"
-#: ../hardcopy.c:2883
msgid "Print job sent."
msgstr "Завдання друку відіслано."
# msgstr "E255: "
-#: ../if_cscope.c:85
msgid "Add a new database"
msgstr "Додати нову базу даних"
-#: ../if_cscope.c:87
msgid "Query for a pattern"
msgstr "Запит за зразком"
-#: ../if_cscope.c:89
msgid "Show this message"
msgstr "Показати це повідомлення"
-#: ../if_cscope.c:91
msgid "Kill a connection"
msgstr "Знищити з'єднання"
-#: ../if_cscope.c:93
msgid "Reinit all connections"
msgstr "Перезапустити усі з'єднання"
-#: ../if_cscope.c:95
msgid "Show connections"
msgstr "Показати з'єднання"
-#: ../if_cscope.c:101
#, c-format
msgid "E560: Usage: cs[cope] %s"
msgstr "E560: Використання: cs[cope] %s"
-#: ../if_cscope.c:225
msgid "This cscope command does not support splitting the window.\n"
msgstr "Ця команда cscope не вміє ділити вікно.\n"
-#: ../if_cscope.c:266
msgid "E562: Usage: cstag <ident>"
msgstr "E562: Використання: cstag <ідентиф-ор>"
-#: ../if_cscope.c:313
msgid "E257: cstag: tag not found"
msgstr "E257: cstag: теґ не знайдено"
# msgstr "E257: "
-#: ../if_cscope.c:461
#, c-format
msgid "E563: stat(%s) error: %d"
msgstr "E563: stat(%s) помилка: %d"
-#: ../if_cscope.c:551
#, c-format
msgid "E564: %s is not a directory or a valid cscope database"
msgstr "E564: %s не є ні каталогом, ні базою даних cscope"
-#: ../if_cscope.c:566
#, c-format
msgid "Added cscope database %s"
msgstr "Додано базу даних cscope %s"
-#: ../if_cscope.c:616
#, c-format
msgid "E262: error reading cscope connection %<PRId64>"
msgstr "E262: Помилка читання зі з'єднання cscope %<PRId64>"
-#: ../if_cscope.c:711
msgid "E561: unknown cscope search type"
msgstr "E561: Невідомий тип пошуку cscope"
-#: ../if_cscope.c:752 ../if_cscope.c:789
msgid "E566: Could not create cscope pipes"
msgstr "E566: Не вдалося створити канали до cscope"
-#: ../if_cscope.c:767
msgid "E622: Could not fork for cscope"
msgstr "E622: Не вдалося розділити процес для cscope"
-#: ../if_cscope.c:849
msgid "cs_create_connection setpgid failed"
msgstr "cs_create_connection: помилка setpgid"
-#: ../if_cscope.c:853 ../if_cscope.c:889
msgid "cs_create_connection exec failed"
msgstr "cs_create_connection: помилка під час виконання"
-#: ../if_cscope.c:863 ../if_cscope.c:902
msgid "cs_create_connection: fdopen for to_fp failed"
msgstr "cs_create_connection: fdopen для to_fp не вдався"
-#: ../if_cscope.c:865 ../if_cscope.c:906
msgid "cs_create_connection: fdopen for fr_fp failed"
msgstr "cs_create_connection: fdopen для fr_fp не вдався"
-#: ../if_cscope.c:890
msgid "E623: Could not spawn cscope process"
msgstr "E623: Не вдалося створити процес cscope"
-#: ../if_cscope.c:932
msgid "E567: no cscope connections"
msgstr "E567: жодного з'єднання із cscope"
-#: ../if_cscope.c:1009
#, c-format
msgid "E469: invalid cscopequickfix flag %c for %c"
msgstr "E469: Некоректний прапорець cscopequickfix %c для %c"
# msgstr "E258: "
-#: ../if_cscope.c:1058
#, c-format
msgid "E259: no matches found for cscope query %s of %s"
msgstr "E259: Для запиту cscope %s з %s нічого не знайдено"
# msgstr "E259: "
-#: ../if_cscope.c:1142
msgid "cscope commands:\n"
msgstr "Команди cscope:\n"
-#: ../if_cscope.c:1150
#, c-format
msgid "%-5s: %s%*s (Usage: %s)"
msgstr "%-5s: %s%*s (Використання: %s)"
-#: ../if_cscope.c:1155
msgid ""
"\n"
" c: Find functions calling this function\n"
@@ -3310,32 +2598,26 @@ msgstr ""
" s: Знайти цей символ C\n"
" t: Знайти цей текст\n"
-#: ../if_cscope.c:1226
msgid "E568: duplicate cscope database not added"
msgstr "E568: Повторна база даних cscope не додана"
# msgstr "E260: "
-#: ../if_cscope.c:1335
#, c-format
msgid "E261: cscope connection %s not found"
msgstr "E261: З'єднання з cscope %s не знайдено"
-#: ../if_cscope.c:1364
#, c-format
msgid "cscope connection %s closed"
msgstr "З'єднання з cscope %s закінчено"
#. should not reach here
-#: ../if_cscope.c:1486
msgid "E570: fatal error in cs_manage_matches"
msgstr "E570: Фатальна помилка в cs_manage_matches"
-#: ../if_cscope.c:1693
#, c-format
msgid "Cscope tag: %s"
msgstr "Теґ cscope: %s"
-#: ../if_cscope.c:1711
msgid ""
"\n"
" # line"
@@ -3343,89 +2625,69 @@ msgstr ""
"\n"
" # рядок"
-#: ../if_cscope.c:1713
msgid "filename / context / line\n"
msgstr "файл / контекст / рядок\n"
-#: ../if_cscope.c:1809
#, c-format
msgid "E609: Cscope error: %s"
msgstr "E609: Помилка cscope: %s"
-#: ../if_cscope.c:2053
msgid "All cscope databases reset"
msgstr "Усі бази даних cscope перезавантажено"
-#: ../if_cscope.c:2123
msgid "no cscope connections\n"
msgstr "Жодного з'єднання з cscope\n"
-#: ../if_cscope.c:2126
msgid " # pid database name prepend path\n"
msgstr " # pid назва бази даних шлях\n"
-#: ../main.c:144
msgid "Unknown option argument"
msgstr "Невідомий аргумент опції"
-#: ../main.c:146
msgid "Too many edit arguments"
msgstr "Забагато аргументів"
-#: ../main.c:148
msgid "Argument missing after"
msgstr "Пропущено аргумент після"
-#: ../main.c:150
msgid "Garbage after option argument"
msgstr "Сміття після аргументу опції"
-#: ../main.c:152
msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
msgstr "Забагато аргументів у «+команда», «-c команда» або «--cmd команда»"
# msgstr "E14: "
-#: ../main.c:154
msgid "Invalid argument for"
msgstr "Неправильний аргумент у"
-#: ../main.c:294
#, c-format
msgid "%d files to edit\n"
msgstr "%d файли(ів)\n"
-#: ../main.c:1342
msgid "Attempt to open script file again: \""
msgstr "Спроба повторно відкрити скрипт: \""
-#: ../main.c:1350
msgid "Cannot open for reading: \""
msgstr "Не вдалося прочитати: \""
-#: ../main.c:1393
msgid "Cannot open for script output: \""
msgstr "Не вдалося відкрити як вихідний файл: \""
-#: ../main.c:1622
msgid "Vim: Warning: Output is not to a terminal\n"
msgstr "Vim: Застереження: Вивід не у термінал\n"
-#: ../main.c:1624
msgid "Vim: Warning: Input is not from a terminal\n"
msgstr "Vim: Застереження: Уведення не з терміналу\n"
#. just in case..
-#: ../main.c:1891
msgid "pre-vimrc command line"
msgstr "команди перед vimrc"
-#: ../main.c:1964
#, c-format
msgid "E282: Cannot read from \"%s\""
msgstr "E282: Не вдалося прочитати з «%s»"
# msgstr "E282: "
-#: ../main.c:2149
msgid ""
"\n"
"More info with: \"vim -h\"\n"
@@ -3433,23 +2695,18 @@ msgstr ""
"\n"
"Дізнайтеся більше: «vim -h»\n"
-#: ../main.c:2178
msgid "[file ..] edit specified file(s)"
msgstr "[файл ..] редагувати вказані файли"
-#: ../main.c:2179
msgid "- read text from stdin"
msgstr "- читати текст з stdin"
-#: ../main.c:2180
msgid "-t tag edit file where tag is defined"
msgstr "-t помітка перейти до теґу"
-#: ../main.c:2181
msgid "-q [errorfile] edit file with first error"
msgstr "-q [файл] перейти до першої помилки"
-#: ../main.c:2187
msgid ""
"\n"
"\n"
@@ -3459,11 +2716,9 @@ msgstr ""
"\n"
"Вжиток:"
-#: ../main.c:2189
msgid " vim [arguments] "
msgstr " vim [аргументи] "
-#: ../main.c:2193
msgid ""
"\n"
" or:"
@@ -3471,7 +2726,6 @@ msgstr ""
"\n"
" або:"
-#: ../main.c:2196
msgid ""
"\n"
"\n"
@@ -3481,192 +2735,146 @@ msgstr ""
"\n"
"Аргументи:\n"
-#: ../main.c:2197
msgid "--\t\t\tOnly file names after this"
msgstr "--\t\t\tЛише назви файлів після цього"
-#: ../main.c:2199
msgid "--literal\t\tDon't expand wildcards"
msgstr "--literal\t\tНе розкривати шаблони"
-#: ../main.c:2201
msgid "-v\t\t\tVi mode (like \"vi\")"
msgstr "-v\t\t\tРежим Vi (ніби «vi»)"
-#: ../main.c:2202
msgid "-e\t\t\tEx mode (like \"ex\")"
msgstr "-e\t\t\tРежим Ex (ніби «ex»)"
-#: ../main.c:2203
msgid "-E\t\t\tImproved Ex mode"
msgstr "-E\t\t\tПокращений режим Ex"
-#: ../main.c:2204
msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
msgstr "-s\t\t\tМовчазний (пакетний) режим (лише для «ex»)"
-#: ../main.c:2205
msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
msgstr "-d\t\t\tРежим порівняння (ніби «vimdiff»)"
-#: ../main.c:2206
msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
msgstr "-y\t\t\tПростий режим (ніби «evim», без режимів)"
-#: ../main.c:2207
msgid "-R\t\t\tReadonly mode (like \"view\")"
msgstr "-R\t\t\tРежим перегляду (ніби «view»)"
-#: ../main.c:2208
msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
msgstr "-Z\t\t\tОбмежений режим (ніби «rvim»)"
-#: ../main.c:2209
msgid "-m\t\t\tModifications (writing files) not allowed"
msgstr "-m\t\t\tЗміни (запис файлів) не дозволено"
-#: ../main.c:2210
msgid "-M\t\t\tModifications in text not allowed"
msgstr "-M\t\t\tЗміни в тексті файлів не дозволено"
-#: ../main.c:2211
msgid "-b\t\t\tBinary mode"
msgstr "-b\t\t\tДвійковий режим"
-#: ../main.c:2212
msgid "-l\t\t\tLisp mode"
msgstr "-l\t\t\tРежим lisp"
-#: ../main.c:2213
msgid "-C\t\t\tCompatible with Vi: 'compatible'"
msgstr "-C\t\t\tСумісний з Vi режим: 'compatible'"
-#: ../main.c:2214
msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
msgstr "-N\t\t\tНе зовсім сумісний з Vi режим: 'nocompatible'"
-#: ../main.c:2215
msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
msgstr "-V[N][файл]\t\tБільше повідомлень [рівень N] [файл журн. повідомлень]"
-#: ../main.c:2216
msgid "-D\t\t\tDebugging mode"
msgstr "-D\t\t\tРежим налагодження"
-#: ../main.c:2217
msgid "-n\t\t\tNo swap file, use memory only"
msgstr "-n\t\t\tНе використовувати файл обміну, тримати усе в пам'яті"
-#: ../main.c:2218
msgid "-r\t\t\tList swap files and exit"
msgstr "-r\t\t\tПоказати файли обміну і вийти"
-#: ../main.c:2219
msgid "-r (with file name)\tRecover crashed session"
msgstr "-r (назва файлу)\tВідновити аварійно закінчений сеанс"
-#: ../main.c:2220
msgid "-L\t\t\tSame as -r"
msgstr "-L\t\t\tТе саме, що й -r"
-#: ../main.c:2221
msgid "-A\t\t\tstart in Arabic mode"
msgstr "-A\t\t\tЗапустити в режимі арабської мови"
-#: ../main.c:2222
msgid "-H\t\t\tStart in Hebrew mode"
msgstr "-H\t\t\tЗапустити в режимі івриту"
-#: ../main.c:2223
msgid "-F\t\t\tStart in Farsi mode"
msgstr "-F\t\t\tЗапустити в режимі перської мови"
-#: ../main.c:2224
msgid "-T <terminal>\tSet terminal type to <terminal>"
msgstr "-T <термінал>\tВстановити тип терміналу у <термінал>"
-#: ../main.c:2225
msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
msgstr "-u <vimrc>\t\tВикористати поданий файл замість .vimrc"
-#: ../main.c:2226
msgid "--noplugin\t\tDon't load plugin scripts"
msgstr "--noplugin\t\tНе вантажити скрипти доповнення"
-#: ../main.c:2227
msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
msgstr "-p[N]\t\tВідкрити N вкладок (або по одній для кожного файлу)"
-#: ../main.c:2228
msgid "-o[N]\t\tOpen N windows (default: one for each file)"
msgstr "-o[N]\t\tВідкрити N вікон (або по одному для кожного файлу)"
-#: ../main.c:2229
msgid "-O[N]\t\tLike -o but split vertically"
msgstr "-O[N]\t\tНіби -o, але поділити вікна вертикально"
-#: ../main.c:2230
msgid "+\t\t\tStart at end of file"
msgstr "+\t\t\tРозпочати в кінці файлу"
-#: ../main.c:2231
msgid "+<lnum>\t\tStart at line <lnum>"
msgstr "+<рядок>\t\tРозпочати у вказаному <рядку>"
-#: ../main.c:2232
msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
msgstr "--cmd <команда>\tВиконати <команду> перед завантаженням vimrc"
-#: ../main.c:2233
msgid "-c <command>\t\tExecute <command> after loading the first file"
msgstr "-c <команда>\t\tВиконати <команду> після завантаження першого файлу"
-#: ../main.c:2235
msgid "-S <session>\t\tSource file <session> after loading the first file"
msgstr "-S <сеанс>\t\tВиконати поданий файл після першого завантаженого файлу"
-#: ../main.c:2236
msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
msgstr "-s <скрипт>\t\tЗчитати команди нормального режиму з файлу <скрипт>"
-#: ../main.c:2237
msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
msgstr "-w <скрипт>\t\tДописати усі набрані команди до файлу <скрипт>"
-#: ../main.c:2238
msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
msgstr "-w <скрипт>\t\tЗаписати усі набрані команди у файл <скрипт>"
-#: ../main.c:2240
msgid "--startuptime <file>\tWrite startup timing messages to <file>"
msgstr ""
"--startuptime <файл>\tЗаписати запускні повідомлення з часовими відмітками "
"до <файлу>"
-#: ../main.c:2242
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
msgstr "-i <viminfo>\t\tВикористати <viminfo> замість .viminfo"
-#: ../main.c:2243
msgid "-h or --help\tPrint Help (this message) and exit"
msgstr "-h чи --help\tНадрукувати це повідомлення і вийти"
-#: ../main.c:2244
msgid "--version\t\tPrint version information and exit"
msgstr "--version\t\tНадрукувати інформацію про версію програми і вийти"
-#: ../mark.c:676
msgid "No marks set"
msgstr "Не встановлено жодної помітки"
-#: ../mark.c:678
#, c-format
msgid "E283: No marks matching \"%s\""
msgstr "E283: Помітку «%s» не знайдено"
# msgstr "E283: "
#. Highlight title
-#: ../mark.c:687
msgid ""
"\n"
"mark line col file/text"
@@ -3675,7 +2883,6 @@ msgstr ""
"пом. ряд. кол. файл/текст"
#. Highlight title
-#: ../mark.c:789
msgid ""
"\n"
" jump line col file/text"
@@ -3685,7 +2892,6 @@ msgstr ""
# msgstr "E283: "
#. Highlight title
-#: ../mark.c:831
msgid ""
"\n"
"change line col text"
@@ -3694,7 +2900,6 @@ msgstr ""
"змінити ряд. стовп. текст"
# TODO
-#: ../mark.c:1238
msgid ""
"\n"
"# File marks:\n"
@@ -3703,7 +2908,6 @@ msgstr ""
"# Помітки:\n"
#. Write the jumplist with -'
-#: ../mark.c:1271
msgid ""
"\n"
"# Jumplist (newest first):\n"
@@ -3712,7 +2916,6 @@ msgstr ""
"# Список переходів (від найновіших):\n"
# TODO
-#: ../mark.c:1352
msgid ""
"\n"
"# History of marks within files (newest to oldest):\n"
@@ -3720,90 +2923,71 @@ msgstr ""
"\n"
"# Попередні помітки в файлах (від найновіших):\n"
-#: ../mark.c:1431
msgid "Missing '>'"
msgstr "Пропущено '>'"
# msgstr "E292: "
-#: ../memfile.c:426
msgid "E293: block was not locked"
msgstr "E293: Блок не було зафіксовано"
# msgstr "E293: "
-#: ../memfile.c:799
msgid "E294: Seek error in swap file read"
msgstr "E294: Помилка зміни позиції у файлі обміну"
-#: ../memfile.c:803
msgid "E295: Read error in swap file"
msgstr "E295: Помилка зчитування файлу обміну"
-#: ../memfile.c:849
msgid "E296: Seek error in swap file write"
msgstr "E296: Помилка зміни позиції під час запису у файл обміну"
-#: ../memfile.c:865
msgid "E297: Write error in swap file"
msgstr "E297: Помилка запису файлу обміну"
-#: ../memfile.c:1036
msgid "E300: Swap file already exists (symlink attack?)"
msgstr "E300: Файл обміну вже існує (атака символьним посиланням?)"
-#: ../memline.c:318
msgid "E298: Didn't get block nr 0?"
msgstr "E298: Немає блоку 0?"
-#: ../memline.c:361
msgid "E298: Didn't get block nr 1?"
msgstr "E298: Немає блоку 1?"
# msgstr "E298: "
-#: ../memline.c:377
msgid "E298: Didn't get block nr 2?"
msgstr "E298: Немає блоку 2?"
#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
msgid "E301: Oops, lost the swap file!!!"
msgstr "E301: Ой, втрачено файл обміну!!!"
# msgstr "E301: "
-#: ../memline.c:477
msgid "E302: Could not rename swap file"
msgstr "E302: Не вдалося перейменувати файлу обміну"
# msgstr "E302: "
-#: ../memline.c:554
#, c-format
msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
msgstr "E303: Не вдалося прочитати файл обміну для «%s», відновлення неможливе"
-#: ../memline.c:666
msgid "E304: ml_upd_block0(): Didn't get block 0??"
msgstr "E304: ml_upd_block0(): Немає блоку 0??"
#. no swap files found
-#: ../memline.c:830
#, c-format
msgid "E305: No swap file found for %s"
msgstr "E305: Не знайдено файлу обміну для %s"
# msgstr "E305: "
-#: ../memline.c:839
msgid "Enter number of swap file to use (0 to quit): "
msgstr "Введіть номер файлу обміну, котрий використати, (0 для виходу):"
-#: ../memline.c:879
#, c-format
msgid "E306: Cannot open %s"
msgstr "E306: Не вдалося відкрити %s"
-#: ../memline.c:897
msgid "Unable to read block 0 from "
msgstr "Не вдалося прочитати блок 0 з "
-#: ../memline.c:900
msgid ""
"\n"
"Maybe no changes were made or Vim did not update the swap file."
@@ -3811,28 +2995,22 @@ msgstr ""
"\n"
"Напевно, змін не було, або Vim не поновив файл обміну."
-#: ../memline.c:909
msgid " cannot be used with this version of Vim.\n"
msgstr " не можна використати з цією версією Vim.\n"
-#: ../memline.c:911
msgid "Use Vim version 3.0.\n"
msgstr "Знайдіть Vim 3.0\n"
-#: ../memline.c:916
#, c-format
msgid "E307: %s does not look like a Vim swap file"
msgstr "E307: %s не схоже на файл обміну Vim"
-#: ../memline.c:922
msgid " cannot be used on this computer.\n"
msgstr " не можна використати на цьому комп'ютері.\n"
-#: ../memline.c:924
msgid "The file was created on "
msgstr "Файл було створено на "
-#: ../memline.c:928
msgid ""
",\n"
"or the file has been damaged."
@@ -3840,89 +3018,70 @@ msgstr ""
",\n"
"або файл було пошкоджено."
-#: ../memline.c:945
msgid " has been damaged (page size is smaller than minimum value).\n"
msgstr " пошкоджений (розмір сторінки менший мінімального значення).\n"
-#: ../memline.c:974
#, c-format
msgid "Using swap file \"%s\""
msgstr "Використовується файл обміну «%s»"
-#: ../memline.c:980
#, c-format
msgid "Original file \"%s\""
msgstr "Початковий файл «%s»"
-#: ../memline.c:995
msgid "E308: Warning: Original file may have been changed"
msgstr "E308: Застереження: Можливо, початковий файл було змінено"
# msgstr "E308: "
-#: ../memline.c:1061
#, c-format
msgid "E309: Unable to read block 1 from %s"
msgstr "E309: Не вдалося прочитати блок 1 з %s"
# msgstr "E309: "
-#: ../memline.c:1065
msgid "???MANY LINES MISSING"
msgstr "??? БРАКУЄ БАГАТЬОХ РЯДКІВ"
-#: ../memline.c:1076
msgid "???LINE COUNT WRONG"
msgstr "??? НЕПРАВИЛЬНА КІЛЬКІСТЬ РЯДКІВ"
-#: ../memline.c:1082
msgid "???EMPTY BLOCK"
msgstr "??? ПОРОЖНІЙ БЛОК"
-#: ../memline.c:1103
msgid "???LINES MISSING"
msgstr "??? ПРОПУЩЕНІ РЯДКИ"
-#: ../memline.c:1128
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr "E310: Ідентифікатор блоку 1 неправильний (%s не є файлом обміну?)"
# msgstr "E310: "
-#: ../memline.c:1133
msgid "???BLOCK MISSING"
msgstr "??? ПРОПУЩЕНО БЛОК"
-#: ../memline.c:1147
msgid "??? from here until ???END lines may be messed up"
msgstr "??? звідси і до `??? КІНЕЦЬ' рядки, можливо, сплутані"
-#: ../memline.c:1164
msgid "??? from here until ???END lines may have been inserted/deleted"
msgstr "??? звідси і до `??? КІНЕЦЬ' рядки, можливо, були додані/знищені"
-#: ../memline.c:1181
msgid "???END"
msgstr "??? КІНЕЦЬ"
-#: ../memline.c:1238
msgid "E311: Recovery Interrupted"
msgstr "E311: Відновлення перервано"
-#: ../memline.c:1243
msgid ""
"E312: Errors detected while recovering; look for lines starting with ???"
msgstr ""
"E312: Під час відновлення знайдено помилки. Перегляньте рядки, що "
"починаються з ???"
-#: ../memline.c:1245
msgid "See \":help E312\" for more information."
msgstr "Див. «:help E312» для уточнення."
-#: ../memline.c:1249
msgid "Recovery completed. You should check if everything is OK."
msgstr "Відновлення закінчено, перевірте чи все гаразд."
-#: ../memline.c:1251
msgid ""
"\n"
"(You might want to write out this file under another name\n"
@@ -3930,15 +3089,12 @@ msgstr ""
"\n"
"(Можливо, потрібно записати цей файл під іншою назвою\n"
-#: ../memline.c:1252
msgid "and run diff with the original file to check for changes)"
msgstr "і запустити diff з оригіналом щоб перевірити зміни)"
-#: ../memline.c:1254
msgid "Recovery completed. Buffer contents equals file contents."
msgstr "Відновлення закінчено. Вміст буфера співпадає зі вмістом файлу."
-#: ../memline.c:1255
msgid ""
"\n"
"You may want to delete the .swp file now.\n"
@@ -3949,51 +3105,39 @@ msgstr ""
"\n"
#. use msg() to start the scrolling properly
-#: ../memline.c:1327
msgid "Swap files found:"
msgstr "Знайдено файли обміну:"
-#: ../memline.c:1446
msgid " In current directory:\n"
msgstr " В поточному каталозі:\n"
-#: ../memline.c:1448
msgid " Using specified name:\n"
msgstr " Використовуючи вказану назву:\n"
-#: ../memline.c:1450
msgid " In directory "
msgstr " У каталозі "
-#: ../memline.c:1465
msgid " -- none --\n"
msgstr " -- жодного --\n"
-#: ../memline.c:1527
msgid " owned by: "
msgstr " власник: "
-#: ../memline.c:1529
msgid " dated: "
msgstr " дата: "
-#: ../memline.c:1532 ../memline.c:3231
msgid " dated: "
msgstr " дата: "
-#: ../memline.c:1548
msgid " [from Vim version 3.0]"
msgstr " [від Vim 3.0]"
-#: ../memline.c:1550
msgid " [does not look like a Vim swap file]"
msgstr " [не схоже на файл обміну]"
-#: ../memline.c:1552
msgid " file name: "
msgstr " назва файлу: "
-#: ../memline.c:1558
msgid ""
"\n"
" modified: "
@@ -4001,15 +3145,12 @@ msgstr ""
"\n"
" змінено: "
-#: ../memline.c:1559
msgid "YES"
msgstr "ТАК"
-#: ../memline.c:1559
msgid "no"
msgstr "ні"
-#: ../memline.c:1562
msgid ""
"\n"
" user name: "
@@ -4017,11 +3158,9 @@ msgstr ""
"\n"
" користувач: "
-#: ../memline.c:1568
msgid " host name: "
msgstr " назва вузла: "
-#: ../memline.c:1570
msgid ""
"\n"
" host name: "
@@ -4029,7 +3168,6 @@ msgstr ""
"\n"
" назва вузла: "
-#: ../memline.c:1575
msgid ""
"\n"
" process ID: "
@@ -4037,11 +3175,9 @@ msgstr ""
"\n"
" ID процесу: "
-#: ../memline.c:1579
msgid " (still running)"
msgstr " (виконується)"
-#: ../memline.c:1586
msgid ""
"\n"
" [not usable on this computer]"
@@ -4049,106 +3185,84 @@ msgstr ""
"\n"
" [непридатний на цьому комп'ютері]"
-#: ../memline.c:1590
msgid " [cannot be read]"
msgstr " [не можна прочитати]"
-#: ../memline.c:1593
msgid " [cannot be opened]"
msgstr " [не можна відкрити]"
-#: ../memline.c:1698
msgid "E313: Cannot preserve, there is no swap file"
msgstr "E313: Не вдалося заготовити, немає файлу обміну"
# msgstr "E313: "
-#: ../memline.c:1747
msgid "File preserved"
msgstr "Файл збережено"
-#: ../memline.c:1749
msgid "E314: Preserve failed"
msgstr "E314: Збереження не вдалося"
# msgstr "E314: "
-#: ../memline.c:1819
#, c-format
msgid "E315: ml_get: invalid lnum: %<PRId64>"
msgstr "E315: ml_get: неправильний lnum: %<PRId64>"
# msgstr "E315: "
-#: ../memline.c:1851
#, c-format
msgid "E316: ml_get: cannot find line %<PRId64>"
msgstr "E316: ml_get: не знайшов рядок %<PRId64>"
# msgstr "E316: "
-#: ../memline.c:2236
msgid "E317: pointer block id wrong 3"
msgstr "E317: Вказівник блоку помилковий 3"
# msgstr "E317: "
-#: ../memline.c:2311
msgid "stack_idx should be 0"
msgstr "stack_idx має бути рівним 0"
-#: ../memline.c:2369
msgid "E318: Updated too many blocks?"
msgstr "E318: Поновлено забагато блоків?"
-#: ../memline.c:2511
msgid "E317: pointer block id wrong 4"
msgstr "E317: Вказівник блоку помилковий 4"
-#: ../memline.c:2536
msgid "deleted block 1?"
msgstr "блок 1 знищено?"
-#: ../memline.c:2707
#, c-format
msgid "E320: Cannot find line %<PRId64>"
msgstr "E320: Не вдалося знайти рядок %<PRId64>"
-#: ../memline.c:2916
msgid "E317: pointer block id wrong"
msgstr "E317: Вказівник блоку помилковий"
# msgstr "E317: "
-#: ../memline.c:2930
msgid "pe_line_count is zero"
msgstr "pe_line_count дорівнює 0"
-#: ../memline.c:2955
#, c-format
msgid "E322: line number out of range: %<PRId64> past the end"
msgstr "E322: Номер рядка вийшов за межі: %<PRId64> за кінцем"
# msgstr "E322: "
-#: ../memline.c:2959
#, c-format
msgid "E323: line count wrong in block %<PRId64>"
msgstr "E323: Кількість рядків у блоці %<PRId64>"
# msgstr "E323: "
-#: ../memline.c:2999
msgid "Stack size increases"
msgstr "Розмір стеку збільшується"
-#: ../memline.c:3038
msgid "E317: pointer block id wrong 2"
msgstr "E317: Вказівник блоку помилковий 2"
-#: ../memline.c:3070
#, c-format
msgid "E773: Symlink loop for \"%s\""
msgstr "E773: Циклічні символьні посилання «%s»"
# msgstr "E317: "
-#: ../memline.c:3221
msgid "E325: ATTENTION"
msgstr "E325: УВАГА"
-#: ../memline.c:3222
msgid ""
"\n"
"Found a swap file by the name \""
@@ -4156,15 +3270,12 @@ msgstr ""
"\n"
"Знайдено файл обміну з назвою \""
-#: ../memline.c:3226
msgid "While opening file \""
msgstr "При відкритті файлу \""
-#: ../memline.c:3239
msgid " NEWER than swap file!\n"
msgstr " НОВІШИЙ за файл обміну!\n"
-#: ../memline.c:3244
msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
@@ -4176,19 +3287,15 @@ msgstr ""
" будьте обережні, щоб не залишилися два різні екземпляри\n"
" одного й того самого файлу після змін."
-#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
msgstr " Вийдіть або продовжуйте обережно.\n"
-#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
msgstr "(2) Сеанс редагування цього файлу зазнав краху.\n"
-#: ../memline.c:3247
msgid " If this is the case, use \":recover\" or \"vim -r "
msgstr " Якщо це справді трапилося, спробуйте «:recover» або «vim -r "
-#: ../memline.c:3249
msgid ""
"\"\n"
" to recover the changes (see \":help recovery\").\n"
@@ -4196,11 +3303,9 @@ msgstr ""
"»\n"
" щоб відновити зміни (див. «:help recovery»).\n"
-#: ../memline.c:3250
msgid " If you did this already, delete the swap file \""
msgstr " Якщо ви вже це зробили, знищіть файл обміну «"
-#: ../memline.c:3252
msgid ""
"\"\n"
" to avoid this message.\n"
@@ -4209,23 +3314,18 @@ msgstr ""
" щоб позбутися цього повідомлення.\n"
"\n"
-#: ../memline.c:3450 ../memline.c:3452
msgid "Swap file \""
msgstr "Файл обміну «"
-#: ../memline.c:3451 ../memline.c:3455
msgid "\" already exists!"
msgstr "» вже існує!"
-#: ../memline.c:3457
msgid "VIM - ATTENTION"
msgstr "VIM — УВАГА"
-#: ../memline.c:3459
msgid "Swap file already exists!"
msgstr "Файл обміну вже існує!"
-#: ../memline.c:3464
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4239,7 +3339,6 @@ msgstr ""
"&Q:Вийти\n"
"&A:Перервати"
-#: ../memline.c:3467
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4263,56 +3362,46 @@ msgstr ""
#.
#. ".s?a"
#. ".saa": tried enough, give up
-#: ../memline.c:3528
msgid "E326: Too many swap files found"
msgstr "E326: Знайдено забагато файлів обміну"
# msgstr "E341: "
-#: ../memory.c:227
#, c-format
msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
msgstr "E342: Забракло пам'яті! (потрібно було %<PRIu64> байтів)"
# msgstr "E326: "
-#: ../menu.c:62
msgid "E327: Part of menu-item path is not sub-menu"
msgstr "E327: Частина шляху до елемента меню не є підменю"
# msgstr "E327: "
-#: ../menu.c:63
msgid "E328: Menu only exists in another mode"
msgstr "E328: Меню може бути тільки в іншому режимі"
# msgstr "E328: "
-#: ../menu.c:64
#, c-format
msgid "E329: No menu \"%s\""
msgstr "E329: Немає меню «%s»"
#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
msgid "E792: Empty menu name"
msgstr "E792: Порожня назва меню"
# msgstr "E329: "
-#: ../menu.c:340
msgid "E330: Menu path must not lead to a sub-menu"
msgstr "E330: Шлях до меню не повинен вести до підменю"
# msgstr "E330: "
-#: ../menu.c:365
msgid "E331: Must not add menu items directly to menu bar"
msgstr "E331: Не можна додавати елементи меню просто до верхнього меню"
# msgstr "E331: "
-#: ../menu.c:370
msgid "E332: Separator cannot be part of a menu path"
msgstr "E332: Роздільник не може бути частиною шляху меню"
# msgstr "E332: "
#. Now we have found the matching menu, and we list the mappings
#. Highlight title
-#: ../menu.c:762
msgid ""
"\n"
"--- Menus ---"
@@ -4320,78 +3409,59 @@ msgstr ""
"\n"
"--- Меню ---"
-#: ../menu.c:1313
msgid "E333: Menu path must lead to a menu item"
msgstr "E333: Шлях повинен вести до елемента меню"
# msgstr "E333: "
-#: ../menu.c:1330
#, c-format
msgid "E334: Menu not found: %s"
msgstr "E334: Меню не знайдено: %s"
# msgstr "E334: "
-#: ../menu.c:1396
#, c-format
msgid "E335: Menu not defined for %s mode"
msgstr "E335: Для режиму %s меню не визначено"
# msgstr "E335: "
-#: ../menu.c:1426
msgid "E336: Menu path must lead to a sub-menu"
msgstr "E336: Шлях повинен вести до підменю"
# msgstr "E336: "
-#: ../menu.c:1447
msgid "E337: Menu not found - check menu names"
msgstr "E337: Меню не знайдено — перевірте назву"
# msgstr "E337: "
-#: ../message.c:423
#, c-format
msgid "Error detected while processing %s:"
msgstr "Виявлено помилку під час виконання %s:"
-#: ../message.c:445
#, c-format
msgid "line %4ld:"
msgstr "рядок %4ld:"
-#: ../message.c:617
#, c-format
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Неправильна назва регістру: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Українізація: Анатолій Сахнік <sakhnik@gmail.com>"
-
-#: ../message.c:986
msgid "Interrupt: "
msgstr "Перервано: "
-#: ../message.c:988
msgid "Press ENTER or type command to continue"
msgstr "Натисніть ENTER або введіть команду для продовження"
-#: ../message.c:1843
#, c-format
msgid "%s line %<PRId64>"
msgstr "%s рядок %<PRId64>"
-#: ../message.c:2392
msgid "-- More --"
msgstr "-- Ще --"
-#: ../message.c:2398
msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
msgstr " ПРОБІЛ/d/j: вниз на екран/сторінку/рядок, b/u/k: вгору, q: вийти "
-#: ../message.c:3021 ../message.c:3031
msgid "Question"
msgstr "Запитання"
-#: ../message.c:3023
msgid ""
"&Yes\n"
"&No"
@@ -4399,7 +3469,6 @@ msgstr ""
"&Y:Так\n"
"&N:Ні"
-#: ../message.c:3033
msgid ""
"&Yes\n"
"&No\n"
@@ -4409,7 +3478,6 @@ msgstr ""
"&N:Ні\n"
"&C:Скасувати"
-#: ../message.c:3045
msgid ""
"&Yes\n"
"&No\n"
@@ -4423,178 +3491,139 @@ msgstr ""
"&D:Жодного\n"
"&C:Скасувати"
-#: ../message.c:3058
msgid "E766: Insufficient arguments for printf()"
msgstr "E766: Недостатньо аргументів для printf()"
-#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
msgstr "E807: Очікується аргумент Float для printf()"
-#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
msgstr "E767: Забагато аргументів для printf()"
# msgstr "E338: "
-#: ../misc1.c:2256
msgid "W10: Warning: Changing a readonly file"
msgstr "W10: Застереження: Змінюється файл призначений лише для читання"
-#: ../misc1.c:2537
msgid "Type number and <Enter> or click with mouse (empty cancels): "
msgstr "Наберіть число й <Enter> чи клацніть мишкою (порожнє скасовує): "
-#: ../misc1.c:2539
msgid "Type number and <Enter> (empty cancels): "
msgstr "Наберіть число й <Enter> (порожнє скасовує): "
-#: ../misc1.c:2585
msgid "1 more line"
msgstr "додано один рядок"
-#: ../misc1.c:2588
msgid "1 line less"
msgstr "знищено один рядок"
-#: ../misc1.c:2593
#, c-format
msgid "%<PRId64> more lines"
msgstr "додано рядків: %<PRId64>"
-#: ../misc1.c:2596
#, c-format
msgid "%<PRId64> fewer lines"
msgstr "знищено рядків: %<PRId64>"
-#: ../misc1.c:2599
msgid " (Interrupted)"
msgstr " (Перервано)"
-#: ../misc1.c:2635
msgid "Beep!"
msgstr "Дзень!"
# msgstr "E342: "
-#: ../misc2.c:738
#, c-format
msgid "Calling shell to execute: \"%s\""
msgstr "Викликається оболонка щоб виконати: «%s»"
# msgstr "E348: "
-#: ../normal.c:183
msgid "E349: No identifier under cursor"
msgstr "E349: Немає ідентифікатора над курсором"
-#: ../normal.c:1866
msgid "E774: 'operatorfunc' is empty"
msgstr "E774: 'operatorfunc' порожня"
-#: ../normal.c:2637
msgid "Warning: terminal cannot highlight"
msgstr "Застереження: Термінал не підтримує кольори"
-#: ../normal.c:2807
msgid "E348: No string under cursor"
msgstr "E348: Немає рядка на курсорі"
-#: ../normal.c:3937
msgid "E352: Cannot erase folds with current 'foldmethod'"
msgstr "E352: Не вдалося знищити згортки поточним методом 'foldmethod'"
-#: ../normal.c:5897
msgid "E664: changelist is empty"
msgstr "E664: Список змін порожній"
-#: ../normal.c:5899
msgid "E662: At start of changelist"
msgstr "E662: Початок списку змін"
-#: ../normal.c:5901
msgid "E663: At end of changelist"
msgstr "E663: Кінець списку змін"
-#: ../normal.c:7053
msgid "Type :quit<Enter> to exit Nvim"
msgstr "Уведіть :quit<Enter> щоб вийти з Vim"
-#: ../ops.c:248
#, c-format
msgid "1 line %sed 1 time"
msgstr "Один рядок %s-но"
-#: ../ops.c:250
#, c-format
msgid "1 line %sed %d times"
msgstr "Один рядок %s-но %d разів"
-#: ../ops.c:253
#, c-format
msgid "%<PRId64> lines %sed 1 time"
msgstr "%<PRId64> рядків %s-но"
-#: ../ops.c:256
#, c-format
msgid "%<PRId64> lines %sed %d times"
msgstr "%<PRId64> рядків %s-но %d разів"
-#: ../ops.c:592
#, c-format
msgid "%<PRId64> lines to indent... "
msgstr "Залишилося вирівняти %<PRId64> рядків..."
-#: ../ops.c:634
msgid "1 line indented "
msgstr "Вирівняно один рядок"
-#: ../ops.c:636
#, c-format
msgid "%<PRId64> lines indented "
msgstr "Вирівняно рядків: %<PRId64>"
-#: ../ops.c:938
msgid "E748: No previously used register"
msgstr "E748: Регістри перед цим не вживались"
#. must display the prompt
-#: ../ops.c:1433
msgid "cannot yank; delete anyway"
msgstr "не вдалося запам'ятати; все одно знищити?"
-#: ../ops.c:1929
msgid "1 line changed"
msgstr "Один рядок змінено"
-#: ../ops.c:1931
#, c-format
msgid "%<PRId64> lines changed"
msgstr "Змінено рядків: %<PRId64>"
-#: ../ops.c:2521
msgid "block of 1 line yanked"
msgstr "Запам'ятав блок з одного рядка"
-#: ../ops.c:2523
msgid "1 line yanked"
msgstr "Запам'ятав один рядок"
-#: ../ops.c:2525
#, c-format
msgid "block of %<PRId64> lines yanked"
msgstr "Запам'ятав блок із %<PRId64> рядків"
-#: ../ops.c:2528
#, c-format
msgid "%<PRId64> lines yanked"
msgstr "Запам'ятав рядків: %<PRId64>"
-#: ../ops.c:2710
#, c-format
msgid "E353: Nothing in register %s"
msgstr "E353: У регістрі %s нічого немає"
# msgstr "E353: "
#. Highlight title
-#: ../ops.c:3185
msgid ""
"\n"
"--- Registers ---"
@@ -4602,11 +3631,9 @@ msgstr ""
"\n"
"--- Регістри ---"
-#: ../ops.c:4455
msgid "Illegal register name"
msgstr "Неправильна назва регістру"
-#: ../ops.c:4533
msgid ""
"\n"
"# Registers:\n"
@@ -4614,17 +3641,14 @@ msgstr ""
"\n"
"# Регістри:\n"
-#: ../ops.c:4575
#, c-format
msgid "E574: Unknown register type %d"
msgstr "E574: Невідомий тип регістру %d"
-#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
msgstr "довж.: %<PRId64>; "
-#: ../ops.c:5097
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4633,7 +3657,6 @@ msgstr ""
"Вибрано %s%<PRId64> з %<PRId64> рядків; %<PRId64> з %<PRId64> слів; "
"%<PRId64> з %<PRId64> байтів"
-#: ../ops.c:5105
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4642,7 +3665,6 @@ msgstr ""
"Вибрано %s%<PRId64> з %<PRId64> рядків; %<PRId64> з %<PRId64> слів; "
"%<PRId64> of %<PRId64> символів; %<PRId64> з %<PRId64> байтів"
-#: ../ops.c:5123
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
@@ -4651,7 +3673,6 @@ msgstr ""
"Колонка %s з %s; рядок %<PRId64> з %<PRId64>; слово %<PRId64> з %<PRId64>; "
"байт %<PRId64> з %<PRId64>"
-#: ../ops.c:5133
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
@@ -4660,136 +3681,105 @@ msgstr ""
"Колонка %s з %s; рядок %<PRId64> з %<PRId64>; слово %<PRId64> з %<PRId64>; "
"символ %<PRId64> of %<PRId64>; байт %<PRId64> з %<PRId64>"
-#: ../ops.c:5146
#, c-format
msgid "(+%<PRId64> for BOM)"
msgstr "(+%<PRId64> для BOM)"
-#: ../option.c:1238
msgid "%<%f%h%m%=Page %N"
msgstr "%<%f%h%m%=Стор. %N"
-#: ../option.c:1574
msgid "Thanks for flying Vim"
msgstr "Дякуємо за вибір Vim"
#. found a mismatch: skip
-#: ../option.c:2698
msgid "E518: Unknown option"
msgstr "E518: Невідома опція"
-#: ../option.c:2709
msgid "E519: Option not supported"
msgstr "E519: Опція не підтримується"
-#: ../option.c:2740
msgid "E520: Not allowed in a modeline"
msgstr "E520: Не дозволено у modeline"
-#: ../option.c:2815
msgid "E846: Key code not set"
msgstr "E846: Код ключа не встановлено"
-#: ../option.c:2924
msgid "E521: Number required after ="
msgstr "E521: Після = потрібно вказати число"
-#: ../option.c:3226 ../option.c:3864
msgid "E522: Not found in termcap"
msgstr "E522: Не знайдено серед можливостей терміналів"
-#: ../option.c:3335
#, c-format
msgid "E539: Illegal character <%s>"
msgstr "E539: Недозволений символ <%s>"
-#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: Не вдалося спорожнити 'term'"
-#: ../option.c:3885
msgid "E589: 'backupext' and 'patchmode' are equal"
msgstr "E589: Опції 'backupext' і 'patchmode' однакові"
-#: ../option.c:3964
msgid "E834: Conflicts with value of 'listchars'"
msgstr "E834: Конфліктує із значенням 'listchars'"
-#: ../option.c:3966
msgid "E835: Conflicts with value of 'fillchars'"
msgstr "E835: Конфліктує із значенням 'fillchars'"
-#: ../option.c:4163
msgid "E524: Missing colon"
msgstr "E524: Бракує двокрапки"
-#: ../option.c:4165
msgid "E525: Zero length string"
msgstr "E525: Рядок порожній"
-#: ../option.c:4220
#, c-format
msgid "E526: Missing number after <%s>"
msgstr "E526: Після <%s> бракує числа"
-#: ../option.c:4232
msgid "E527: Missing comma"
msgstr "E527: Бракує коми"
-#: ../option.c:4239
msgid "E528: Must specify a ' value"
msgstr "E528: Потрібно вказати значення '"
-#: ../option.c:4271
msgid "E595: contains unprintable or wide character"
msgstr "E595: Містить недруковні або розширені символи"
-#: ../option.c:4469
#, c-format
msgid "E535: Illegal character after <%c>"
msgstr "E535: Недозволений символ після <%c>"
-#: ../option.c:4534
msgid "E536: comma required"
msgstr "E536: Потрібна кома"
-#: ../option.c:4543
#, c-format
msgid "E537: 'commentstring' must be empty or contain %s"
msgstr "E537: 'commentstring' має бути порожньою чи містити %s"
-#: ../option.c:4928
msgid "E540: Unclosed expression sequence"
msgstr "E540: Послідовність виразів не завершено"
-#: ../option.c:4932
msgid "E541: too many items"
msgstr "E541: Забагато елементів"
-#: ../option.c:4934
msgid "E542: unbalanced groups"
msgstr "E542: Групи не збалансовано"
-#: ../option.c:5148
msgid "E590: A preview window already exists"
msgstr "E590: Вікно перегляду вже існує"
-#: ../option.c:5311
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr ""
"W17: Для арабської мови потрібне UTF-8, виконайте ':set encoding=utf-8'"
-#: ../option.c:5623
#, c-format
msgid "E593: Need at least %d lines"
msgstr "E593: Потрібно щонайменше %d рядків"
-#: ../option.c:5631
#, c-format
msgid "E594: Need at least %d columns"
msgstr "E594: Потрібно щонайменше %d стовпців"
-#: ../option.c:6011
#, c-format
msgid "E355: Unknown option: %s"
msgstr "E355: Невідома опція: %s"
@@ -4797,13 +3787,11 @@ msgstr "E355: Невідома опція: %s"
#. There's another character after zeros or the string
#. * is empty. In both cases, we are trying to set a
#. * num option using a string.
-#: ../option.c:6037
#, c-format
msgid "E521: Number required: &%s = '%s'"
msgstr "E521: Потрібно вказати Number: &%s = '%s'"
# msgstr "E355: "
-#: ../option.c:6149
msgid ""
"\n"
"--- Terminal codes ---"
@@ -4811,7 +3799,6 @@ msgstr ""
"\n"
"--- Коди терміналу ---"
-#: ../option.c:6151
msgid ""
"\n"
"--- Global option values ---"
@@ -4819,7 +3806,6 @@ msgstr ""
"\n"
"--- Значення загальних опцій ---"
-#: ../option.c:6153
msgid ""
"\n"
"--- Local option values ---"
@@ -4827,7 +3813,6 @@ msgstr ""
"\n"
"--- Значення локальних опцій ---"
-#: ../option.c:6155
msgid ""
"\n"
"--- Options ---"
@@ -4835,23 +3820,19 @@ msgstr ""
"\n"
"--- Опції ---"
-#: ../option.c:6816
msgid "E356: get_varp ERROR"
msgstr "E356: Помилка get_varp"
# msgstr "E356: "
-#: ../option.c:7696
#, c-format
msgid "E357: 'langmap': Matching character missing for %s"
msgstr "E357: 'langmap': Для символу %s немає пари"
# msgstr "E357: "
-#: ../option.c:7715
#, c-format
msgid "E358: 'langmap': Extra characters after semicolon: %s"
msgstr "E358: 'langmap': Зайві символи після `;': %s"
-#: ../os/shell.c:194
msgid ""
"\n"
"Cannot execute shell "
@@ -4860,7 +3841,6 @@ msgstr ""
"Не вдалося запустити оболонку"
# msgstr "E362: "
-#: ../os/shell.c:439
msgid ""
"\n"
"shell returned "
@@ -4868,7 +3848,6 @@ msgstr ""
"\n"
"оболонка повернула: "
-#: ../os_unix.c:465 ../os_unix.c:471
msgid ""
"\n"
"Could not get security context for "
@@ -4876,7 +3855,6 @@ msgstr ""
"\n"
"Не вдалося отримати контекст безпеки для "
-#: ../os_unix.c:479
msgid ""
"\n"
"Could not set security context for "
@@ -4884,234 +3862,187 @@ msgstr ""
"\n"
"Не вдалося встановити контекст безпеки для "
-#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
msgstr "dlerror = «%s»"
# msgstr "E446: "
-#: ../path.c:1449
#, c-format
msgid "E447: Can't find file \"%s\" in path"
msgstr "E447: Файл «%s» не знайдено у шляху пошуку"
# msgstr "E371: "
-#: ../quickfix.c:359
#, c-format
msgid "E372: Too many %%%c in format string"
msgstr "E372: Забагато %%%c у рядку формату"
# msgstr "E372: "
-#: ../quickfix.c:371
#, c-format
msgid "E373: Unexpected %%%c in format string"
msgstr "E373: Неочікуваний `%%%c' у рядку формату"
# msgstr "E373: "
-#: ../quickfix.c:420
msgid "E374: Missing ] in format string"
msgstr "E374: Пропущено ] у рядку формату"
# msgstr "E374: "
-#: ../quickfix.c:431
#, c-format
msgid "E375: Unsupported %%%c in format string"
msgstr "E375: %%%c у рядку формату не підтримується"
# msgstr "E375: "
-#: ../quickfix.c:448
#, c-format
msgid "E376: Invalid %%%c in format string prefix"
msgstr "E376: Помилковий `%%%c' у префіксі рядку формату"
# msgstr "E376: "
-#: ../quickfix.c:454
#, c-format
msgid "E377: Invalid %%%c in format string"
msgstr "E377: Помилковий `%%%c' у рядку формату"
# msgstr "E377: "
#. nothing found
-#: ../quickfix.c:477
msgid "E378: 'errorformat' contains no pattern"
msgstr "E378: 'errorformat' не містить зразок"
# msgstr "E378: "
-#: ../quickfix.c:695
msgid "E379: Missing or empty directory name"
msgstr "E379: Пропущена чи порожня назва каталогу"
-#: ../quickfix.c:1305
msgid "E553: No more items"
msgstr "E553: Немає більше елементів"
-#: ../quickfix.c:1674
#, c-format
msgid "(%d of %d)%s%s: "
msgstr "(%d з %d)%s%s: "
-#: ../quickfix.c:1676
msgid " (line deleted)"
msgstr " (рядок знищено)"
-#: ../quickfix.c:1863
msgid "E380: At bottom of quickfix stack"
msgstr "E380: Дно стеку виправлень"
-#: ../quickfix.c:1869
msgid "E381: At top of quickfix stack"
msgstr "E381: Вершина стеку виправлень"
-#: ../quickfix.c:1880
#, c-format
msgid "error list %d of %d; %d errors"
msgstr "список помилок %d з %d; %d помилок"
-#: ../quickfix.c:2427
msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: Не можу записати, вказана опція 'buftype'"
-#: ../quickfix.c:2812
msgid "E683: File name missing or invalid pattern"
msgstr "E683: Пропущено назву файлу чи некоректний шаблон"
-#: ../quickfix.c:2911
#, c-format
msgid "Cannot open file \"%s\""
msgstr "Не вдалося відкрити файл «%s»"
-#: ../quickfix.c:3429
msgid "E681: Buffer is not loaded"
msgstr "E681: Буфер не завантажено"
-#: ../quickfix.c:3487
msgid "E777: String or List expected"
msgstr "E777: Очікується String чи List"
-#: ../regexp.c:359
#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: Некоректний елемент у %s%%[]"
-#: ../regexp.c:374
#, c-format
msgid "E769: Missing ] after %s["
msgstr "E769: Бракує ] після %s["
-#: ../regexp.c:375
#, c-format
msgid "E53: Unmatched %s%%("
msgstr "E53: Немає пари %s%%("
-#: ../regexp.c:376
#, c-format
msgid "E54: Unmatched %s("
msgstr "E54: Немає пари %s("
-#: ../regexp.c:377
#, c-format
msgid "E55: Unmatched %s)"
msgstr "E55: Немає пари %s)"
# msgstr "E406: "
-#: ../regexp.c:378
msgid "E66: \\z( not allowed here"
msgstr "E66: \\z( тут не дозволено"
# msgstr "E406: "
-#: ../regexp.c:379
msgid "E67: \\z1 et al. not allowed here"
msgstr "E67: \\z1 та ін. тут не дозволено"
-#: ../regexp.c:380
#, c-format
msgid "E69: Missing ] after %s%%["
msgstr "E69: Пропущено ] після %s%%["
-#: ../regexp.c:381
#, c-format
msgid "E70: Empty %s%%[]"
msgstr "E70: %s%%[] порожній"
# msgstr "E382: "
-#: ../regexp.c:1209 ../regexp.c:1224
msgid "E339: Pattern too long"
msgstr "E339: Зразок занадто довгий"
-#: ../regexp.c:1371
msgid "E50: Too many \\z("
msgstr "E50: Забагато \\z("
-#: ../regexp.c:1378
#, c-format
msgid "E51: Too many %s("
msgstr "E51: Забагато %s("
-#: ../regexp.c:1427
msgid "E52: Unmatched \\z("
msgstr "E52: Немає пари \\z("
-#: ../regexp.c:1637
#, c-format
msgid "E59: invalid character after %s@"
msgstr "E59: Недозволений символ після %s@"
-#: ../regexp.c:1672
#, c-format
msgid "E60: Too many complex %s{...}s"
msgstr "E60: Забагато складних %s{...}"
# msgstr "E339: "
-#: ../regexp.c:1687
#, c-format
msgid "E61: Nested %s*"
msgstr "E61: Вкладені %s*"
# msgstr "E61: "
-#: ../regexp.c:1690
#, c-format
msgid "E62: Nested %s%c"
msgstr "E62: Вкладені %s%c"
-#: ../regexp.c:1800
msgid "E63: invalid use of \\_"
msgstr "E63: Некоректно вжито \\_"
# msgstr "E62: "
-#: ../regexp.c:1850
#, c-format
msgid "E64: %s%c follows nothing"
msgstr "E64: Після %s%c нічого немає"
-#: ../regexp.c:1902
msgid "E65: Illegal back reference"
msgstr "E65: Некоректне зворотнє посилання"
-#: ../regexp.c:1943
msgid "E68: Invalid character after \\z"
msgstr "E68: Неправильний символ після \\z"
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
#, c-format
msgid "E678: Invalid character after %s%%[dxouU]"
msgstr "E678: Недозволений символ після %s%%[dxouU]"
-#: ../regexp.c:2107
#, c-format
msgid "E71: Invalid character after %s%%"
msgstr "E71: Недозволений символ після %s%%"
# msgstr "E64: "
-#: ../regexp.c:3017
#, c-format
msgid "E554: Syntax error in %s{...}"
msgstr "E554: Синтаксична помилка в %s{...}"
-#: ../regexp.c:3805
msgid "External submatches:\n"
msgstr "Зовнішні під-збіги:\n"
-#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
"used "
@@ -5119,62 +4050,49 @@ msgstr ""
"E864: після \\%#= може бути тільки 0, 1, or 2. Буде використано автоматичний "
"механізм "
-#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) Зарано трапився кінець регулярного виразу"
-#: ../regexp_nfa.c:240
#, c-format
msgid "E866: (NFA regexp) Misplaced %c"
msgstr "E866: (NFA regexp) Не на місці %c"
-#: ../regexp_nfa.c:242
#, c-format
msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
+msgstr "E877: (NFA regexp) Неправильний клас символів: %<PRId64>"
-#: ../regexp_nfa.c:1261
#, c-format
msgid "E867: (NFA) Unknown operator '\\z%c'"
msgstr "E867: (NFA) Невідомий оператор '\\z%c'"
-#: ../regexp_nfa.c:1387
#, c-format
msgid "E867: (NFA) Unknown operator '\\%%%c'"
msgstr "E867: (NFA) Невідомий оператор '\\%%%c'"
-#: ../regexp_nfa.c:1802
#, c-format
msgid "E869: (NFA) Unknown operator '\\@%c'"
msgstr "E869: (NFA) Невідомий оператор '\\@%c'"
-#: ../regexp_nfa.c:1831
msgid "E870: (NFA regexp) Error reading repetition limits"
msgstr "E870: (NFA regexp) Не вдалося прочитати межі повторення"
#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
msgstr "E871: (NFA regexp) Мульти не може бути за мульти!"
#. Too many `('
-#: ../regexp_nfa.c:2037
msgid "E872: (NFA regexp) Too many '('"
msgstr "E872: (NFA regexp) Забагато '('"
-#: ../regexp_nfa.c:2042
msgid "E879: (NFA regexp) Too many \\z("
msgstr "E879: (NFA regexp) Забагато \\z("
-#: ../regexp_nfa.c:2066
msgid "E873: (NFA regexp) proper termination error"
msgstr "E873: (NFA regexp) помилка належного припинення"
-#: ../regexp_nfa.c:2599
msgid "E874: (NFA) Could not pop the stack !"
msgstr "E874: (NFA) Стек порожній!"
-#: ../regexp_nfa.c:3298
msgid ""
"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
"left on stack"
@@ -5182,178 +4100,137 @@ msgstr ""
"E875: (NFA regexp) (Під час перетворення з постфікс у NFA) залишилося "
"забагато станів у стеку"
-#: ../regexp_nfa.c:3302
msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
msgstr "E876: (NFA regexp) Недостатньо пам’яті, щоб зберегти весь NFA "
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
msgid ""
"Could not open temporary log file for writing, displaying on stderr ... "
msgstr ""
"Не вдалося відкрити тимчасовий файл журналу для запису, показується на "
"stderr ... "
-#: ../regexp_nfa.c:4840
#, c-format
msgid "(NFA) COULD NOT OPEN %s !"
msgstr "(NFA) НЕ ВДАЛОСЯ ВІДКРИТИ %s!"
-#: ../regexp_nfa.c:6049
msgid "Could not open temporary log file for writing "
msgstr "Не вдалося відкрити тимчасовий файл журналу для запису "
-#: ../screen.c:7435
msgid " VREPLACE"
msgstr " ВІРТ ЗАМІНА"
-#: ../screen.c:7437
msgid " REPLACE"
msgstr " ЗАМІНА"
-#: ../screen.c:7440
msgid " REVERSE"
msgstr " НАВИВОРІТ"
-#: ../screen.c:7441
msgid " INSERT"
msgstr " ВСТАВКА"
-#: ../screen.c:7443
msgid " (insert)"
msgstr " (вставка)"
-#: ../screen.c:7445
msgid " (replace)"
msgstr " (заміна)"
-#: ../screen.c:7447
msgid " (vreplace)"
msgstr " (вірт заміна)"
-#: ../screen.c:7449
msgid " Hebrew"
msgstr " Іврит"
-#: ../screen.c:7454
msgid " Arabic"
msgstr " Арабська"
-#: ../screen.c:7456
msgid " (lang)"
msgstr " (мова)"
-#: ../screen.c:7459
msgid " (paste)"
msgstr " (клей)"
-#: ../screen.c:7469
msgid " VISUAL"
msgstr " ВИБІР"
-#: ../screen.c:7470
msgid " VISUAL LINE"
msgstr " ВИБІР РЯДКІВ"
-#: ../screen.c:7471
msgid " VISUAL BLOCK"
msgstr " ВИБІР БЛОКУ"
-#: ../screen.c:7472
msgid " SELECT"
msgstr " ВИДІЛЕННЯ"
-#: ../screen.c:7473
msgid " SELECT LINE"
msgstr " ВИДІЛЕННЯ РЯДКІВ"
-#: ../screen.c:7474
msgid " SELECT BLOCK"
msgstr " ВИДІЛЕННЯ БЛОКУ"
-#: ../screen.c:7486 ../screen.c:7541
msgid "recording"
msgstr "йде запис"
-#: ../search.c:487
#, c-format
msgid "E383: Invalid search string: %s"
msgstr "E383: Неправильний зразок для пошуку: %s"
-#: ../search.c:832
#, c-format
msgid "E384: search hit TOP without match for: %s"
msgstr "E384: Пошук дійшов до ПОЧАТКУ без збігів з %s"
-#: ../search.c:835
#, c-format
msgid "E385: search hit BOTTOM without match for: %s"
msgstr "E385: Пошук дійшов до КІНЦЯ без збігів з %s"
-#: ../search.c:1200
msgid "E386: Expected '?' or '/' after ';'"
msgstr "E386: Після `;' має бути `?' або `/'"
# msgstr "E386: "
-#: ../search.c:4085
msgid " (includes previously listed match)"
msgstr " (разом з попередніми збігами)"
#. cursor at status line
-#: ../search.c:4104
msgid "--- Included files "
msgstr "--- Включені файли "
-#: ../search.c:4106
msgid "not found "
msgstr "не знайдено "
-#: ../search.c:4107
msgid "in path ---\n"
msgstr "у шляху пошуку ---\n"
-#: ../search.c:4168
msgid " (Already listed)"
msgstr " (Уже у списку)"
-#: ../search.c:4170
msgid " NOT FOUND"
msgstr " НЕ ЗНАЙДЕНО"
-#: ../search.c:4211
#, c-format
msgid "Scanning included file: %s"
msgstr "Пошук у включеному файлі: %s"
-#: ../search.c:4216
#, c-format
msgid "Searching included file %s"
msgstr "Шукається у включеному файлі %s"
-#: ../search.c:4405
msgid "E387: Match is on current line"
msgstr "E387: Збіг у поточному рядку"
-#: ../search.c:4517
msgid "All included files were found"
msgstr "Були знайдені всі включені файли"
-#: ../search.c:4519
msgid "No included files"
msgstr "Жодного включеного файлу"
-#: ../search.c:4527
msgid "E388: Couldn't find definition"
msgstr "E388: Визначення не знайдено"
-#: ../search.c:4529
msgid "E389: Couldn't find pattern"
msgstr "E389: Зразок не знайдено"
-#: ../search.c:4668
msgid "Substitute "
msgstr "Заміна "
-#: ../search.c:4681
#, c-format
msgid ""
"\n"
@@ -5364,100 +4241,79 @@ msgstr ""
"# Ост. %sЗразок пошуку:\n"
"~"
-#: ../spell.c:951
msgid "E759: Format error in spell file"
msgstr "E759: Помилка формату у файлі орфографії"
# msgstr "E364: "
-#: ../spell.c:952
msgid "E758: Truncated spell file"
msgstr "E758: Обірваний файл орфографії"
-#: ../spell.c:953
#, c-format
msgid "Trailing text in %s line %d: %s"
msgstr "Зайвий текст у %s у рядку %d: %s"
-#: ../spell.c:954
#, c-format
msgid "Affix name too long in %s line %d: %s"
msgstr "Назва афіксу завелика у %s у рядку %d: %s"
# msgstr "E430: "
-#: ../spell.c:955
msgid "E761: Format error in affix file FOL, LOW or UPP"
msgstr "E761: Помилка формату у файлі афіксів FOL, LOW чи UPP"
-#: ../spell.c:957
msgid "E762: Character in FOL, LOW or UPP is out of range"
msgstr "E762: Символ у FOL, LOW чи UPP поза межами"
-#: ../spell.c:958
msgid "Compressing word tree..."
msgstr "Стискується дерево слів..."
-#: ../spell.c:1951
msgid "E756: Spell checking is not enabled"
msgstr "E756: Перевірка орфографії не дозволена"
-#: ../spell.c:2249
#, c-format
msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
msgstr ""
"Застереження: Не вдалося знайти список слів «%s.%s.spl» чи «%s.ascii.spl»"
-#: ../spell.c:2473
#, c-format
msgid "Reading spell file \"%s\""
msgstr "Читається файл орфографії «%s»"
-#: ../spell.c:2496
msgid "E757: This does not look like a spell file"
msgstr "E757: Не схоже на файл орфографії"
-#: ../spell.c:2501
msgid "E771: Old spell file, needs to be updated"
msgstr "E771: Файл орфографії старий, треба поновити"
-#: ../spell.c:2504
msgid "E772: Spell file is for newer version of Vim"
msgstr "E772: Файл орфографії призначений для більш нової версії Vim"
-#: ../spell.c:2602
msgid "E770: Unsupported section in spell file"
msgstr "E770: Недозволена секція у файлі орфографії"
-#: ../spell.c:3762
#, c-format
msgid "Warning: region %s not supported"
msgstr "Застереження: регіон %s не підтримується"
-#: ../spell.c:4550
#, c-format
msgid "Reading affix file %s ..."
msgstr "Читається файл афіксів %s ..."
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
#, c-format
msgid "Conversion failure for word in %s line %d: %s"
msgstr "Помилка перетворення слова у %s у рядку %d: %s"
-#: ../spell.c:4630 ../spell.c:6170
#, c-format
msgid "Conversion in %s not supported: from %s to %s"
msgstr "Перетворення у %s не підтримується: з %s до %s"
-#: ../spell.c:4642
#, c-format
msgid "Invalid value for FLAG in %s line %d: %s"
msgstr "Некоректне значення FLAG у %s у рядку %d: %s"
-#: ../spell.c:4655
#, c-format
msgid "FLAG after using flags in %s line %d: %s"
msgstr "FLAG після використання прапорців у %s у рядку %d: %s"
-#: ../spell.c:4723
#, c-format
msgid ""
"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
@@ -5466,7 +4322,6 @@ msgstr ""
"Визначення COMPOUNDFORBIDFLAG після елементу PFX може дати неправильний "
"результат у %s у рядку %d"
-#: ../spell.c:4731
#, c-format
msgid ""
"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
@@ -5475,43 +4330,35 @@ msgstr ""
"Визначення COMPOUNDPERMITFLAG після елементу PFX можу дати неправильний "
"результат у %s у рядку %d"
-#: ../spell.c:4747
#, c-format
msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
msgstr "Неправильне значення COMPOUNDRULES у %s у рядку %d: %s"
-#: ../spell.c:4771
#, c-format
msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
msgstr "Неправильне значення COMPOUNDWORDMAX у %s у рядку %d: %s"
-#: ../spell.c:4777
#, c-format
msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
msgstr "Неправильне значення COMPOUNDMIN у %s у рядку %d: %s"
-#: ../spell.c:4783
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
msgstr "Неправильне значення COMPOUNDSYLMAX у %s у рядку %d: %s"
-#: ../spell.c:4795
#, c-format
msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
msgstr "Неправильне значення CHECKCOMPOUNDPATTERN у %s у рядку %d: %s"
-#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr ""
"Інший прапорець комбінації у продовженні блоку афіксів у %s у рядку %d: %s"
-#: ../spell.c:4850
#, c-format
msgid "Duplicate affix in %s line %d: %s"
msgstr "Подвійний афікс у %s у рядку %d: %s"
-#: ../spell.c:4871
#, c-format
msgid ""
"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
@@ -5520,337 +4367,268 @@ msgstr ""
"Афікс також використовується для BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
"NOSUGGEST у %s у рядку %d: %s"
-#: ../spell.c:4893
#, c-format
msgid "Expected Y or N in %s line %d: %s"
msgstr "Треба Y чи N у %s у рядку %d: %s"
-#: ../spell.c:4968
#, c-format
msgid "Broken condition in %s line %d: %s"
msgstr "Непридатна умова у %s у рядку %d: %s"
-#: ../spell.c:5091
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
msgstr "Треба кількість REP(SAL) у %s у рядку %d"
-#: ../spell.c:5120
#, c-format
msgid "Expected MAP count in %s line %d"
msgstr "Треба кількість MAP у %s у рядку %d"
-#: ../spell.c:5132
#, c-format
msgid "Duplicate character in MAP in %s line %d"
msgstr "Повторення символу у MAP у %s у рядку %d"
-#: ../spell.c:5176
#, c-format
msgid "Unrecognized or duplicate item in %s line %d: %s"
msgstr "Нерозпізнаний чи повторний елемент у %s у рядку %d: %s"
-#: ../spell.c:5197
#, c-format
msgid "Missing FOL/LOW/UPP line in %s"
msgstr "Пропущено рядок FOL/LOW/UPP у %s"
-#: ../spell.c:5220
msgid "COMPOUNDSYLMAX used without SYLLABLE"
msgstr "Вжито COMPOUNDSYLMAX без SYLLABLE"
-#: ../spell.c:5236
msgid "Too many postponed prefixes"
msgstr "Забагато відкладених префіксів"
-#: ../spell.c:5238
msgid "Too many compound flags"
msgstr "Забагато складних прапорців"
-#: ../spell.c:5240
msgid "Too many postponed prefixes and/or compound flags"
msgstr "Забагато відкладених префіксів і/або складних прапорців"
-#: ../spell.c:5250
#, c-format
msgid "Missing SOFO%s line in %s"
msgstr "Пропущено рядок SOFO%s у %s"
-#: ../spell.c:5253
#, c-format
msgid "Both SAL and SOFO lines in %s"
msgstr "Обидва рядки SAL і SOFO у %s"
-#: ../spell.c:5331
#, c-format
msgid "Flag is not a number in %s line %d: %s"
msgstr "Прапорець не є числом у %s у рядку %d: %s"
-#: ../spell.c:5334
#, c-format
msgid "Illegal flag in %s line %d: %s"
msgstr "Неправильний прапорець у %s у рядку %d: %s"
-#: ../spell.c:5493 ../spell.c:5501
#, c-format
msgid "%s value differs from what is used in another .aff file"
msgstr "Значення %s відрізняється від того, що вжито у іншому файлі .aff"
-#: ../spell.c:5602
#, c-format
msgid "Reading dictionary file %s ..."
msgstr "Зчитується словниковий файл %s ..."
-#: ../spell.c:5611
#, c-format
msgid "E760: No word count in %s"
msgstr "E760: Немає кількості слів у %s"
-#: ../spell.c:5669
#, c-format
msgid "line %6d, word %6d - %s"
msgstr "рядок %6d, слово %6d - %s"
-#: ../spell.c:5691
#, c-format
msgid "Duplicate word in %s line %d: %s"
msgstr "Повторення слова у %s у рядку %d: %s"
-#: ../spell.c:5694
#, c-format
msgid "First duplicate word in %s line %d: %s"
msgstr "Перше повторення слова у %s у рядку %d: %s"
-#: ../spell.c:5746
#, c-format
msgid "%d duplicate word(s) in %s"
msgstr "%d повторюваних слів у %s"
-#: ../spell.c:5748
#, c-format
msgid "Ignored %d word(s) with non-ASCII characters in %s"
msgstr "Пропущено %d слів(~) із не-ASCII символами у %s"
-#: ../spell.c:6115
#, c-format
msgid "Reading word file %s ..."
msgstr "Читається файл слів %s ..."
-#: ../spell.c:6155
#, c-format
msgid "Duplicate /encoding= line ignored in %s line %d: %s"
msgstr "Повторення рядка /encoding= проігноровано у %s у рядку %d: %s"
-#: ../spell.c:6159
#, c-format
msgid "/encoding= line after word ignored in %s line %d: %s"
msgstr "Рядок /encoding= після слова проігноровано у %s у рядку %d: %s"
-#: ../spell.c:6180
#, c-format
msgid "Duplicate /regions= line ignored in %s line %d: %s"
msgstr "Повторення рядка /regions= проігноровано у %s у рядку %d: %s"
-#: ../spell.c:6185
#, c-format
msgid "Too many regions in %s line %d: %s"
msgstr "Забагато регіонів у %s у рядку %d: %s"
-#: ../spell.c:6198
#, c-format
msgid "/ line ignored in %s line %d: %s"
msgstr "Рядок / проігноровано у %s у рядку %d: %s"
-#: ../spell.c:6224
#, c-format
msgid "Invalid region nr in %s line %d: %s"
msgstr "Некоректний номер регіону у %s у рядку %d: %s"
-#: ../spell.c:6230
#, c-format
msgid "Unrecognized flags in %s line %d: %s"
msgstr "Нерозпізнані прапорці у %s у рядку %d: %s"
-#: ../spell.c:6257
#, c-format
msgid "Ignored %d words with non-ASCII characters"
msgstr "Проігноровано %d слів із не-ASCII символами"
-#: ../spell.c:6656
#, c-format
msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
msgstr "Стиснено %d з %d вузлів; залишилося %d (%d%%)"
-#: ../spell.c:7340
msgid "Reading back spell file..."
msgstr "Перечитується файл орфографії..."
#. Go through the trie of good words, soundfold each word and add it to
#. the soundfold trie.
-#: ../spell.c:7357
msgid "Performing soundfolding..."
msgstr "Виконується згортання звуків..."
-#: ../spell.c:7368
#, c-format
msgid "Number of words after soundfolding: %<PRId64>"
msgstr "Кількість слів після згортання звуків: %<PRId64>"
-#: ../spell.c:7476
#, c-format
msgid "Total number of words: %d"
msgstr "Повна кількість слів: %d"
-#: ../spell.c:7655
#, c-format
msgid "Writing suggestion file %s ..."
msgstr "Записується файл припущень %s ..."
-#: ../spell.c:7707 ../spell.c:7927
#, c-format
msgid "Estimated runtime memory use: %d bytes"
msgstr "Оцінка споживання пам'яті: %d байт"
-#: ../spell.c:7820
msgid "E751: Output file name must not have region name"
msgstr "E751: Вихідний файл не повинен мати назву регіону"
-#: ../spell.c:7822
msgid "E754: Only up to 8 regions supported"
msgstr "E754: Підтримується тільки до восьми регіонів"
-#: ../spell.c:7846
#, c-format
msgid "E755: Invalid region in %s"
msgstr "E755: Некоректний регіон у %s"
-#: ../spell.c:7907
msgid "Warning: both compounding and NOBREAK specified"
msgstr "Застереження: зазначено обидва `складні слова' і NOBREAK"
-#: ../spell.c:7920
#, c-format
msgid "Writing spell file %s ..."
msgstr "Записується файл орфографії %s ..."
-#: ../spell.c:7925
msgid "Done!"
msgstr "Зроблено!"
-#: ../spell.c:8034
#, c-format
msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' не містить %<PRId64> елементів"
-#: ../spell.c:8074
#, c-format
msgid "Word '%.*s' removed from %s"
msgstr "Слово '%.*s' знищено з %s"
-#: ../spell.c:8117
#, c-format
msgid "Word '%.*s' added to %s"
msgstr "Слово '%.*s' додано до %s"
-#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
msgstr "E763: Символи у слові відрізняються у файлах орфографії"
-#: ../spell.c:8684
msgid "Sorry, no suggestions"
msgstr "Пробачте, немає пропозицій"
-#: ../spell.c:8687
#, c-format
msgid "Sorry, only %<PRId64> suggestions"
msgstr "Пробачте, тільки %<PRId64> пропозицій"
#. for when 'cmdheight' > 1
#. avoid more prompt
-#: ../spell.c:8704
#, c-format
msgid "Change \"%.*s\" to:"
msgstr "Замінити «%.*s» на:"
-#: ../spell.c:8737
#, c-format
msgid " < \"%.*s\""
msgstr " < «%.*s»"
# msgstr "E34: "
-#: ../spell.c:8882
msgid "E752: No previous spell replacement"
msgstr "E752: Немає попередньої заміни"
# msgstr "E333: "
-#: ../spell.c:8925
#, c-format
msgid "E753: Not found: %s"
msgstr "E753: Не знайдено: %s"
-#: ../spell.c:9276
#, c-format
msgid "E778: This does not look like a .sug file: %s"
msgstr "E778: Не схоже на файл .sug: %s"
-#: ../spell.c:9282
#, c-format
msgid "E779: Old .sug file, needs to be updated: %s"
msgstr "E779: Застарілий файл .sug, треба поновити: %s"
-#: ../spell.c:9286
#, c-format
msgid "E780: .sug file is for newer version of Vim: %s"
msgstr "E780: Файл .sug для більш нової версії Vim: %s"
-#: ../spell.c:9295
#, c-format
msgid "E781: .sug file doesn't match .spl file: %s"
msgstr "E781: Файл .sug не відповідає файлу .spl: %s"
-#: ../spell.c:9305
#, c-format
msgid "E782: error while reading .sug file: %s"
msgstr "E782: Помилка читання файлу .sug: %s"
#. This should have been checked when generating the .spl
#. file.
-#: ../spell.c:11575
msgid "E783: duplicate char in MAP entry"
msgstr "E783: Повторено символ у елементі MAP"
# msgstr "E391: "
-#: ../syntax.c:266
msgid "No Syntax items defined for this buffer"
msgstr "Для буфера не визначено елементів синтаксису"
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
#, c-format
msgid "E390: Illegal argument: %s"
msgstr "E390: Неправильний аргумент: %s"
-#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
msgstr "E391: Немає такого синтаксичного кластера: %s"
-#: ../syntax.c:3433
msgid "syncing on C-style comments"
msgstr "синхронізується по коментарях стилю С"
-#: ../syntax.c:3439
msgid "no syncing"
msgstr "без синхронізації"
-#: ../syntax.c:3441
msgid "syncing starts "
msgstr "починається синхронізація за "
-#: ../syntax.c:3443 ../syntax.c:3506
msgid " lines before top line"
msgstr " рядків перед першим рядком"
-#: ../syntax.c:3448
msgid ""
"\n"
"--- Syntax sync items ---"
@@ -5858,7 +4636,6 @@ msgstr ""
"\n"
"--- Елементи синхронізації синтаксису ---"
-#: ../syntax.c:3452
msgid ""
"\n"
"syncing on items"
@@ -5866,7 +4643,6 @@ msgstr ""
"\n"
"синхронізація по елементах"
-#: ../syntax.c:3457
msgid ""
"\n"
"--- Syntax items ---"
@@ -5874,300 +4650,241 @@ msgstr ""
"\n"
"--- Елементи синтаксису ---"
-#: ../syntax.c:3475
#, c-format
msgid "E392: No such syntax cluster: %s"
msgstr "E392: Немає такого синтаксичного кластера: %s"
-#: ../syntax.c:3497
msgid "minimal "
msgstr "мінімальний "
-#: ../syntax.c:3503
msgid "maximal "
msgstr "максимальний "
-#: ../syntax.c:3513
msgid "; match "
msgstr "; збіг "
-#: ../syntax.c:3515
msgid " line breaks"
msgstr " розриви рядків"
-#: ../syntax.c:4076
msgid "E395: contains argument not accepted here"
msgstr "E395: Містить неприйнятні тут аргументи"
# msgstr "E14: "
-#: ../syntax.c:4096
msgid "E844: invalid cchar value"
msgstr "E844: Некоректне значення cchar"
-#: ../syntax.c:4107
msgid "E393: group[t]here not accepted here"
msgstr "E393: group[t]hete тут неприйнятний"
-#: ../syntax.c:4126
#, c-format
msgid "E394: Didn't find region item for %s"
msgstr "E394: Не знайдено елемент регіону для %s"
# msgstr "E396: "
-#: ../syntax.c:4188
msgid "E397: Filename required"
msgstr "E397: Потрібна назва файлу"
-#: ../syntax.c:4221
msgid "E847: Too many syntax includes"
msgstr "E847: Забагато синтаксичних включень"
-#: ../syntax.c:4303
#, c-format
msgid "E789: Missing ']': %s"
msgstr "E789: Пропущено ']': %s"
-#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
msgstr "E398: Пропущено `=': %s"
# ---------------------------------------
-#: ../syntax.c:4666
#, c-format
msgid "E399: Not enough arguments: syntax region %s"
msgstr "E399: Бракує аргументів: синтаксичний регіон %s"
-#: ../syntax.c:4870
msgid "E848: Too many syntax clusters"
msgstr "E848: Забагато синтаксичних кластерів"
-#: ../syntax.c:4954
msgid "E400: No cluster specified"
msgstr "E400: Кластер не вказано"
#. end delimiter not found
-#: ../syntax.c:4986
#, c-format
msgid "E401: Pattern delimiter not found: %s"
msgstr "E401: Кінець зразку не знайдено: %s"
-#: ../syntax.c:5049
#, c-format
msgid "E402: Garbage after pattern: %s"
msgstr "E402: Сміття після зразку: %s"
# msgstr "E402: "
-#: ../syntax.c:5120
msgid "E403: syntax sync: line continuations pattern specified twice"
msgstr ""
"E403: Синтаксична синхронізація: зразок для продовження рядка вказано двічі"
-#: ../syntax.c:5169
#, c-format
msgid "E404: Illegal arguments: %s"
msgstr "E404: Неправильні аргументи: %s"
# msgstr "E404: "
-#: ../syntax.c:5217
#, c-format
msgid "E405: Missing equal sign: %s"
msgstr "E405: Пропущено знак рівності: %s"
# msgstr "E405: "
-#: ../syntax.c:5222
#, c-format
msgid "E406: Empty argument: %s"
msgstr "E406: Порожній аргумент: %s"
# msgstr "E406: "
-#: ../syntax.c:5240
#, c-format
msgid "E407: %s not allowed here"
msgstr "E407: %s тут не дозволено"
-#: ../syntax.c:5246
#, c-format
msgid "E408: %s must be first in contains list"
msgstr "E408: %s має бути першим рядком у списку contains"
-#: ../syntax.c:5304
#, c-format
msgid "E409: Unknown group name: %s"
msgstr "E409: Невідома назва групи: %s"
# msgstr "E409: "
-#: ../syntax.c:5512
#, c-format
msgid "E410: Invalid :syntax subcommand: %s"
msgstr "E410: Неправильна підкоманда :syntax: %s"
-#: ../syntax.c:5854
msgid ""
" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
msgstr ""
" ВСЬОГО К-ТЬ СПІВП. НАЙПОВІЛ. СЕРЕДН. НАЗВА ШАБЛОН"
-#: ../syntax.c:6146
msgid "E679: recursive loop loading syncolor.vim"
msgstr "E679: Рекурсивний цикл читання syncolor.vim"
# msgstr "E410: "
-#: ../syntax.c:6256
#, c-format
msgid "E411: highlight group not found: %s"
msgstr "E411: Групу підсвічування не знайдено: %s"
# msgstr "E411: "
-#: ../syntax.c:6278
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
msgstr "E412: Недостатньо аргументів: «:highlight link %s»"
# msgstr "E412: "
-#: ../syntax.c:6284
#, c-format
msgid "E413: Too many arguments: \":highlight link %s\""
msgstr "E413: Забагато аргументів: «:highlight link %s»"
# msgstr "E413: "
-#: ../syntax.c:6302
msgid "E414: group has settings, highlight link ignored"
msgstr "E414: Грума має settings, highlight link проігноровано"
# msgstr "E414: "
-#: ../syntax.c:6367
#, c-format
msgid "E415: unexpected equal sign: %s"
msgstr "E415: Несподіваний знак рівності: %s"
# msgstr "E415: "
-#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
msgstr "E416: Пропущено знак рівності: %s"
-#: ../syntax.c:6418
#, c-format
msgid "E417: missing argument: %s"
msgstr "E417: Пропущено аргумент: %s"
-#: ../syntax.c:6446
#, c-format
msgid "E418: Illegal value: %s"
msgstr "E418: Неправильне значення: %s"
# msgstr "E418: "
-#: ../syntax.c:6496
msgid "E419: FG color unknown"
msgstr "E419: Невідомий колір тексту"
# msgstr "E419: "
-#: ../syntax.c:6504
msgid "E420: BG color unknown"
msgstr "E420: Невідомий колір фону"
# msgstr "E420: "
-#: ../syntax.c:6564
#, c-format
msgid "E421: Color name or number not recognized: %s"
msgstr "E421: Нерозпізнана назва або номер кольору: %s"
# msgstr "E421: "
-#: ../syntax.c:6714
#, c-format
msgid "E422: terminal code too long: %s"
msgstr "E422: Занадто довгий код терміналу: %s"
# msgstr "E422: "
-#: ../syntax.c:6753
#, c-format
msgid "E423: Illegal argument: %s"
msgstr "E423: Неправильний аргумент: %s"
# msgstr "E423: "
-#: ../syntax.c:6925
msgid "E424: Too many different highlighting attributes in use"
msgstr "E424: Використано забагато різних атрибутів кольору"
-#: ../syntax.c:7427
msgid "E669: Unprintable character in group name"
msgstr "E669: Недруковний символ у назві групи"
# msgstr "E181: "
-#: ../syntax.c:7434
msgid "W18: Invalid character in group name"
msgstr "W18: Некоректний символ у назві групи"
-#: ../syntax.c:7448
msgid "E849: Too many highlight and syntax groups"
msgstr "E849: Забагато груп підсвічування і синтаксису"
# msgstr "E424: "
-#: ../tag.c:104
msgid "E555: at bottom of tag stack"
msgstr "E555: Кінець стеку теґів"
-#: ../tag.c:105
msgid "E556: at top of tag stack"
msgstr "E556: Вершина стеку теґів"
-#: ../tag.c:380
msgid "E425: Cannot go before first matching tag"
msgstr "E425: Це вже найперший відповідний теґ"
# msgstr "E425: "
-#: ../tag.c:504
#, c-format
msgid "E426: tag not found: %s"
msgstr "E426: Теґ не знайдено: %s"
# msgstr "E426: "
-#: ../tag.c:528
msgid " # pri kind tag"
msgstr " # прі тип теґ"
-#: ../tag.c:531
msgid "file\n"
msgstr "файл\n"
-#: ../tag.c:829
msgid "E427: There is only one matching tag"
msgstr "E427: Лише один відповідний теґ"
# msgstr "E427: "
-#: ../tag.c:831
msgid "E428: Cannot go beyond last matching tag"
msgstr "E428: Це вже останній відповідний теґ"
# msgstr "E428: "
-#: ../tag.c:850
#, c-format
msgid "File \"%s\" does not exist"
msgstr "Файл «%s» не існує"
#. Give an indication of the number of matching tags
-#: ../tag.c:859
#, c-format
msgid "tag %d of %d%s"
msgstr "теґ %d з %d%s"
-#: ../tag.c:862
msgid " or more"
msgstr " або більше"
-#: ../tag.c:864
msgid " Using tag with different case!"
msgstr " Використано теґ, не розрізняючи великі й малі літери"
-#: ../tag.c:909
#, c-format
msgid "E429: File \"%s\" does not exist"
msgstr "E429: Файл «%s» не існує"
# msgstr "E429: "
#. Highlight title
-#: ../tag.c:960
msgid ""
"\n"
" # TO tag FROM line in file/text"
@@ -6175,85 +4892,68 @@ msgstr ""
"\n"
" # ДО теґу З рядка у файлі/тексті"
-#: ../tag.c:1303
#, c-format
msgid "Searching tags file %s"
msgstr "Шукається у файлі теґів %s"
-#: ../tag.c:1545
msgid "Ignoring long line in tags file"
msgstr "Ігнорується довгий рядок у файлі з позначками"
# msgstr "E430: "
-#: ../tag.c:1915
#, c-format
msgid "E431: Format error in tags file \"%s\""
msgstr "E431: Помилка формату у файлі теґів «%s»"
# msgstr "E431: "
-#: ../tag.c:1917
#, c-format
msgid "Before byte %<PRId64>"
msgstr "Перед байтом %<PRId64>"
-#: ../tag.c:1929
#, c-format
msgid "E432: Tags file not sorted: %s"
msgstr "E432: Файл теґів не впорядкований: %s"
# msgstr "E432: "
#. never opened any tags file
-#: ../tag.c:1960
msgid "E433: No tags file"
msgstr "E433: Немає файлу теґів"
# msgstr "E433: "
-#: ../tag.c:2536
msgid "E434: Can't find tag pattern"
msgstr "E434: Не вдалося знайти зразок теґу"
# msgstr "E434: "
-#: ../tag.c:2544
msgid "E435: Couldn't find tag, just guessing!"
msgstr "E435: Не вдалося знайти теґ, тільки припущення!"
-#: ../tag.c:2797
#, c-format
msgid "Duplicate field name: %s"
msgstr "Назва поля повторюється: %s"
# msgstr "E435: "
-#: ../term.c:1442
msgid "' not known. Available builtin terminals are:"
msgstr "' не відомий. Вбудовані термінали:"
-#: ../term.c:1463
msgid "defaulting to '"
msgstr "початково '"
-#: ../term.c:1731
msgid "E557: Cannot open termcap file"
msgstr "E557: Не вдалося відкрити файл можливостей терміналів"
-#: ../term.c:1735
msgid "E558: Terminal entry not found in terminfo"
msgstr "E558: Немає інформації про термінал"
-#: ../term.c:1737
msgid "E559: Terminal entry not found in termcap"
msgstr "E559: Немає інформації про можливості терміналу"
-#: ../term.c:1878
#, c-format
msgid "E436: No \"%s\" entry in termcap"
msgstr "E436: Немає запису «%s» про можливості терміналу"
-#: ../term.c:2249
msgid "E437: terminal capability \"cm\" required"
msgstr "E437: Потрібна можливість терміналу «cm»"
#. Highlight title
-#: ../term.c:4376
msgid ""
"\n"
"--- Terminal keys ---"
@@ -6261,174 +4961,136 @@ msgstr ""
"\n"
"--- Клавіші терміналу ---"
-#: ../ui.c:481
msgid "Vim: Error reading input, exiting...\n"
msgstr "Vim: Помилка читання вводу, робота завершується...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Кількість рядків несподівано змінилася"
+msgstr "E881: Кількість рядків несподівано змінилася"
-#: ../undo.c:627
#, c-format
msgid "E828: Cannot open undo file for writing: %s"
msgstr "E828: Не вдалося відкрити файл історії для запису: %s"
-#: ../undo.c:717
#, c-format
msgid "E825: Corrupted undo file (%s): %s"
msgstr "E825: Файл історії пошкоджено (%s): %s"
-#: ../undo.c:1039
msgid "Cannot write undo file in any directory in 'undodir'"
msgstr "Не вдалося записати файл історії у жодну з директорій у 'undodir'"
-#: ../undo.c:1074
#, c-format
msgid "Will not overwrite with undo file, cannot read: %s"
msgstr "Will not overwrite with undo file, cannot read: %s"
-#: ../undo.c:1092
#, c-format
msgid "Will not overwrite, this is not an undo file: %s"
msgstr "Не можна перезаписати, це не файл історії: %s"
-#: ../undo.c:1108
msgid "Skipping undo file write, nothing to undo"
msgstr "Файл історії не записується, нічого повертати"
-#: ../undo.c:1121
#, c-format
msgid "Writing undo file: %s"
msgstr "Записується файл історії: %s"
-#: ../undo.c:1213
#, c-format
msgid "E829: write error in undo file: %s"
msgstr "E829: Помилка запису у файлі історії: %s"
-#: ../undo.c:1280
#, c-format
msgid "Not reading undo file, owner differs: %s"
msgstr "Файл історії прочитано не буде, власник інший: %s"
-#: ../undo.c:1292
#, c-format
msgid "Reading undo file: %s"
msgstr "Читається файл історії: %s"
-#: ../undo.c:1299
#, c-format
msgid "E822: Cannot open undo file for reading: %s"
msgstr "E822: Не вдалося відкрити файл для читання: %s"
# msgstr "E333: "
-#: ../undo.c:1308
#, c-format
msgid "E823: Not an undo file: %s"
msgstr "E823: Не файл історії: %s"
-#: ../undo.c:1313
#, c-format
msgid "E824: Incompatible undo file: %s"
msgstr "E824: Несумісний файл історії: %s"
-#: ../undo.c:1328
msgid "File contents changed, cannot use undo info"
msgstr "Вміст файлу змінився, не можна використати інформацію про історію"
-#: ../undo.c:1497
#, c-format
msgid "Finished reading undo file %s"
msgstr "Закінчено читання файлу історії %s"
-#: ../undo.c:1586 ../undo.c:1812
msgid "Already at oldest change"
msgstr "Вже на найстаршій зміні"
-#: ../undo.c:1597 ../undo.c:1814
msgid "Already at newest change"
msgstr "Вже на найновішій зміні"
-#: ../undo.c:1806
#, c-format
msgid "E830: Undo number %<PRId64> not found"
msgstr "E830: Зміну %<PRId64> не знайдено в історії"
-#: ../undo.c:1979
msgid "E438: u_undo: line numbers wrong"
msgstr "E438: u_undo: неправильні номери рядків"
-#: ../undo.c:2183
msgid "more line"
msgstr "додано рядок"
-#: ../undo.c:2185
msgid "more lines"
msgstr "рядків додано"
-#: ../undo.c:2187
msgid "line less"
msgstr "знищено рядок"
-#: ../undo.c:2189
msgid "fewer lines"
msgstr "рядків знищено"
# msgstr "E438: "
-#: ../undo.c:2193
msgid "change"
msgstr "зміна"
# msgstr "E438: "
-#: ../undo.c:2195
msgid "changes"
msgstr "змін"
-#: ../undo.c:2225
#, c-format
msgid "%<PRId64> %s; %s #%<PRId64> %s"
msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-#: ../undo.c:2228
msgid "before"
msgstr "перед"
-#: ../undo.c:2228
msgid "after"
msgstr "після"
-#: ../undo.c:2325
msgid "Nothing to undo"
msgstr "Немає нічого скасовувати"
-#: ../undo.c:2330
msgid "number changes when saved"
msgstr "номер зміни час збережено"
-#: ../undo.c:2360
#, c-format
msgid "%<PRId64> seconds ago"
msgstr "%<PRId64> секунд тому"
# msgstr "E406: "
-#: ../undo.c:2372
msgid "E790: undojoin is not allowed after undo"
msgstr "E790: Не можна виконати undojoin після undo"
-#: ../undo.c:2466
msgid "E439: undo list corrupt"
msgstr "E439: Список скасування пошкоджено"
# msgstr "E439: "
-#: ../undo.c:2495
msgid "E440: undo line missing"
msgstr "E440: Відсутній рядок скасування"
-#: ../version.c:600
msgid ""
"\n"
"Included patches: "
@@ -6436,7 +5098,6 @@ msgstr ""
"\n"
"Включені латки: "
-#: ../version.c:627
msgid ""
"\n"
"Extra patches: "
@@ -6444,11 +5105,9 @@ msgstr ""
"\n"
"Додаткові латки: "
-#: ../version.c:639 ../version.c:864
msgid "Modified by "
msgstr "Змінив "
-#: ../version.c:646
msgid ""
"\n"
"Compiled "
@@ -6456,11 +5115,9 @@ msgstr ""
"\n"
"Скомпілював "
-#: ../version.c:649
msgid "by "
msgstr " "
-#: ../version.c:660
msgid ""
"\n"
"Huge version "
@@ -6468,1921 +5125,126 @@ msgstr ""
"\n"
"Гігантська версія "
-#: ../version.c:661
msgid "without GUI."
msgstr "без GUI."
-#: ../version.c:662
msgid " Features included (+) or not (-):\n"
msgstr " Включені (+) або не включені (-) компоненти:\n"
-#: ../version.c:667
msgid " system vimrc file: \""
msgstr " системний vimrc: \""
-#: ../version.c:672
msgid " user vimrc file: \""
msgstr " vimrc користувача: \""
-#: ../version.c:677
msgid " 2nd user vimrc file: \""
msgstr " другий vimrc користувача: \""
-#: ../version.c:682
msgid " 3rd user vimrc file: \""
msgstr " третій vimrc користувача: \""
-#: ../version.c:687
msgid " user exrc file: \""
msgstr " exrc користувача: \""
-#: ../version.c:692
msgid " 2nd user exrc file: \""
msgstr " другий exrc користувача: \""
-#: ../version.c:699
msgid " fall-back for $VIM: \""
msgstr " заміна для $VIM: \""
-#: ../version.c:705
msgid " f-b for $VIMRUNTIME: \""
msgstr " заміна для $VIMRUNTIME: \""
-#: ../version.c:709
msgid "Compilation: "
msgstr "Скомпільовано: "
-#: ../version.c:712
msgid "Linking: "
msgstr "Скомпоновано: "
-#: ../version.c:717
msgid " DEBUG BUILD"
msgstr " ВЕРСІЯ ДЛЯ НАЛАГОДЖЕННЯ"
-#: ../version.c:767
msgid "VIM - Vi IMproved"
msgstr "VIM - Покращений Vi"
-#: ../version.c:769
msgid "version "
msgstr "версія "
-#: ../version.c:770
msgid "by Bram Moolenaar et al."
msgstr "автор: Bram Moolenaar та ін."
-#: ../version.c:774
msgid "Vim is open source and freely distributable"
msgstr "Vim — це відкрита й вільно розповсюджувана програма"
-#: ../version.c:776
msgid "Help poor children in Uganda!"
msgstr "Допоможіть сиротам з Уганди!"
-#: ../version.c:777
msgid "type :help iccf<Enter> for information "
msgstr ":help iccf<Enter> подробиці "
-#: ../version.c:779
msgid "type :q<Enter> to exit "
msgstr ":q<Enter> вихід з Vim "
-#: ../version.c:780
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ":help<Enter> або <F1> перегляд допомоги "
-#: ../version.c:781
msgid "type :help version7<Enter> for version info"
msgstr ":help version7<Enter> інформація про версію "
-#: ../version.c:784
msgid "Running in Vi compatible mode"
msgstr "Ви працюєте в режимі сумісному з Vi"
-#: ../version.c:785
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ":set nocp<Enter> режим несумісний з Vi "
-#: ../version.c:786
msgid "type :help cp-default<Enter> for info on this"
msgstr ":help cp-default<Enter> інформація про сумісність"
-#: ../version.c:827
msgid "Sponsor Vim development!"
msgstr "Підтримайте розробку редактора Vim!"
-#: ../version.c:828
msgid "Become a registered Vim user!"
msgstr "Станьте зареєстрованим користувачем Vim!"
-#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
msgstr ":help sponsor<Enter> подальша інформація "
-#: ../version.c:832
msgid "type :help register<Enter> for information "
msgstr ":help register<Enter> подальша інформація "
-#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
msgstr "меню Допомога->Спонсор/Реєстрація подробиці "
# msgstr "E444: "
-#: ../window.c:119
msgid "Already only one window"
msgstr "Це вже єдине вікно"
-#: ../window.c:224
msgid "E441: There is no preview window"
msgstr "E441: Немає вікна перегляду"
# msgstr "E441: "
-#: ../window.c:559
msgid "E442: Can't split topleft and botright at the same time"
msgstr "E442: Не вдалося одночасно розбити topleft і botright"
# msgstr "E442: "
-#: ../window.c:1228
msgid "E443: Cannot rotate when another window is split"
msgstr "E443: Не вдалося перемістити вікно, заважають інші"
# msgstr "E443: "
-#: ../window.c:1803
msgid "E444: Cannot close last window"
msgstr "E444: Не вдалося закрити останнє вікно"
# msgstr "E443: "
-#: ../window.c:1810
msgid "E813: Cannot close autocmd window"
msgstr "E813: Не вдалося закрити вікно autocmd"
# msgstr "E443: "
-#: ../window.c:1814
msgid "E814: Cannot close window, only autocmd window would remain"
msgstr "E814: Не вдалося закрити вікно, залишилося б тільки вікно autocmd"
-#: ../window.c:2717
msgid "E445: Other window contains changes"
msgstr "E445: У іншому вікні є зміни"
# msgstr "E445: "
-#: ../window.c:4805
msgid "E446: No file name under cursor"
msgstr "E446: Немає назви файлу над курсором"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: Викликано bf_key_init() з порожнім паролем"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Неправильне використання порядку байтів Blowfish (BE/LE)"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: Не пройшла перевірка sha256"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Не пройшла перевірка Blowfish"
-
-#~ msgid "Patch file"
-#~ msgstr "Латка"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&O:Гаразд\n"
-#~ "&C:Скасувати"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Немає з'єднання із сервером Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Не вдалося відіслати до %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Не вдалося прочитати відповідь сервера"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Не вдалося надіслати клієнту"
-
-#~ msgid "Save As"
-#~ msgstr "Зберегти як"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Прочитати скрипт Vim"
-
-#~ msgid "Edit File"
-#~ msgstr "Редагувати Файл"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (НЕ ЗНАЙДЕНО)"
-
-#~ msgid "unknown"
-#~ msgstr "Невідомо"
-
-# msgstr "E185: "
-#~ msgid "Edit File in new window"
-#~ msgstr "Редагувати файл у новому вікні"
-
-#~ msgid "Append File"
-#~ msgstr "Дописати файл"
-
-# msgstr "E187: "
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "Позиція вікна: X %d, Y %d"
-
-# msgstr "E188: "
-#~ msgid "Save Redirection"
-#~ msgstr "Зберегти переадресований вивід"
-
-#~ msgid "Save View"
-#~ msgstr "Зберегти вигляд"
-
-#~ msgid "Save Session"
-#~ msgstr "Зберегти сеанс"
-
-#~ msgid "Save Setup"
-#~ msgstr "Зберегти налаштування"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< не доступна без можливості +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: У цій версії немає диграфів"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "є пристроєм (вимкнено опцією 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "Читається з stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[зашифровано]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Файл зашифровано невідомим методом"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans не дозволяє записувати у незмінені буфери"
-
-# msgstr "E391: "
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "Часткові записи заборонені для буферів NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "Запис до пристрою заборонено опцією 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Гілку ресурсів можна втратити (! щоб не зважати)"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<не відкривається> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: не вдалося отримати шрифт %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: не вдалося повернутися в поточний каталог"
-
-#~ msgid "Pathname:"
-#~ msgstr "Шлях:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: не вдалося отримати поточний каталог"
-
-#~ msgid "OK"
-#~ msgstr "Гаразд"
-
-#~ msgid "Cancel"
-#~ msgstr "Скасувати"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Діалог Vim"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "Scrollbar Widget: Не вдалося визначити розмір скороченої картинки."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: Не вдалося створити BalloonEval з повідомленням і функцією"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Не вдалося створити новий процес для GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Дочірній процес не зміг запустити GUI"
-
-# msgstr "E228: "
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Не вдалося запустити GUI"
-
-# msgstr "E229: "
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Не вдалося прочитати з «%s»"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: Не вдалося запустити GUI, не знайдено шрифт"
-
-# msgstr "E230: "
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Некоректний 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Значення 'imactivatekey' некоректне"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Не вдалося отримати колір %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Немає над курсором, пошук триває"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Методи введення"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - Знайти й замінити..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - Пошук..."
-
-#~ msgid "Find what:"
-#~ msgstr "Знайти:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Замінити на:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Лише повне слово"
-
-#~ msgid "Match case"
-#~ msgstr "Зважати на регістр"
-
-#~ msgid "Direction"
-#~ msgstr "Напрям"
-
-#~ msgid "Up"
-#~ msgstr "Вгору"
-
-#~ msgid "Down"
-#~ msgstr "Униз"
-
-#~ msgid "Find Next"
-#~ msgstr "Наступне"
-
-#~ msgid "Replace"
-#~ msgstr "Замінити"
-
-#~ msgid "Replace All"
-#~ msgstr "Замінити усі"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: Отримав запит «die» від менеджера сесій\n"
-
-#~ msgid "Close"
-#~ msgstr "Закрити"
-
-#~ msgid "New tab"
-#~ msgstr "Нова вкладка"
-
-#~ msgid "Open Tab..."
-#~ msgstr "Відкрити вкладку..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: Несподівано знищилося головне вікно\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&F:Фільтрувати"
-
-#~ msgid "&Cancel"
-#~ msgstr "&C:Скасувати"
-
-#~ msgid "Directories"
-#~ msgstr "Каталоги"
-
-#~ msgid "Filter"
-#~ msgstr "Фільтр"
-
-#~ msgid "&Help"
-#~ msgstr "&H:Допомога"
-
-#~ msgid "Files"
-#~ msgstr "Файли"
-
-#~ msgid "&OK"
-#~ msgstr "&O:Гаразд"
-
-#~ msgid "Selection"
-#~ msgstr "Виділення"
-
-#~ msgid "Find &Next"
-#~ msgstr "&N:Знайти далі"
-
-#~ msgid "&Replace"
-#~ msgstr "&R:Замінити"
-
-#~ msgid "Replace &All"
-#~ msgstr "&A:Замінити усі"
-
-#~ msgid "&Undo"
-#~ msgstr "&U:Скасувати"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Не вдалося знайти вікно «%s»"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Аргумент не підтримується: «-%s»; користуйтесь версією з OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Не вдалося відкрити вікно всередині програми MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Закрити вкладку"
-
-#~ msgid "Open tab..."
-#~ msgstr "Відкрити вкладку..."
-
-# msgstr "E245: "
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "Знайти рядок ('\\\\' щоб знайти '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Знайти і замінити ('\\\\' щоб знайти '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Немає"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Каталог\t*.нічого\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Немає вільних комірок у палітрі, деякі кольори можуть бути "
-#~ "неправильні"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Шрифти для цих символів відсутні у наборі %s:"
-
-# msgstr "E250: "
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Назва набору шрифтів: %s"
-
-# msgstr "E252: "
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Шрифт '%s' не є моноширинним"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Назва набору шрифтів: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Шрифт0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Шрифт1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "Ширина шрифту%<PRId64> не більша удвічі за ширину шрифту0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "Ширина шрифту0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "Ширина шрифту1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Некоректна специфікація шрифту"
-
-#~ msgid "&Dismiss"
-#~ msgstr "&D:Припинити"
-
-#~ msgid "no specific match"
-#~ msgstr "немає конкретного збігу"
-
-# msgstr "E234: "
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - Вибір шрифту"
-
-#~ msgid "Name:"
-#~ msgstr "Назва:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Показати розмір у пунктах"
-
-#~ msgid "Encoding:"
-#~ msgstr "Кодування:"
-
-#~ msgid "Font:"
-#~ msgstr "Шрифт:"
-
-#~ msgid "Style:"
-#~ msgstr "Стиль:"
-
-#~ msgid "Size:"
-#~ msgstr "Розмір:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Помилка автомату Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: помилка stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: Не вдалося відкрити базу даних cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: Не вдалося отримати інформацію з бази даних cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Не вдалося завантажити бібліотеку Lua"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "не вдалося зберегти інформацію для скасування"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Вибачте, ця команда вимкнена, бібліотеки MzScheme не можуть бути "
-#~ "завантажені."
-
-#~ msgid "invalid expression"
-#~ msgstr "некоректний вираз"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "обробку виразів вимкнено під час компіляції"
-
-#~ msgid "hidden option"
-#~ msgstr "прихована опція"
-
-#~ msgid "unknown option"
-#~ msgstr "невідома опція"
-
-#~ msgid "window index is out of range"
-#~ msgstr "некоректний номер вікна"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "не вдалося відкрити буфер"
-
-#~ msgid "cannot delete line"
-#~ msgstr "неможливо знищити рядок"
-
-#~ msgid "cannot replace line"
-#~ msgstr "неможливо замінити рядок"
-
-#~ msgid "cannot insert line"
-#~ msgstr "не вдалося вставити рядок"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "більше ніж один рядок"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "не вдалося перетворити значення Scheme у Vim"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Помилка Vim: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Помилка Vim"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "буфер непридатний"
-
-#~ msgid "window is invalid"
-#~ msgstr "вікно непридатне"
-
-#~ msgid "linenr out of range"
-#~ msgstr "номер рядка за межами файлу"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "не дозволено у пісочниці Vim"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: Не можна використати :py і :py3 в одному сеансі"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Вибачте, ця команда вимкнена, бібліотека Python не може бути "
-#~ "завантажена."
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: Не можна використати :py і :py3 в одному сеансі"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Не можна рекурсивно викликати Python"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ має бути екземпляром String"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Вибачте, ця команда вимкнена, бібліотека Ruby не може бути "
-#~ "завантажена."
-
-# msgstr "E414: "
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: несподіваний return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: несподіваний next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: несподіваний break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: несподіваний redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: retry поза rescue"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: Необроблений виняток"
-
-# msgstr "E233: "
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Невідомий статус longjmp: %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Перемкнути реалізацію/визначення"
-
-#~ msgid "Show base class of"
-#~ msgstr "Знайти базовий клас"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Показати замінені функції-члени"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Прочитати з файлу"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Отримати з проекту"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Отримати з усіх проектів"
-
-#~ msgid "Retrieve"
-#~ msgstr "Отримати"
-
-#~ msgid "Show source of"
-#~ msgstr "Джерело"
-
-#~ msgid "Find symbol"
-#~ msgstr "Знайти символ"
-
-#~ msgid "Browse class"
-#~ msgstr "Переглянути клас"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Показати клас в ієрархії"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Показати клас в обмеженій ієрархії"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref вказує на"
-
-#~ msgid "Xref referred by"
-#~ msgstr "На Xref вказано з"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref має"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref використано"
-
-#~ msgid "Show docu of"
-#~ msgstr "Показати docu"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Створити docu для"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Не вдалося з'єднатися зі SNiFF+. Перевірте оточення (sniffemacs має бути "
-#~ "у $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Помилка під час читання. Від'єднано"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ зараз "
-
-#~ msgid "not "
-#~ msgstr "не "
-
-#~ msgid "connected"
-#~ msgstr "під'єднаний"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Невідомий запит до SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Помилка з'єднання до SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ не під'єднано"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Не є буфером SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: Помилка запису. Від'єднано"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "неправильна назва буфера"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ще не реалізовано"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "не вдалося встановити рядки"
-
-#~ msgid "invalid mark name"
-#~ msgstr "неправильна назва позначки"
-
-# msgstr "E19: "
-#~ msgid "mark not set"
-#~ msgstr "помітку не вказано"
-
-#~ msgid "row %d column %d"
-#~ msgstr "рядок %d колонка %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "Не вдалося вставити/додати рядок"
-
-#~ msgid "line number out of range"
-#~ msgstr "номер рядка за межами файлу"
-
-#~ msgid "unknown flag: "
-#~ msgstr "невідомий прапорець: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "Невідома vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "перервано з клавіатури"
-
-#~ msgid "vim error"
-#~ msgstr "помилка Vim"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "не вдалося створити команду вікна/буфера: об'єкт знищується"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "Не вдалося зареєструвати подію: буфер/вікно уже знищується"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: ФАТАЛЬНА ПОМИЛКА TCL: можливо пошкоджено список посилань!? Будь "
-#~ "ласка, повідомте у vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "Не вдалося зареєструвати команду події: посилання на буфер/вікно не "
-#~ "знайдено"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Вибачте, ця команда вимкнена, бібліотека Tcl не може бути "
-#~ "завантажена."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Код виходу %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "не вдалося дістати рядок"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Не вдалося зареєструвати назву сервера команд"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Не вдалося відіслати команду до програми-цілі"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: Використано некоректний ідентифікатор сервера: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: Реквізит реєстру зразку VIM сформований неправильно. Знищено!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans не підтримується з цим GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "Ця версія Vim не була скомпільована з підтримкою порівняння."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "Не можна використати '-nb': не дозволено під час компіляції\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: Помилка: Не вдалося запустити gvim для NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо регістр ігнорується, додайте / спереду щоб прапорець був у верхньому "
-#~ "регістрі."
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tЗареєструвати цей gvim для OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tСкасувати реєстрацію цього gvim для OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tЗапустити GUI (ніби «gvim»)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f чи --nofork\tПередній план: тримати термінал після запуску GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tНе використовувати newcli для відкриття вікна"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <пристрій>\t\t\tВикористовувати <пристрій> для вводу/виводу"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-u <gvimrc>\t\tВикористати поданий файл замість .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tРедагувати зашифровані файли"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <дисплей>\tПід'єднати vim до заданого дисплею сервера X"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tНе з'єднуватися з X сервером"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr ""
-#~ "--remote <файли>\tРедагувати <файли> на сервері Vim, якщо це можливо"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-silent <файли> Те саме, тільки не скаржитися на відсутність "
-#~ "сервера"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <файли> ..., але зачекати поки усі файли будуть "
-#~ "відредаговані"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <файли> Те саме, тільки не скаржитися, якщо сервера "
-#~ "немає"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <файли> Так само, як --remote, але по "
-#~ "вкладці на файл"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <символи> Відіслати <символи> серверу і завершити роботу"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr ""
-#~ "--remote-expr <вираз> Виконати <вираз> у сервері Vim і надрукувати "
-#~ "результат"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr ""
-#~ "--serverlist\t\tПоказати список наявних серверів Vim і завершити роботу"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <назва>\tНадіслати до/стати Vim сервером з <назвою>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Аргументи для gvim (версія Motif)\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Аргументи для gvim (версія neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Аргументи для gvim (версія Athena)\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <дисплей>\tВиконати vim на заданому <дисплеї>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tЗапустити Vim і згорнути його вікно"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <колір>\tВикористати <колір> для фону (також: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <колір>\tВикористати <колір> для звичайного тексту (також: -"
-#~ "fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr ""
-#~ "-font <шрифт>\tВикористати <шрифт> для звичайного тексту (також: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <шрифт>\tВикористати <шрифт> для жирного тексту"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <шрифт>\tВикористати <шрифт> для похилого тексту"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <геом>\tЗадати розміри й положення (також: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <товщ>\tВстановити товщину меж <товщ> (також: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <товщ> Встановити товщину лінійки зсуву (також: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <висота>\tВстановити висоту меню <висота> (також: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tОбернути кольори (також: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tНе обертати кольори (також: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <ресурс>\t\tВстановити зазначений ресурс"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Аргументи gvim (версія GTK+)\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <дисплей>\tВиконати vim на <дисплеї> (також: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr ""
-#~ "--role <роль>\tВстановити унікальну роль для ідентифікації головного вікна"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tВідкрити Vim в іншому елементі інтерфейсу GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "--echo-wid\t\tХай gvim надрукує ідентифікатор вікна на stdout"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <заголовок батька>\tВідкрити Vim всередині батьківського вікна"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tВідкрити Vim всередині іншого елементу win32"
-
-#~ msgid "No display"
-#~ msgstr "Немає дисплею"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Не вдалося відіслати.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Не вдалося відіслати. Спроба виконати на місці\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "відредаговано %d з %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Немає дисплею: Відіслати вираз не вдалося.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Відіслати вираз не вдалося.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: Некоректна кодова сторінка"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Не вдалося встановити значення контексту вводу"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Не вдалося створити контекст вводу"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Не вдалося створити метод вводу"
-
-# msgstr "E286: "
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr ""
-#~ "E287: Застереження: Не вдалося встановити в методі вводу подію знищення"
-
-# msgstr "E287: "
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: Метод вводу не підтримує стилі"
-
-# msgstr "E288: "
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: Метод вводу не підтримує відредаговані типи"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: Помилка поновлення шифрування файлу обміну"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s зашифровано, а ця версія Vim не підтримує шифрування"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Файл обміну зашифрований: «%s»"
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо ви задали новий ключ шифру, але не записали текстовий файл,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "введіть новий ключ шифру."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо ви записали текстовий файл після зміни ключа шифру, натисніть enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "щоб використати однаковий ключ для текстового файлу та файлу обміну"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "Для текстового файлу використовується ключ шифру з файлу обміну.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [не придатний для цієї версії Vim]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "Відірвати це меню"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Вибрати каталог"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Запам'ятати файл"
-
-#~ msgid "Open File dialog"
-#~ msgstr "Відкрити файл"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: Вибачте, але в консолі немає діалогу вибору файлу"
-
-#~ msgid "ERROR: "
-#~ msgstr "ПОМИЛКА: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[байт] всього розм/знищ. %<PRIu64>/%<PRIu64>, викор. %<PRIu64>, макс. "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[виклики] усього re/malloc() - %<PRIu64>, усього free() - %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: Рядок стає занадто довгим"
-
-# msgstr "E340: "
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Внутрішня помилка: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Неправильний вигляд миші"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "Вкажіть ключ шифру: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "Повторіть ключ: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Ключі не однакові!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Не вдалося з'єднатися із Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Не вдалося з'єднатися із Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: Неправильний режим доступу до файлу інформації про з'єднання з "
-#~ "NetBenans: «%s»"
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "читається з сокета Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Втрачено зв'язок із NetBeans для буфера %<PRId64>"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans не підтримується з цим GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans вже під'єднано"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s тільки для читання (! щоб не зважати)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Можливість eval недоступна"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "Звільнено рядків: %<PRId64>"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: Не вдалося змінити term в GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: Застосуйте «:gui» для запуску GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Не можна змінити в GUI GTK+ 2"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Некоректний(і) шрифт(и)"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: Не вдалося вибрати набір шрифтів"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Неправильний набір шрифтів"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: Не вдалося використати розширений шрифт"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Некоректний розширений шрифт"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Миша не підтримується"
-
-# msgstr "E358: "
-#~ msgid "cannot open "
-#~ msgstr "не вдалося відкрити "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Не вдалося відкрити вікно!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Потрібна Amigados 2.04 або пізніша\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Потрібно %s версії %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Не вдалося відкрити NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Не вдалося створити "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim завершує роботу з %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "не можу змінити режим консолі ?!\n"
-
-# msgstr "E359: "
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: не консоль??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Не вдалося запустити оболонку з опцією -f"
-
-# msgstr "E360: "
-#~ msgid "Cannot execute "
-#~ msgstr "Не вдалося виконати "
-
-#~ msgid "shell "
-#~ msgstr "оболонку "
-
-#~ msgid " returned\n"
-#~ msgstr " повернуто\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE замалий"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "Помилка вводу/виводу"
-
-#~ msgid "Message"
-#~ msgstr "Повідомлення"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' не 80, не можна виконувати зовнішні команди"
-
-# msgstr "E364: "
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Не вдалося вибрати принтер"
-
-#~ msgid "to %s on %s"
-#~ msgstr "на %s з %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Невідомий шрифт принтера: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: Помилка друку: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "Друкується '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: Некоректна назва набору символів «%s» у назві шрифту «%s»"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Помилковий символ %c в назві шрифту «%s»"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "На відкриття дисплею X пішло %<PRId64> мілісекунд"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Помилка X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "Дисплей Х не пройшов перевірку"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Сплив час очікування відкриття дисплею Х"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Не вдалося запустити оболонку `sh'\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Не можна створити канали\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Не вдалося роздвоїтися\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Команда закінчила виконання\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP втратив з'єднання ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Не вдалося відкрити дисплей X"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP обробляється запит 'збережи себе'"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP відкривається з'єднання"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP спостереження за з'єднанням з ICE не вдалося"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP не вдалося SmcOpenConnection: %s"
-
-#~ msgid "At line"
-#~ msgstr "Рядок:"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Не вдалося завантажити vim32.dll"
-
-#~ msgid "VIM Error"
-#~ msgstr "Помилка VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Не вдалося виправити вказівники на функції DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "оболонка повернула %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: Виявлено подію %s\n"
-
-#~ msgid "close"
-#~ msgstr "close"
-
-#~ msgid "logoff"
-#~ msgstr "logoff"
-
-#~ msgid "shutdown"
-#~ msgstr "shutdown"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Команду не знайдено"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "Файл VIMRUN.EXE не знайдено у шляху пошуку.\n"
-#~ "Зовнішні команди не будуть призупинені після виконання.\n"
-#~ "Гляньте :help win32-vimrun щоб отримати подробиці."
-
-#~ msgid "Vim Warning"
-#~ msgstr "Застереження Vim"
-
-# msgstr "E231: "
-#~ msgid "Error file"
-#~ msgstr "Файл помилок"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: Не вдалося побудувати NFA з класом еквівалентності!"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (NFA) Не вдалося отримати пам’ять для обходу гілок!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Застереження: Не вдалося знайти список слів «%s_%s.spl» чи «%s_ascii.spl»"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "Перетворення у %s не підтримується"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: Недостатньо пам’яті, список слів буде неповним"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Шлях файлу теґів скорочено до %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "запущено нову оболонку\n"
-
-# msgstr "E242: "
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "Використано CUT_BUFFER0 замість порожнього виділення"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Скасування буде неможливе, все одно продовжити"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Незашифрований файл має зашифрований файл історії: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Не вдалося розшифрувати файл історії: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Файл історії зашифрований: %s"
-
-# msgstr "E440: "
-# ---------------------------------------
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія з GUI для 16/32-розрядної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія з GUI для 64-розрядної MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія з GUI для 32-розрядної Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " в режимі Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " з підтримкою OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Консольна версія для 64-розрядної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Консольна версія для 32-розрядної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для 16-розрядної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для 32-розрядної MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для 16-розрядної MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Версія для OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Велика версія "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Нормальна версія "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Мала версія "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Крихітна версія "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "з GUI GTK2-GNOME."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "з GUI GTK2."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "з GUI X11-Motif."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "з GUI X11-neXtaw."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "з GUI X11-Athena."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "з GUI Photon."
-
-#~ msgid "with GUI."
-#~ msgstr "з GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "з GUI Carbon."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "з GUI Cocoa."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "з (класичним) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " системний gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc користувача: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "другий gvimrc користувача: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "третій gvimrc користувача: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " системне меню: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "Компілятор: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "меню Help->Orphans подальша інформація "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Без режимів, текст що набрано вставляється"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "меню Edit->Global Settings->Toggle Insert Mode "
-
-#~ msgid " for two modes "
-#~ msgstr " для двох режимів "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "меню Edit->Global Settings->Toggle Vi Compatible "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " щоб починати в режимі сумісності з Vi"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "ЗАСТЕРЕЖЕННЯ: Ви користуєтеся Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr ":help windows95<Enter> інформація про це "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Не вдалося завантажити бібліотеку %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Вибачте, ця команда вимкнена, бібліотека Perl не може бути завантажена."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: Обчислення виразів Perl заборонене у пісочниці без модуля Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Редагувати у (&m)різних Vim"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Редагувати у одному &Vim"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Порівняти з допомогою Vim"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Редагувати за допомогою &Vim"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Редагувати у вже запущеному Vim - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Редагує вибрані файли з допомогою Vim"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "Помилка створення процесу, перевірте чи є gvim у шляху пошуку!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "помилка gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "Шлях занадто довгий!"
-
-# msgstr "E233: "
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Невідомий набір шрифтів: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Невідомий шрифт: %s"
-
-# msgstr "E235: "
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Шрифт «%s» не моноширинний"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Не вдалося завантажити бібліотечну функцію %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: Не можна використати іврит: Не ввімкнено під час компіляції\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Не можна використати фарсі: Не ввімкнено під час компіляції\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E800: Не можна використати арабську мову: Не ввімкнено під час "
-#~ "компіляції\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: Немає зареєстрованих серверів з назвою «%s»"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: Не вдалося відкрити дисплей"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Отримано некоректний вираз"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Не можна змінити захищений регіон"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans не дозволяє змінювати захищені від запису файли"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Для «%s» потрібен ключ: "
-
-# msgstr "E406: "
-#~ msgid "empty keys are not allowed"
-#~ msgstr "порожні ключі не дозволені"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "словник заблоковано"
-
-#~ msgid "list is locked"
-#~ msgstr "список заблоковано"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "не вдалося додати ключ '%s' до словника"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "індекс має бути цілий чи зріз, не %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "очікувався екземпляр str() чи unicode(), але отримано %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "очікувався екземпляр bytes() чи str(), але отримано %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "очікувався int(), long() чи щось, що може бути вміщене long(), але "
-#~ "отримано %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ "очікувався int() чи щось, що може бути вміщене int(), але отримано %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "значення завелике, щоб вміститися у тип C int"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "значення замале, щоб вміститися у тип C int"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "число має бути більше, ніж нуль"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "число має бути не менше, ніж нуль"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "не вдалося знищити атрибути OutputObject"
-
-# msgstr "E180: "
-#~ msgid "invalid attribute: %s"
-#~ msgstr "неправильний атрибут: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: Помилка ініціалізації об'єктів вводу/виводу"
-
-#~ msgid "failed to change directory"
-#~ msgstr "не вдалося змінити директорію"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "очікувався 3-кортеж як результат imp.find_module(), але отримано %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr "очікувався 3-кортеж як результат imp.find_module(), але отримано %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "внутрішня помилка: imp.find_module повернула кортеж з NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "не вдалося знищити атрибути vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "не можна змінити фіксований словник"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "не можна встановити атрибут %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "хеш-таблиця змінилася під час перебирання"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "очікувалась послідовність розміром 2, але отримано послідовність розміру "
-#~ "%d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "списковий конструктор не приймає іменовані аргументи"
-
-#~ msgid "list index out of range"
-#~ msgstr "індекс списку за межами"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "внутрішня помилка: не вдалося отримати елемент списку vim %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "не вдалося додати елемент до списку"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "внутрішня помилка: немає елемента списку vim %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "внутрішня помилка: не вдалося додати елемент до списку"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "не вдалося знищити атрибути vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "не можна змінити фіксований список"
-
-# msgstr "E428: "
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "безіменної функції %s не існує"
-
-# msgstr "E428: "
-#~ msgid "function %s does not exist"
-#~ msgstr "функції %s не існує"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "конструктор функції не приймає іменовані аргументи"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "не вдалося виконати функцію %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "не вдалося перемкнути вікна"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "не вдалося скинути глобальну опцію %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "не вдалося скинути опцію %s, яка не має глобального значення"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "спроба звернення до знищеної вкладки"
-
-#~ msgid "no such tab page"
-#~ msgstr "такої вкладки немає"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "спроба звернутися до знищеного вікна"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "атрибут лише для читання: буфер"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "курсор за межами буфера"
-
-#~ msgid "no such window"
-#~ msgstr "такого вікна немає"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "спроба звернення до знищеного буфера"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "не вдалося перейменувати буфер"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "назвою мітки має бути один символ"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "очікувався об’єкт vim.Buffer, але отримано %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "не вдалося перемкнутися до буфера %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "очікувався об’єкт vim.Window, але отримано %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "не вдалося знайти вікно у поточній вкладці"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "не перемкнувся до вказаного вікна"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "очікувався об’єкт vim.TabPage, але отримано %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "не перемкнувся до вказаної вкладки"
-
-#~ msgid "failed to run the code"
-#~ msgstr "не вдалося виконати код"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Eval не повернув дійсний об’єкт python"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: Не вдалося перетворити об’єкт python у значення vim"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "не вдалося перетворити %s у словник vim"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "не вдалося перетворити %s у структуру vim"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "внутрішня помилка: передано посилання NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "внутрішня помилка: неправильний тип значення"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Не вдалося встановити обробник шляху: sys.path_hooks не список\n"
-#~ "Вам слід вчинити так:\n"
-#~ "- додайте vim.path_hook до sys.path_hooks\n"
-#~ "- додайте vim.VIM_SPECIAL_PATH до sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Не вдалося встановити шлях: sys.path не список\n"
-#~ "Вас слід додати vim.VIM_SPECIAL_PATH до sys.path"
diff --git a/src/nvim/po/vi.po b/src/nvim/po/vi.po
index a720510426..49c6765843 100644
--- a/src/nvim/po/vi.po
+++ b/src/nvim/po/vi.po
@@ -4311,11 +4311,6 @@ msgstr "dòng %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Tên sổ đăng ký không cho phép: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Bản dịch các thông báo sang tiếng Việt: Phan Vĩnh Thịnh <teppi@vnlinux.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Gián đoạn: "
diff --git a/src/nvim/po/zh_CN.UTF-8.po b/src/nvim/po/zh_CN.UTF-8.po
index 82b895d9d6..e88efed8e3 100644
--- a/src/nvim/po/zh_CN.UTF-8.po
+++ b/src/nvim/po/zh_CN.UTF-8.po
@@ -4264,10 +4264,6 @@ msgstr "第 %4ld 行:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 无效的寄存器名: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "简体中文消息维护者: Yuheng Xie <elephant@linux.net.cn>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "已中断: "
diff --git a/src/nvim/po/zh_CN.cp936.po b/src/nvim/po/zh_CN.cp936.po
index cf66010c71..e5351cc22a 100644
--- a/src/nvim/po/zh_CN.cp936.po
+++ b/src/nvim/po/zh_CN.cp936.po
@@ -4265,10 +4265,6 @@ msgstr " %4ld :"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ЧļĴ: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Ϣά: Yuheng Xie <elephant@linux.net.cn>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "ж: "
diff --git a/src/nvim/po/zh_CN.po b/src/nvim/po/zh_CN.po
index 254ebbce6b..6cc4dd42ac 100644
--- a/src/nvim/po/zh_CN.po
+++ b/src/nvim/po/zh_CN.po
@@ -4265,10 +4265,6 @@ msgstr " %4ld :"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ЧļĴ: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Ϣά: Yuheng Xie <elephant@linux.net.cn>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "ж: "
diff --git a/src/nvim/po/zh_TW.UTF-8.po b/src/nvim/po/zh_TW.UTF-8.po
index 79e09c83d1..da86d80c27 100644
--- a/src/nvim/po/zh_TW.UTF-8.po
+++ b/src/nvim/po/zh_TW.UTF-8.po
@@ -4304,12 +4304,6 @@ msgstr "行 %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 暫存器名稱錯誤: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"正體中文訊息維護者: Francis S.Lin <piaip@csie.ntu.edu."
-"tw>, Cecil Sheng <b7506022@csie.ntu.edu.tw>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "已中斷: "
diff --git a/src/nvim/po/zh_TW.po b/src/nvim/po/zh_TW.po
index 07d510c0c6..977f18086e 100644
--- a/src/nvim/po/zh_TW.po
+++ b/src/nvim/po/zh_TW.po
@@ -4296,12 +4296,6 @@ msgstr " %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ȦsWٿ~: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"餤T@: Francis S.Lin <piaip@csie.ntu.edu."
-"tw>, Cecil Sheng <b7506022@csie.ntu.edu.tw>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "w_: "
diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c
index 5ad621e666..947814de4f 100644
--- a/src/nvim/popupmnu.c
+++ b/src/nvim/popupmnu.c
@@ -7,12 +7,12 @@
#include <stdbool.h>
#include "nvim/vim.h"
+#include "nvim/api/private/helpers.h"
#include "nvim/ascii.h"
#include "nvim/popupmnu.h"
#include "nvim/charset.h"
#include "nvim/ex_cmds.h"
#include "nvim/memline.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/option.h"
#include "nvim/screen.h"
@@ -21,6 +21,7 @@
#include "nvim/memory.h"
#include "nvim/window.h"
#include "nvim/edit.h"
+#include "nvim/ui.h"
static pumitem_T *pum_array = NULL; // items of displayed pum
static int pum_size; // nr of items in "pum_array"
@@ -36,8 +37,10 @@ static int pum_scrollbar; // TRUE when scrollbar present
static int pum_row; // top row of pum
static int pum_col; // left column of pum
-static int pum_do_redraw = FALSE; // do redraw anyway
+static bool pum_is_visible = false;
+static bool pum_external = false;
+static bool pum_wants_external = false;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "popupmnu.c.generated.h"
@@ -53,7 +56,10 @@ static int pum_do_redraw = FALSE; // do redraw anyway
/// @param array
/// @param size
/// @param selected index of initially selected item, none if out of range
-void pum_display(pumitem_T *array, int size, int selected)
+/// @param array_changed if true, array contains different items since last call
+/// if false, a new item is selected, but the array
+/// is the same
+void pum_display(pumitem_T *array, int size, int selected, bool array_changed)
{
int w;
int def_width;
@@ -68,20 +74,55 @@ void pum_display(pumitem_T *array, int size, int selected)
int above_row = cmdline_row;
int redo_count = 0;
+ if (!pum_is_visible) {
+ // To keep the code simple, we only allow changing the
+ // draw mode when the popup menu is not being displayed
+ pum_external = pum_wants_external;
+ }
+
redo:
+ // Mark the pum as visible already here,
+ // to avoid that must_redraw is set when 'cursorcolumn' is on.
+ pum_is_visible = true;
+ validate_cursor_col();
+
+ // anchor position: the start of the completed word
+ row = curwin->w_wrow + curwin->w_winrow;
+ if (curwin->w_p_rl) {
+ col = curwin->w_wincol + curwin->w_width - curwin->w_wcol - 1;
+ } else {
+ col = curwin->w_wincol + curwin->w_wcol;
+ }
+
+ if (pum_external) {
+ Array args = ARRAY_DICT_INIT;
+ if (array_changed) {
+ Array arr = ARRAY_DICT_INIT;
+ for (i = 0; i < size; i++) {
+ Array item = ARRAY_DICT_INIT;
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_text)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_kind)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_extra)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_info)));
+ ADD(arr, ARRAY_OBJ(item));
+ }
+ ADD(args, ARRAY_OBJ(arr));
+ ADD(args, INTEGER_OBJ(selected));
+ ADD(args, INTEGER_OBJ(row));
+ ADD(args, INTEGER_OBJ(col));
+ ui_event("popupmenu_show", args);
+ } else {
+ ADD(args, INTEGER_OBJ(selected));
+ ui_event("popupmenu_select", args);
+ }
+ return;
+ }
+
def_width = PUM_DEF_WIDTH;
max_width = 0;
kind_width = 0;
extra_width = 0;
- // Pretend the pum is already there to avoid that must_redraw is set when
- // 'cuc' is on.
- pum_array = (pumitem_T *)1;
- validate_cursor_col();
- pum_array = NULL;
-
- row = curwin->w_wrow + curwin->w_winrow;
-
if (firstwin->w_p_pvw) {
top_clear = firstwin->w_height;
} else {
@@ -194,13 +235,6 @@ redo:
pum_base_width = max_width;
pum_kind_width = kind_width;
- // Calculate column
- if (curwin->w_p_rl) {
- col = curwin->w_wincol + curwin->w_width - curwin->w_wcol - 1;
- } else {
- col = curwin->w_wincol + curwin->w_wcol;
- }
-
// if there are more items than room we need a scrollbar
if (pum_height < size) {
pum_scrollbar = 1;
@@ -641,9 +675,9 @@ static int pum_set_selected(int n, int repeat)
// Update the screen before drawing the popup menu.
// Enable updating the status lines.
- pum_do_redraw = TRUE;
+ pum_is_visible = false;
update_screen(0);
- pum_do_redraw = FALSE;
+ pum_is_visible = true;
if (!resized && win_valid(curwin_save)) {
no_u_sync++;
@@ -653,9 +687,9 @@ static int pum_set_selected(int n, int repeat)
// May need to update the screen again when there are
// autocommands involved.
- pum_do_redraw = TRUE;
+ pum_is_visible = false;
update_screen(0);
- pum_do_redraw = FALSE;
+ pum_is_visible = true;
}
}
}
@@ -672,10 +706,17 @@ static int pum_set_selected(int n, int repeat)
/// Undisplay the popup menu (later).
void pum_undisplay(void)
{
+ pum_is_visible = false;
pum_array = NULL;
- redraw_all_later(SOME_VALID);
- redraw_tabline = TRUE;
- status_redraw_all();
+
+ if (pum_external) {
+ Array args = ARRAY_DICT_INIT;
+ ui_event("popupmenu_hide", args);
+ } else {
+ redraw_all_later(SOME_VALID);
+ redraw_tabline = true;
+ status_redraw_all();
+ }
}
/// Clear the popup menu. Currently only resets the offset to the first
@@ -685,12 +726,16 @@ void pum_clear(void)
pum_first = 0;
}
-/// Overruled when "pum_do_redraw" is set, used to redraw the status lines.
-///
-/// @return TRUE if the popup menu is displayed.
-int pum_visible(void)
+/// @return true if the popup menu is displayed.
+bool pum_visible(void)
{
- return !pum_do_redraw && pum_array != NULL;
+ return pum_is_visible;
+}
+
+/// @return true if the popup menu is displayed and drawn on the grid.
+bool pum_drawn(void)
+{
+ return pum_visible() && !pum_external;
}
/// Gets the height of the menu.
@@ -701,3 +746,8 @@ int pum_get_height(void)
{
return pum_height;
}
+
+void pum_set_external(bool external)
+{
+ pum_wants_external = external;
+}
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index dfd795b0ba..a7aff15121 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -27,7 +27,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -1732,15 +1731,29 @@ void qf_list(exarg_T *eap)
EMSG(_(e_quickfix));
return;
}
+
+ bool plus = false;
+ if (*arg == '+') {
+ arg++;
+ plus = true;
+ }
if (!get_list_range(&arg, &idx1, &idx2) || *arg != NUL) {
EMSG(_(e_trailing));
return;
}
- i = qi->qf_lists[qi->qf_curlist].qf_count;
- if (idx1 < 0)
- idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
- if (idx2 < 0)
- idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ if (plus) {
+ i = qi->qf_lists[qi->qf_curlist].qf_index;
+ idx2 = i + idx1;
+ idx1 = i;
+ } else {
+ i = qi->qf_lists[qi->qf_curlist].qf_count;
+ if (idx1 < 0) {
+ idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
+ }
+ if (idx2 < 0) {
+ idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ }
+ }
if (qi->qf_lists[qi->qf_curlist].qf_nonevalid)
all = TRUE;
@@ -1764,16 +1777,18 @@ void qf_list(exarg_T *eap)
vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
i, (char *)fname);
msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index
- ? hl_attr(HLF_L) : hl_attr(HLF_D));
- if (qfp->qf_lnum == 0)
+ ? hl_attr(HLF_QFL) : hl_attr(HLF_D));
+ if (qfp->qf_lnum == 0) {
IObuff[0] = NUL;
- else if (qfp->qf_col == 0)
- sprintf((char *)IObuff, ":%" PRId64, (int64_t)qfp->qf_lnum);
- else
- sprintf((char *)IObuff, ":%" PRId64 " col %d",
- (int64_t)qfp->qf_lnum, qfp->qf_col);
- sprintf((char *)IObuff + STRLEN(IObuff), "%s:",
- (char *)qf_types(qfp->qf_type, qfp->qf_nr));
+ } else if (qfp->qf_col == 0) {
+ vim_snprintf((char *)IObuff, IOSIZE, ":%" PRId64,
+ (int64_t)qfp->qf_lnum);
+ } else {
+ vim_snprintf((char *)IObuff, IOSIZE, ":%" PRId64 " col %d",
+ (int64_t)qfp->qf_lnum, qfp->qf_col);
+ }
+ vim_snprintf((char *)IObuff + STRLEN(IObuff), IOSIZE, "%s:",
+ (char *)qf_types(qfp->qf_type, qfp->qf_nr));
msg_puts_attr(IObuff, hl_attr(HLF_N));
if (qfp->qf_pattern != NULL) {
qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE);
@@ -3503,15 +3518,15 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
if (d == NULL)
continue;
- char_u *filename = get_dict_string(d, (char_u *)"filename", true);
- int bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
- long lnum = get_dict_number(d, (char_u *)"lnum");
- int col = (int)get_dict_number(d, (char_u *)"col");
- char_u vcol = (char_u)get_dict_number(d, (char_u *)"vcol");
- int nr = (int)get_dict_number(d, (char_u *)"nr");
- char_u *type = get_dict_string(d, (char_u *)"type", true);
- char_u *pattern = get_dict_string(d, (char_u *)"pattern", true);
- char_u *text = get_dict_string(d, (char_u *)"text", true);
+ char_u *filename = get_dict_string(d, "filename", true);
+ int bufnum = (int)get_dict_number(d, "bufnr");
+ long lnum = get_dict_number(d, "lnum");
+ int col = (int)get_dict_number(d, "col");
+ char_u vcol = (char_u)get_dict_number(d, "vcol");
+ int nr = (int)get_dict_number(d, "nr");
+ char_u *type = get_dict_string(d, "type", true);
+ char_u *pattern = get_dict_string(d, "pattern", true);
+ char_u *text = get_dict_string(d, "text", true);
if (text == NULL) {
text = vim_strsave((char_u *)"");
}
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c
index f8fd7d4ef8..64a70c295a 100644
--- a/src/nvim/regexp.c
+++ b/src/nvim/regexp.c
@@ -59,7 +59,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/strings.h"
diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c
index 92dbd693ea..35308b7411 100644
--- a/src/nvim/regexp_nfa.c
+++ b/src/nvim/regexp_nfa.c
@@ -11,7 +11,6 @@
#include <limits.h>
#include "nvim/ascii.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
/*
@@ -4855,9 +4854,15 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start,
// recursive_regmatch(). Allow interrupting them with CTRL-C.
fast_breakcheck();
if (got_int) {
+#ifdef NFA_REGEXP_DEBUG_LOG
+ fclose(debug);
+#endif
return false;
}
if (nfa_time_limit != NULL && profile_passed_limit(*nfa_time_limit)) {
+#ifdef NFA_REGEXP_DEBUG_LOG
+ fclose(debug);
+#endif
return false;
}
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index d67142822f..9a2eeda8b2 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -108,7 +108,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -120,6 +119,7 @@
#include "nvim/regexp.h"
#include "nvim/search.h"
#include "nvim/spell.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/terminal.h"
@@ -420,9 +420,10 @@ void update_screen(int type)
}
}
end_search_hl();
- /* May need to redraw the popup menu. */
- if (pum_visible())
+ // May need to redraw the popup menu.
+ if (pum_drawn()) {
pum_redraw();
+ }
/* Reset b_mod_set flags. Going through all windows is probably faster
* than going through all buffers (there could be many buffers). */
@@ -2403,11 +2404,14 @@ win_line (
if (v != 0)
line_attr = sign_get_attr((int)v, TRUE);
- /* Highlight the current line in the quickfix window. */
- if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum)
- line_attr = hl_attr(HLF_L);
- if (line_attr != 0)
- area_highlighting = TRUE;
+ // Highlight the current line in the quickfix window.
+ if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum) {
+ line_attr = hl_attr(HLF_QFL);
+ }
+
+ if (line_attr != 0) {
+ area_highlighting = true;
+ }
line = ml_get_buf(wp->w_buffer, lnum, FALSE);
ptr = line;
@@ -2624,7 +2628,12 @@ win_line (
* then. */
if (wp->w_p_cul && lnum == wp->w_cursor.lnum
&& !(wp == curwin && VIsual_active)) {
- line_attr = hl_attr(HLF_CUL);
+ if (line_attr != 0 && !(State & INSERT) && bt_quickfix(wp->w_buffer)
+ && qf_current_entry(wp) == lnum) {
+ line_attr = hl_combine_attr(hl_attr(HLF_CUL), line_attr);
+ } else {
+ line_attr = hl_attr(HLF_CUL);
+ }
area_highlighting = true;
}
@@ -4819,15 +4828,12 @@ void win_redr_status(win_T *wp)
wp->w_redr_status = FALSE;
if (wp->w_status_height == 0) {
- /* no status line, can only be last window */
- redraw_cmdline = TRUE;
- } else if (!redrawing()
- /* don't update status line when popup menu is visible and may be
- * drawn over it */
- || pum_visible()
- ) {
- /* Don't redraw right now, do it later. */
- wp->w_redr_status = TRUE;
+ // no status line, can only be last window
+ redraw_cmdline = true;
+ } else if (!redrawing() || pum_drawn()) {
+ // Don't redraw right now, do it later. Don't update status line when
+ // popup menu is visible and may be drawn over it
+ wp->w_redr_status = true;
} else if (*p_stl != NUL || *wp->w_p_stl != NUL) {
/* redraw custom status line */
redraw_custom_statusline(wp);
@@ -7073,9 +7079,9 @@ void showruler(int always)
{
if (!always && !redrawing())
return;
- if (pum_visible()) {
- /* Don't redraw right now, do it later. */
- curwin->w_redr_status = TRUE;
+ if (pum_drawn()) {
+ // Don't redraw right now, do it later.
+ curwin->w_redr_status = true;
return;
}
if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height) {
@@ -7111,9 +7117,10 @@ static void win_redr_ruler(win_T *wp, int always)
if (wp == lastwin && lastwin->w_status_height == 0)
if (edit_submode != NULL)
return;
- /* Don't draw the ruler when the popup menu is visible, it may overlap. */
- if (pum_visible())
+ // Don't draw the ruler when the popup menu is visible, it may overlap.
+ if (pum_drawn()) {
return;
+ }
if (*p_ruf) {
int save_called_emsg = called_emsg;
@@ -7363,7 +7370,7 @@ void screen_resize(int width, int height)
redrawcmdline();
} else {
update_topline();
- if (pum_visible()) {
+ if (pum_drawn()) {
redraw_later(NOT_VALID);
ins_compl_show_pum(); /* This includes the redraw. */
} else
diff --git a/src/nvim/search.c b/src/nvim/search.c
index 6e2b69fff7..5f4df3be92 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -31,7 +31,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
#include "nvim/normal.h"
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index b5921eb810..01c0807d82 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -27,7 +27,6 @@
#include "nvim/api/private/helpers.h"
#include "nvim/buffer.h"
#include "nvim/buffer_defs.h"
-#include "nvim/misc2.h"
#include "nvim/ex_getln.h"
#include "nvim/search.h"
#include "nvim/regexp.h"
@@ -1524,7 +1523,7 @@ static const char *shada_get_default_file(void)
FUNC_ATTR_WARN_UNUSED_RESULT
{
if (default_shada_file == NULL) {
- char *shada_dir = stdpaths_user_data_subpath("shada", 0);
+ char *shada_dir = stdpaths_user_data_subpath("shada", 0, false);
default_shada_file = concat_fnames_realloc(shada_dir, "main.shada", true);
}
return default_shada_file;
@@ -2976,7 +2975,7 @@ shada_write_file_nomerge: {}
if (sd_writer.cookie == NULL) {
xfree(fname);
xfree(tempname);
- if (sd_reader.close != NULL) {
+ if (sd_reader.cookie != NULL) {
sd_reader.close(&sd_reader);
}
return FAIL;
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index 610fb660e7..ba7f31be25 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -312,7 +312,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/normal.h"
#include "nvim/option.h"
diff --git a/src/nvim/state.c b/src/nvim/state.c
index 30133e2201..f792ec00a4 100644
--- a/src/nvim/state.c
+++ b/src/nvim/state.c
@@ -2,10 +2,12 @@
#include "nvim/lib/kvec.h"
+#include "nvim/ascii.h"
#include "nvim/state.h"
#include "nvim/vim.h"
#include "nvim/main.h"
#include "nvim/getchar.h"
+#include "nvim/option_defs.h"
#include "nvim/ui.h"
#include "nvim/os/input.h"
@@ -61,3 +63,35 @@ getkey:
}
}
}
+
+/// Return TRUE if in the current mode we need to use virtual.
+int virtual_active(void)
+{
+ // While an operator is being executed we return "virtual_op", because
+ // VIsual_active has already been reset, thus we can't check for "block"
+ // being used.
+ if (virtual_op != MAYBE) {
+ return virtual_op;
+ }
+ return ve_flags == VE_ALL
+ || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
+ || ((ve_flags & VE_INSERT) && (State & INSERT));
+}
+
+/// VISUAL, SELECTMODE and OP_PENDING State are never set, they are equal to
+/// NORMAL State with a condition. This function returns the real State.
+int get_real_state(void)
+{
+ if (State & NORMAL) {
+ if (VIsual_active) {
+ if (VIsual_select) {
+ return SELECTMODE;
+ }
+ return VISUAL;
+ } else if (finish_op) {
+ return OP_PENDING;
+ }
+ }
+ return State;
+}
+
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 37a0fb82da..c1800a0639 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -5,7 +5,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/strings.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/buffer.h"
#include "nvim/charset.h"
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 3215f7ea14..6fd7603629 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -25,7 +25,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/option.h"
@@ -5902,6 +5901,7 @@ static char *highlight_init_both[] =
"VertSplit cterm=reverse gui=reverse",
"WildMenu ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black",
"default link EndOfBuffer NonText",
+ "default link QuickFixLine Search",
NULL
};
@@ -6597,6 +6597,9 @@ do_highlight (
else {
if (is_normal_group) {
HL_TABLE()[idx].sg_attr = 0;
+ // Need to update all groups, because they might be using "bg" and/or
+ // "fg", which have been changed now.
+ highlight_attr_set_all();
// If the normal group has changed, it is simpler to refresh every UI
ui_refresh();
} else
@@ -6998,11 +7001,15 @@ highlight_color (
if (font || sp)
return NULL;
if (modec == 'c') {
- if (fg)
+ if (fg) {
n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
- else
+ } else {
n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
- sprintf((char *)name, "%d", n);
+ }
+ if (n < 0) {
+ return NULL;
+ }
+ snprintf((char *)name, sizeof(name), "%d", n);
return name;
}
/* term doesn't have color */
@@ -7261,6 +7268,23 @@ int syn_get_final_id(int hl_id)
return hl_id;
}
+/// Refresh the color attributes of all highlight groups.
+static void highlight_attr_set_all(void)
+{
+ for (int idx = 0; idx < highlight_ga.ga_len; idx++) {
+ struct hl_group *sgp = &HL_TABLE()[idx];
+ if (sgp->sg_rgb_bg_name != NULL) {
+ sgp->sg_rgb_bg = name_to_color(sgp->sg_rgb_bg_name);
+ }
+ if (sgp->sg_rgb_fg_name != NULL) {
+ sgp->sg_rgb_fg = name_to_color(sgp->sg_rgb_fg_name);
+ }
+ if (sgp->sg_rgb_sp_name != NULL) {
+ sgp->sg_rgb_sp = name_to_color(sgp->sg_rgb_sp_name);
+ }
+ set_hl_attr(idx);
+ }
+}
/*
* Translate the 'highlight' option into attributes in highlight_attr[] and
@@ -7702,6 +7726,10 @@ RgbValue name_to_color(uint8_t *name)
&& isxdigit(name[6]) && name[7] == NUL) {
// rgb hex string
return strtol((char *)(name + 1), NULL, 16);
+ } else if (!STRICMP(name, "bg") || !STRICMP(name, "background")) {
+ return normal_bg;
+ } else if (!STRICMP(name, "fg") || !STRICMP(name, "foreground")) {
+ return normal_fg;
}
for (int i = 0; color_name_table[i].name != NULL; i++) {
diff --git a/src/nvim/tag.c b/src/nvim/tag.c
index dfecfb776d..81256b4f01 100644
--- a/src/nvim/tag.c
+++ b/src/nvim/tag.c
@@ -26,7 +26,6 @@
#include "nvim/mbyte.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 6f50c03be9..ff98dc9f22 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -127,7 +127,7 @@ struct terminal {
// we can't store a direct reference to the buffer because the
// refresh_timer_cb may be called after the buffer was freed, and there's
// no way to know if the memory was reused.
- uint64_t buf_handle;
+ handle_T buf_handle;
// program exited
bool closed, destroy;
// some vterm properties
@@ -623,11 +623,12 @@ static void buf_set_term_title(buf_T *buf, char *title)
FUNC_ATTR_NONNULL_ALL
{
Error err;
- api_free_object(dict_set_value(buf->b_vars,
- cstr_as_string("term_title"),
- STRING_OBJ(cstr_as_string(title)),
- false,
- &err));
+ dict_set_value(buf->b_vars,
+ cstr_as_string("term_title"),
+ STRING_OBJ(cstr_as_string(title)),
+ false,
+ false,
+ &err);
}
static int term_settermprop(VTermProp prop, VTermValue *val, void *data)
@@ -1081,7 +1082,8 @@ static void redraw(bool restore_cursor)
restore_cursor = true;
}
- int save_row, save_col;
+ int save_row = 0;
+ int save_col = 0;
if (restore_cursor) {
// save the current row/col to restore after updating screen when not
// focused
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 9a0bba83fe..10d26bd8cf 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -9,7 +9,6 @@ SCRIPTSOURCE := ../../../runtime
SCRIPTS := \
test8.out \
- test12.out \
test13.out \
test14.out \
test17.out \
@@ -32,13 +31,16 @@ SCRIPTS := \
# Tests using runtest.vim.vim.
# Keep test_alot*.res as the last one, sort the others.
NEW_TESTS = \
+ test_cscope.res \
test_hardcopy.res \
test_help_tagjump.res \
test_langmap.res \
test_syntax.res \
+ test_usercommands.res \
test_timers.res \
test_viml.res \
test_visual.res \
+ test_window_id.res \
test_alot.res
SCRIPTS_GUI := test16.out
diff --git a/src/nvim/testdir/test12.in b/src/nvim/testdir/test12.in
deleted file mode 100644
index 0c0623e5d4..0000000000
--- a/src/nvim/testdir/test12.in
+++ /dev/null
@@ -1,50 +0,0 @@
-Tests for 'directory' option.
-- ".", in same dir as file
-- "./dir", in directory relative to file
-- "dir", in directory relative to current dir
-
-STARTTEST
-:set dir=.,~
-:/start of testfile/,/end of testfile/w! Xtest1
-:" do an ls of the current dir to find the swap file (should not be there)
-:if has("unix")
-: !ls .X*.swp >test.out
-:else
-: r !ls X*.swp >test.out
-:endif
-:!echo first line >>test.out
-:e Xtest1
-:if has("unix")
-:" Do an ls of the current dir to find the swap file, remove the leading dot
-:" to make the result the same for all systems.
-: r!ls .X*.swp
-: s/\.*X/X/
-: .w >>test.out
-: undo
-:else
-: !ls X*.swp >>test.out
-:endif
-:!echo under Xtest1.swp >>test.out
-:!mkdir Xtest2
-:set dir=./Xtest2,.,~
-:e Xtest1
-:!ls X*.swp >>test.out
-:!echo under under >>test.out
-:!ls Xtest2 >>test.out
-:!echo under Xtest1.swp >>test.out
-:!mkdir Xtest.je
-:/start of testfile/,/end of testfile/w! Xtest2/Xtest3
-:set dir=Xtest.je,~
-:e Xtest2/Xtest3
-:swap
-:!ls Xtest2 >>test.out
-:!echo under Xtest3 >>test.out
-:!ls Xtest.je >>test.out
-:!echo under Xtest3.swp >>test.out
-:qa!
-ENDTEST
-
-start of testfile
-line 2 Abcdefghij
-line 3 Abcdefghij
-end of testfile
diff --git a/src/nvim/testdir/test12.ok b/src/nvim/testdir/test12.ok
deleted file mode 100644
index 605623b117..0000000000
--- a/src/nvim/testdir/test12.ok
+++ /dev/null
@@ -1,10 +0,0 @@
-first line
-Xtest1.swp
-under Xtest1.swp
-under under
-Xtest1.swp
-under Xtest1.swp
-Xtest3
-under Xtest3
-Xtest3.swp
-under Xtest3.swp
diff --git a/src/nvim/testdir/test_alot.vim b/src/nvim/testdir/test_alot.vim
index 30b8a9ceb8..f0efd6e4ed 100644
--- a/src/nvim/testdir/test_alot.vim
+++ b/src/nvim/testdir/test_alot.vim
@@ -3,7 +3,10 @@
source test_assign.vim
source test_cursor_func.vim
+source test_feedkeys.vim
source test_cmdline.vim
source test_menu.vim
source test_popup.vim
+source test_regexp_utf8.vim
+source test_syn_attr.vim
source test_unlet.vim
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index 438b20cc5e..902ec1c05d 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -47,45 +47,79 @@ func Test_getcompletion()
let l = getcompletion('v:n', 'var')
call assert_true(index(l, 'v:null') >= 0)
+ let l = getcompletion('v:notexists', 'var')
+ call assert_equal([], l)
let l = getcompletion('', 'augroup')
call assert_true(index(l, 'END') >= 0)
+ let l = getcompletion('blahblah', 'augroup')
+ call assert_equal([], l)
let l = getcompletion('', 'behave')
call assert_true(index(l, 'mswin') >= 0)
+ let l = getcompletion('not', 'behave')
+ call assert_equal([], l)
let l = getcompletion('', 'color')
call assert_true(index(l, 'default') >= 0)
+ let l = getcompletion('dirty', 'color')
+ call assert_equal([], l)
let l = getcompletion('', 'command')
call assert_true(index(l, 'sleep') >= 0)
+ let l = getcompletion('awake', 'command')
+ call assert_equal([], l)
let l = getcompletion('', 'dir')
- call assert_true(index(l, 'sautest') >= 0)
+ call assert_true(index(l, 'sautest/') >= 0)
+ let l = getcompletion('NoMatch', 'dir')
+ call assert_equal([], l)
let l = getcompletion('exe', 'expression')
call assert_true(index(l, 'executable(') >= 0)
+ let l = getcompletion('kill', 'expression')
+ call assert_equal([], l)
let l = getcompletion('tag', 'function')
call assert_true(index(l, 'taglist(') >= 0)
+ let l = getcompletion('paint', 'function')
+ call assert_equal([], l)
let l = getcompletion('run', 'file')
call assert_true(index(l, 'runtest.vim') >= 0)
+ let l = getcompletion('walk', 'file')
+ call assert_equal([], l)
let l = getcompletion('ha', 'filetype')
call assert_true(index(l, 'hamster') >= 0)
+ let l = getcompletion('horse', 'filetype')
+ call assert_equal([], l)
let l = getcompletion('z', 'syntax')
call assert_true(index(l, 'zimbu') >= 0)
+ let l = getcompletion('emacs', 'syntax')
+ call assert_equal([], l)
let l = getcompletion('jikes', 'compiler')
call assert_true(index(l, 'jikes') >= 0)
+ let l = getcompletion('break', 'compiler')
+ call assert_equal([], l)
+
+ helptags ALL
+ let l = getcompletion('last', 'help')
+ call assert_true(index(l, ':tablast') >= 0)
+ let l = getcompletion('giveup', 'help')
+ call assert_equal([], l)
let l = getcompletion('time', 'option')
call assert_true(index(l, 'timeoutlen') >= 0)
+ let l = getcompletion('space', 'option')
+ call assert_equal([], l)
let l = getcompletion('er', 'highlight')
call assert_true(index(l, 'ErrorMsg') >= 0)
+ let l = getcompletion('dark', 'highlight')
+ call assert_equal([], l)
" For others test if the name is recognized.
let names = ['buffer', 'environment', 'file_in_path',
diff --git a/src/nvim/testdir/test_cscope.vim b/src/nvim/testdir/test_cscope.vim
new file mode 100644
index 0000000000..b6d70f0765
--- /dev/null
+++ b/src/nvim/testdir/test_cscope.vim
@@ -0,0 +1,15 @@
+" Test for cscope commands.
+
+if !has('cscope')
+ finish
+endif
+
+func Test_cscopequickfix()
+ set cscopequickfix=s-,g-,d+,c-,t+,e-,f0,i-,a-
+ call assert_equal('s-,g-,d+,c-,t+,e-,f0,i-,a-', &cscopequickfix)
+
+ call assert_fails('set cscopequickfix=x-', 'E474:')
+ call assert_fails('set cscopequickfix=s', 'E474:')
+ call assert_fails('set cscopequickfix=s7', 'E474:')
+ call assert_fails('set cscopequickfix=s-a', 'E474:')
+endfunc
diff --git a/src/nvim/testdir/test_feedkeys.vim b/src/nvim/testdir/test_feedkeys.vim
new file mode 100644
index 0000000000..33cd58949d
--- /dev/null
+++ b/src/nvim/testdir/test_feedkeys.vim
@@ -0,0 +1,10 @@
+" Test feedkeys() function.
+
+func Test_feedkeys_x_with_empty_string()
+ new
+ call feedkeys("ifoo\<Esc>")
+ call assert_equal('', getline('.'))
+ call feedkeys('', 'x')
+ call assert_equal('foo', getline('.'))
+ quit!
+endfunc
diff --git a/src/nvim/testdir/test_help_tagjump.vim b/src/nvim/testdir/test_help_tagjump.vim
index 9f9207d27d..42f8391aba 100644
--- a/src/nvim/testdir/test_help_tagjump.vim
+++ b/src/nvim/testdir/test_help_tagjump.vim
@@ -37,4 +37,14 @@ func Test_help_tagjump()
call assert_equal("help", &filetype)
call assert_true(getline('.') =~ '\*arglistid()\*')
helpclose
+
+ exec "help! 'autoindent'."
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ "\\*'autoindent'\\*")
+ helpclose
+
+ exec "help! {address}."
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ '\*{address}\*')
+ helpclose
endfunc
diff --git a/src/nvim/testdir/test_regexp_utf8.vim b/src/nvim/testdir/test_regexp_utf8.vim
new file mode 100644
index 0000000000..38f9ed41d5
--- /dev/null
+++ b/src/nvim/testdir/test_regexp_utf8.vim
@@ -0,0 +1,41 @@
+" Tests for regexp in utf8 encoding
+scriptencoding utf-8
+
+func s:equivalence_test()
+ let str = "AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐẔ aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňʼnṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑẕ"
+ let groups = split(str)
+ for group1 in groups
+ for c in split(group1, '\zs')
+ " next statement confirms that equivalence class matches every
+ " character in group
+ call assert_match('^[[=' . c . '=]]*$', group1)
+ for group2 in groups
+ if group2 != group1
+ " next statement converts that equivalence class doesn't match
+ " character in any other group
+ call assert_equal(-1, match(group2, '[[=' . c . '=]]'))
+ endif
+ endfor
+ endfor
+ endfor
+endfunc
+
+func Test_equivalence_re1()
+ set re=1
+ call s:equivalence_test()
+ set re=0
+endfunc
+
+func Test_equivalence_re2()
+ set re=2
+ call s:equivalence_test()
+ set re=0
+endfunc
+
+func Test_recursive_substitute()
+ new
+ s/^/\=execute("s#^##gn")
+ " check we are now not in the sandbox
+ call setwinvar(1, 'myvar', 1)
+ bwipe!
+endfunc
diff --git a/src/nvim/testdir/test_syn_attr.vim b/src/nvim/testdir/test_syn_attr.vim
new file mode 100644
index 0000000000..809442eb94
--- /dev/null
+++ b/src/nvim/testdir/test_syn_attr.vim
@@ -0,0 +1,24 @@
+" Test syntax highlighting functions.
+
+func Test_missing_attr()
+ hi Mine cterm=italic
+ call assert_equal('Mine', synIDattr(hlID("Mine"), "name"))
+ call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm'))
+ hi Mine cterm=inverse
+ call assert_equal('1', synIDattr(hlID("Mine"), "inverse", 'cterm'))
+ hi Mine cterm=standout gui=undercurl
+ call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm'))
+ call assert_equal('1', synIDattr(hlID("Mine"), "undercurl", 'gui'))
+ hi Mine cterm=NONE gui=NONE
+ call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "inverse", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "standout", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "undercurl", 'gui'))
+
+ if has('gui')
+ hi Mine guifg=blue guibg=red font=something
+ call assert_equal('blue', synIDattr(hlID("Mine"), "fg", 'gui'))
+ call assert_equal('red', synIDattr(hlID("Mine"), "bg", 'gui'))
+ call assert_equal('something', synIDattr(hlID("Mine"), "font", 'gui'))
+ endif
+endfunc
diff --git a/src/nvim/testdir/test_usercommands.vim b/src/nvim/testdir/test_usercommands.vim
new file mode 100644
index 0000000000..f593d16dbf
--- /dev/null
+++ b/src/nvim/testdir/test_usercommands.vim
@@ -0,0 +1,48 @@
+" Tests for user defined commands
+
+" Test for <mods> in user defined commands
+function Test_cmdmods()
+ let g:mods = ''
+
+ command! -nargs=* MyCmd let g:mods .= '<mods> '
+
+ MyCmd
+ aboveleft MyCmd
+ belowright MyCmd
+ botright MyCmd
+ browse MyCmd
+ confirm MyCmd
+ hide MyCmd
+ keepalt MyCmd
+ keepjumps MyCmd
+ keepmarks MyCmd
+ keeppatterns MyCmd
+ lockmarks MyCmd
+ noswapfile MyCmd
+ silent MyCmd
+ tab MyCmd
+ topleft MyCmd
+ verbose MyCmd
+ vertical MyCmd
+
+ aboveleft belowright botright browse confirm hide keepalt keepjumps
+ \ keepmarks keeppatterns lockmarks noswapfile silent tab
+ \ topleft verbose vertical MyCmd
+
+ call assert_equal(' aboveleft belowright botright browse confirm ' .
+ \ 'hide keepalt keepjumps keepmarks keeppatterns lockmarks ' .
+ \ 'noswapfile silent tab topleft verbose vertical aboveleft ' .
+ \ 'belowright botright browse confirm hide keepalt keepjumps ' .
+ \ 'keepmarks keeppatterns lockmarks noswapfile silent tab topleft ' .
+ \ 'verbose vertical ', g:mods)
+
+ let g:mods = ''
+ command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
+
+ vertical MyQCmd
+ call assert_equal('"vertical" ', g:mods)
+
+ delcommand MyCmd
+ delcommand MyQCmd
+ unlet g:mods
+endfunction
diff --git a/src/nvim/testdir/test_window_id.vim b/src/nvim/testdir/test_window_id.vim
new file mode 100644
index 0000000000..fa3ebd757e
--- /dev/null
+++ b/src/nvim/testdir/test_window_id.vim
@@ -0,0 +1,79 @@
+" Test using the window ID.
+
+func Test_win_getid()
+ edit one
+ let id1 = win_getid()
+ split two
+ let id2 = win_getid()
+ let bufnr2 = bufnr('%')
+ split three
+ let id3 = win_getid()
+ tabnew
+ edit four
+ let id4 = win_getid()
+ split five
+ let id5 = win_getid()
+ let bufnr5 = bufnr('%')
+ tabnext
+
+ wincmd w
+ call assert_equal("two", expand("%"))
+ call assert_equal(id2, win_getid())
+ let nr2 = winnr()
+ wincmd w
+ call assert_equal("one", expand("%"))
+ call assert_equal(id1, win_getid())
+ let nr1 = winnr()
+ wincmd w
+ call assert_equal("three", expand("%"))
+ call assert_equal(id3, win_getid())
+ let nr3 = winnr()
+ tabnext
+ call assert_equal("five", expand("%"))
+ call assert_equal(id5, win_getid())
+ let nr5 = winnr()
+ wincmd w
+ call assert_equal("four", expand("%"))
+ call assert_equal(id4, win_getid())
+ let nr4 = winnr()
+ tabnext
+
+ exe nr1 . "wincmd w"
+ call assert_equal(id1, win_getid())
+ exe nr2 . "wincmd w"
+ call assert_equal(id2, win_getid())
+ exe nr3 . "wincmd w"
+ call assert_equal(id3, win_getid())
+ tabnext
+ exe nr4 . "wincmd w"
+ call assert_equal(id4, win_getid())
+ exe nr5 . "wincmd w"
+ call assert_equal(id5, win_getid())
+
+ call win_gotoid(id2)
+ call assert_equal("two", expand("%"))
+ call win_gotoid(id4)
+ call assert_equal("four", expand("%"))
+ call win_gotoid(id1)
+ call assert_equal("one", expand("%"))
+ call win_gotoid(id5)
+ call assert_equal("five", expand("%"))
+
+ call assert_equal(0, win_id2win(9999))
+ call assert_equal(nr5, win_id2win(id5))
+ call assert_equal(0, win_id2win(id1))
+ tabnext
+ call assert_equal(nr1, win_id2win(id1))
+
+ call assert_equal([0, 0], win_id2tabwin(9999))
+ call assert_equal([1, nr2], win_id2tabwin(id2))
+ call assert_equal([2, nr4], win_id2tabwin(id4))
+
+ call assert_equal([], win_findbuf(9999))
+ call assert_equal([id2], win_findbuf(bufnr2))
+ call win_gotoid(id5)
+ split
+ call assert_equal(sort([id5, win_getid()]), sort(win_findbuf(bufnr5)))
+
+ only!
+endfunc
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index be256f3ebc..68ea00ee63 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -5,7 +5,6 @@
#include "nvim/api/private/helpers.h"
#include "nvim/ascii.h"
#include "nvim/main.h"
-#include "nvim/misc2.h"
#include "nvim/os/os.h"
#include "nvim/os/input.h"
#include "nvim/event/rstream.h"
@@ -38,7 +37,7 @@ void term_input_init(TermInput *input, Loop *loop)
int curflags = termkey_get_canonflags(input->tk);
termkey_set_canonflags(input->tk, curflags | TERMKEY_CANON_DELBS);
// setup input handle
- rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff, input);
+ rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff);
// initialize a timer handle for handling ESC with libtermkey
time_watcher_init(loop, &input->timer_handle, input);
}
@@ -49,13 +48,13 @@ void term_input_destroy(TermInput *input)
uv_mutex_destroy(&input->key_buffer_mutex);
uv_cond_destroy(&input->key_buffer_cond);
time_watcher_close(&input->timer_handle, NULL);
- stream_close(&input->read_stream, NULL);
+ stream_close(&input->read_stream, NULL, NULL);
termkey_destroy(input->tk);
}
void term_input_start(TermInput *input)
{
- rstream_start(&input->read_stream, read_cb);
+ rstream_start(&input->read_stream, read_cb, input);
}
void term_input_stop(TermInput *input)
@@ -216,8 +215,8 @@ static int get_key_code_timeout(void)
// Check 'ttimeout' to determine if we should send ESC after 'ttimeoutlen'.
// See :help 'ttimeout' for more information
Error err = ERROR_INIT;
- if (vim_get_option(cstr_as_string("ttimeout"), &err).data.boolean) {
- ms = vim_get_option(cstr_as_string("ttimeoutlen"), &err).data.integer;
+ if (nvim_get_option(cstr_as_string("ttimeout"), &err).data.boolean) {
+ ms = nvim_get_option(cstr_as_string("ttimeoutlen"), &err).data.integer;
}
return (int)ms;
@@ -340,7 +339,7 @@ static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
//
// ls *.md | xargs nvim
input->in_fd = 2;
- stream_close(&input->read_stream, NULL);
+ stream_close(&input->read_stream, NULL, NULL);
queue_put(input->loop->fast_events, restart_reading, 1, input);
} else {
loop_schedule(&main_loop, event_create(1, input_done_event, 0));
@@ -391,6 +390,6 @@ static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
static void restart_reading(void **argv)
{
TermInput *input = argv[0];
- rstream_init_fd(input->loop, &input->read_stream, input->in_fd, 0xfff, input);
- rstream_start(&input->read_stream, read_cb);
+ rstream_init_fd(input->loop, &input->read_stream, input->in_fd, 0xfff);
+ rstream_start(&input->read_stream, read_cb, input);
}
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index d220df508a..bfc03dfb81 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -83,6 +83,7 @@ UI *tui_start(void)
UI *ui = xcalloc(1, sizeof(UI));
ui->stop = tui_stop;
ui->rgb = p_tgc;
+ ui->pum_external = false;
ui->resize = tui_resize;
ui->clear = tui_clear;
ui->eol_clear = tui_eol_clear;
@@ -106,6 +107,7 @@ UI *tui_start(void)
ui->suspend = tui_suspend;
ui->set_title = tui_set_title;
ui->set_icon = tui_set_icon;
+ ui->event = tui_event;
return ui_bridge_attach(ui, tui_main, tui_scheduler);
}
@@ -650,6 +652,12 @@ static void tui_set_icon(UI *ui, char *icon)
{
}
+// NB: if we start to use this, the ui_bridge must be updated
+// to make a copy for the tui thread
+static void tui_event(UI *ui, char *name, Array args, bool *args_consumed)
+{
+}
+
static void invalidate(UI *ui, int top, int bot, int left, int right)
{
TUIData *data = ui->data;
diff --git a/src/nvim/types.h b/src/nvim/types.h
index bfe8be2091..35a5d1e2bd 100644
--- a/src/nvim/types.h
+++ b/src/nvim/types.h
@@ -13,4 +13,5 @@ typedef unsigned char char_u;
// Can hold one decoded UTF-8 character.
typedef uint32_t u8char_T;
+typedef struct expand expand_T;
#endif // NVIM_TYPES_H
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index d968cbc390..dd278893c2 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -12,10 +12,8 @@
#include "nvim/ex_cmds2.h"
#include "nvim/fold.h"
#include "nvim/main.h"
-#include "nvim/mbyte.h"
#include "nvim/ascii.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/mbyte.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
@@ -27,6 +25,7 @@
#include "nvim/os/time.h"
#include "nvim/os/input.h"
#include "nvim/os/signal.h"
+#include "nvim/popupmnu.h"
#include "nvim/screen.h"
#include "nvim/syntax.h"
#include "nvim/window.h"
@@ -35,6 +34,7 @@
#else
# include "nvim/msgpack_rpc/server.h"
#endif
+#include "nvim/api/private/helpers.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui.c.generated.h"
@@ -143,6 +143,15 @@ void ui_set_icon(char *icon)
UI_CALL(flush);
}
+void ui_event(char *name, Array args)
+{
+ bool args_consumed = false;
+ UI_CALL(event, name, args, &args_consumed);
+ if (!args_consumed) {
+ api_free_array(args);
+ }
+}
+
// May update the shape of the cursor.
void ui_cursor_shape(void)
{
@@ -156,15 +165,18 @@ void ui_refresh(void)
}
int width = INT_MAX, height = INT_MAX;
+ bool pum_external = true;
for (size_t i = 0; i < ui_count; i++) {
UI *ui = uis[i];
width = ui->width < width ? ui->width : width;
height = ui->height < height ? ui->height : height;
+ pum_external &= ui->pum_external;
}
row = col = 0;
screen_resize(width, height);
+ pum_set_external(pum_external);
}
void ui_resize(int new_width, int new_height)
@@ -519,3 +531,4 @@ static void ui_mode_change(void)
UI_CALL(mode_change, mode);
conceal_check_cursur_line();
}
+
diff --git a/src/nvim/ui.h b/src/nvim/ui.h
index 5934d2fee9..d14bc5812c 100644
--- a/src/nvim/ui.h
+++ b/src/nvim/ui.h
@@ -5,6 +5,8 @@
#include <stdbool.h>
#include <stdint.h>
+#include "api/private/defs.h"
+
typedef struct {
bool bold, underline, undercurl, italic, reverse;
int foreground, background, special;
@@ -13,7 +15,7 @@ typedef struct {
typedef struct ui_t UI;
struct ui_t {
- bool rgb;
+ bool rgb, pum_external;
int width, height;
void *data;
void (*resize)(UI *ui, int rows, int columns);
@@ -39,6 +41,7 @@ struct ui_t {
void (*suspend)(UI *ui);
void (*set_title)(UI *ui, char *title);
void (*set_icon)(UI *ui, char *icon);
+ void (*event)(UI *ui, char *name, Array args, bool *args_consumed);
void (*stop)(UI *ui);
};
diff --git a/src/nvim/ui_bridge.c b/src/nvim/ui_bridge.c
index 6290fb3d87..34b95baf6c 100644
--- a/src/nvim/ui_bridge.c
+++ b/src/nvim/ui_bridge.c
@@ -31,6 +31,7 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)
UIBridgeData *rv = xcalloc(1, sizeof(UIBridgeData));
rv->ui = ui;
rv->bridge.rgb = ui->rgb;
+ rv->bridge.pum_external = ui->pum_external;
rv->bridge.stop = ui_bridge_stop;
rv->bridge.resize = ui_bridge_resize;
rv->bridge.clear = ui_bridge_clear;
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index fc5d6acaa4..d80aaf443a 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -99,6 +99,7 @@
#include "nvim/quickfix.h"
#include "nvim/screen.h"
#include "nvim/sha256.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/types.h"
#include "nvim/os/os.h"
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 6b189a820f..685a2a843b 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -15,7 +15,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
@@ -75,31 +74,198 @@ static char *features[] = {
// clang-format off
static int included_patches[] = {
+ // 2367,
+ // 2366 NA
+ // 2365 NA
+ // 2364,
+ // 2363 NA
+ // 2362,
+ // 2361 NA
+ // 2360,
+ // 2359 NA
+ // 2358 NA
+ // 2357,
+ // 2356,
+ // 2355,
+ // 2354,
+ // 2353,
+ // 2352 NA
+ // 2351 NA
+ // 2350,
+ // 2349,
+ // 2348,
+ // 2347,
+ // 2346,
+ // 2345 NA
+ // 2344 NA
+ // 2343,
+ // 2342 NA
+ // 2341,
+ // 2340 NA
+ // 2339,
+ // 2338 NA
+ // 2337,
+ // 2336,
+ // 2335,
+ // 2334,
+ // 2333,
+ // 2332 NA
+ // 2331,
+ // 2330,
+ // 2329,
+ // 2328,
+ // 2327 NA
+ // 2326,
+ // 2325 NA
+ // 2324,
+ // 2323,
+ // 2322,
+ // 2321,
+ // 2320,
+ // 2319,
+ // 2318,
+ // 2317,
+ // 2316 NA
+ // 2315,
+ // 2314,
+ // 2313,
+ // 2312,
+ // 2311,
+ // 2310 NA
+ // 2309,
+ // 2308 NA
+ // 2307,
+ // 2306,
+ // 2305,
+ // 2304 NA
+ // 2303,
+ // 2302 NA
+ // 2301 NA
+ // 2300,
+ // 2299,
+ // 2298 NA
+ // 2297 NA
+ // 2296,
+ // 2295,
+ // 2294,
+ // 2293,
+ // 2292,
+ // 2291,
+ // 2290 NA
+ // 2289 NA
+ // 2288 NA
+ // 2287 NA
+ // 2286 NA
+ // 2285 NA
+ 2284,
+ // 2283,
+ // 2282 NA
+ // 2281 NA
+ // 2280,
+ // 2279,
+ // 2278,
+ // 2277,
+ // 2276,
+ // 2275,
+ // 2274,
+ // 2273,
+ // 2272,
+ // 2271 NA
+ // 2270 NA
+ // 2269,
+ // 2268,
+ // 2267 NA
+ // 2266,
+ // 2265,
+ // 2264,
+ // 2263,
+ // 2262 NA
+ // 2261 NA
+ // 2260 NA
+ // 2259,
+ // 2258 NA
+ // 2257 NA
+ // 2256,
+ // 2255,
+ // 2254 NA
+ // 2253 NA
+ // 2252 NA
+ // 2251,
+ // 2250,
+ // 2249,
+ // 2248,
+ // 2247 NA
+ // 2246,
+ // 2245,
+ // 2244,
+ // 2243 NA
+ // 2242,
+ // 2241,
+ // 2240,
+ // 2239,
+ // 2238 NA
+ // 2237,
+ // 2236,
+ // 2235,
+ // 2234 NA
+ // 2233,
+ // 2232,
+ // 2231,
+ // 2230,
+ // 2229,
+ // 2228,
+ // 2227,
+ // 2226,
+ // 2225,
+ // 2224,
+ // 2223,
+ // 2222,
+ // 2221,
+ // 2220,
+ 2219,
+ // 2218 NA
+ // 2217,
+ // 2216 NA
+ // 2215,
+ // 2214 NA
+ 2213,
+ // 2212,
+ // 2211 NA
+ // 2210 NA
+ // 2209,
+ // 2208,
+ // 2207 NA
+ // 2206 NA
+ // 2205,
+ // 2204,
+ // 2203 NA
+ // 2202 NA
+ // 2201,
// 2200,
- // 2199,
+ // 2199 NA
// 2198,
// 2197,
// 2196,
- // 2195,
+ // 2195 NA
// 2194,
- // 2193,
- // 2192,
- // 2191,
+ // 2193 NA
+ // 2192 NA
+ // 2191 NA
// 2190,
// 2189,
// 2188,
// 2187,
- // 2186,
+ // 2186 NA
// 2185,
// 2184,
// 2183,
- // 2182,
+ // 2182 NA
// 2181,
// 2180,
// 2179,
// 2178,
// 2177,
- // 2176,
+ // 2176 NA
// 2175,
// 2174,
// 2173,
@@ -107,9 +273,9 @@ static int included_patches[] = {
// 2171,
// 2170,
// 2169,
- // 2168,
- // 2167,
- // 2166,
+ // 2168 NA
+ // 2167 NA
+ // 2166 NA
// 2165,
// 2164,
// 2163,
@@ -118,56 +284,56 @@ static int included_patches[] = {
// 2160,
// 2159,
// 2158,
- // 2157,
- // 2156,
- // 2155,
- // 2154,
- // 2153,
+ // 2157 NA
+ // 2156 NA
+ // 2155 NA
+ // 2154 NA
+ // 2153 NA
// 2152,
// 2151,
- // 2150,
+ // 2150 NA
// 2149,
// 2148,
// 2147,
// 2146,
- // 2145,
+ // 2145 NA
// 2144,
// 2143,
// 2142,
// 2141,
- // 2140,
+ // 2140 NA
// 2139,
- // 2138,
+ // 2138 NA
// 2137,
// 2136,
// 2135,
// 2134,
- // 2133,
+ // 2133 NA
// 2132,
- // 2131,
- // 2130,
- // 2129,
+ // 2131 NA
+ // 2130 NA
+ // 2129 NA
// 2128,
// 2127,
// 2126,
// 2125,
// 2124,
// 2123,
- // 2122,
+ // 2122 NA
// 2121,
// 2120,
// 2119,
- // 2118,
+ // 2118 NA
// 2117,
- // 2116,
+ // 2116 NA
// 2115,
- // 2114,
+ // 2114 NA
// 2113,
- // 2112,
+ 2112,
// 2111,
// 2110,
// 2109,
- // 2108,
+ // 2108 NA
// 2107,
// 2106,
// 2105 NA
@@ -242,7 +408,7 @@ static int included_patches[] = {
// 2036,
// 2035 NA
// 2034 NA
- // 2033,
+ 2033,
// 2032 NA
// 2031,
// 2030 NA
@@ -285,7 +451,7 @@ static int included_patches[] = {
// 1993,
// 1992,
// 1991,
- // 1990,
+ 1990,
// 1989,
// 1988 NA
// 1987 NA
@@ -304,7 +470,7 @@ static int included_patches[] = {
// 1974 NA
1973,
// 1972,
- // 1971,
+ 1971,
// 1970,
// 1969 NA
// 1968,
@@ -323,7 +489,7 @@ static int included_patches[] = {
// 1955,
// 1954,
// 1953,
- // 1952,
+ 1952,
// 1951 NA
// 1950,
// 1949,
@@ -362,7 +528,7 @@ static int included_patches[] = {
// 1916 NA
// 1915 NA
// 1914,
- // 1913,
+ 1913,
// 1912,
// 1911,
// 1910,
@@ -375,11 +541,11 @@ static int included_patches[] = {
// 1903,
// 1902 NA
// 1901 NA
- // 1900,
+ 1900,
// 1899 NA
- // 1898,
+ 1898,
// 1897,
- // 1896,
+ 1896,
// 1895,
// 1894 NA
// 1893,
@@ -577,7 +743,7 @@ static int included_patches[] = {
1703,
// 1702,
// 1701,
- // 1700,
+ 1700,
// 1699,
// 1698 NA
// 1697,
@@ -674,7 +840,7 @@ static int included_patches[] = {
// 1606,
// 1605,
// 1604,
- // 1603,
+ 1603,
// 1602 NA
// 1601 NA
// 1600 NA
@@ -719,8 +885,8 @@ static int included_patches[] = {
// 1561 NA
// 1560 NA
// 1559,
- // 1558,
- // 1557,
+ 1558,
+ 1557,
// 1556 NA
// 1555 NA
1554,
@@ -730,7 +896,7 @@ static int included_patches[] = {
1550,
// 1549,
1548,
- // 1547,
+ 1547,
1546,
// 1545 NA
// 1544 NA
@@ -742,9 +908,9 @@ static int included_patches[] = {
// 1538 NA
// 1537 NA
// 1536 NA
- // 1535,
+ 1535,
// 1534 NA
- // 1533,
+ 1533,
// 1532 NA
// 1531 NA
// 1530 NA
@@ -1011,7 +1177,7 @@ static int included_patches[] = {
1269,
// 1268 NA
1267,
- // 1266
+ 1266,
// 1265 NA
// 1264 NA
// 1263 NA
diff --git a/src/nvim/window.c b/src/nvim/window.c
index e267d493bf..e9a66ad907 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -28,7 +28,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
#include "nvim/move.h"
@@ -41,6 +40,7 @@
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/terminal.h"
@@ -2926,7 +2926,9 @@ void win_init_size(void)
*/
static tabpage_T *alloc_tabpage(void)
{
+ static int last_tp_handle = 0;
tabpage_T *tp = xcalloc(1, sizeof(tabpage_T));
+ tp->handle = ++last_tp_handle;
handle_register_tabpage(tp);
/* init t: variables */
@@ -2976,6 +2978,9 @@ int win_new_tabpage(int after, char_u *filename)
xfree(newtp);
return FAIL;
}
+
+ newtp->localdir = tp->localdir ? vim_strsave(tp->localdir) : NULL;
+
curtab = newtp;
/* Create a new empty window. */
@@ -3689,13 +3694,15 @@ win_T *buf_jump_open_tab(buf_T *buf)
*/
static win_T *win_alloc(win_T *after, int hidden)
{
- /*
- * allocate window structure and linesizes arrays
- */
+ static int last_win_id = 0;
+
+ // allocate window structure and linesizes arrays
win_T *new_wp = xcalloc(1, sizeof(win_T));
- handle_register_window(new_wp);
win_alloc_lines(new_wp);
+ new_wp->handle = ++last_win_id;
+ handle_register_window(new_wp);
+
/* init w: variables */
new_wp->w_vars = dict_alloc();
init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
@@ -5674,3 +5681,107 @@ static bool frame_check_width(frame_T *topfrp, int width)
}
return true;
}
+
+int win_getid(typval_T *argvars)
+{
+ if (argvars[0].v_type == VAR_UNKNOWN) {
+ return curwin->handle;
+ }
+ int winnr = get_tv_number(&argvars[0]);
+ win_T *wp;
+ if (winnr > 0) {
+ if (argvars[1].v_type == VAR_UNKNOWN) {
+ wp = firstwin;
+ } else {
+ tabpage_T *tp;
+ int tabnr = get_tv_number(&argvars[1]);
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ if (--tabnr == 0) {
+ break;
+ }
+ }
+ if (tp == NULL) {
+ return -1;
+ }
+ wp = tp->tp_firstwin;
+ }
+ for ( ; wp != NULL; wp = wp->w_next) {
+ if (--winnr == 0) {
+ return wp->handle;
+ }
+ }
+ }
+ return 0;
+}
+
+int win_gotoid(typval_T *argvars)
+{
+ win_T *wp;
+ tabpage_T *tp;
+ int id = get_tv_number(&argvars[0]);
+
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ for (wp = tp == curtab ? firstwin : tp->tp_firstwin;
+ wp != NULL; wp = wp->w_next) {
+ if (wp->handle == id) {
+ goto_tabpage_win(tp, wp);
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+void win_id2tabwin(typval_T *argvars, list_T *list)
+{
+ win_T *wp;
+ tabpage_T *tp;
+ int winnr = 1;
+ int tabnr = 1;
+ int id = get_tv_number(&argvars[0]);
+
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ for (wp = tp == curtab ? firstwin : tp->tp_firstwin;
+ wp != NULL; wp = wp->w_next) {
+ if (wp->handle == id) {
+ list_append_number(list, tabnr);
+ list_append_number(list, winnr);
+ return;
+ }
+ winnr++;
+ }
+ tabnr++;
+ winnr = 1;
+ }
+ list_append_number(list, 0);
+ list_append_number(list, 0);
+}
+
+int win_id2win(typval_T *argvars)
+{
+ win_T *wp;
+ int nr = 1;
+ int id = get_tv_number(&argvars[0]);
+
+ for (wp = firstwin; wp != NULL; wp = wp->w_next) {
+ if (wp->handle == id) {
+ return nr;
+ }
+ nr++;
+ }
+ return 0;
+}
+
+void win_findbuf(typval_T *argvars, list_T *list)
+{
+ int bufnr = get_tv_number(&argvars[0]);
+
+ for (tabpage_T *tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ for (win_T *wp = tp == curtab ? firstwin : tp->tp_firstwin;
+ wp != NULL; wp = wp->w_next) {
+ if (wp->w_buffer->b_fnum == bufnr) {
+ list_append_number(list, wp->handle);
+ }
+ }
+ }
+}