aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os
Commit message (Collapse)AuthorAge
...
* event: Remove automatic event deferallThiago de Arruda2014-10-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is how asynchronous events are currently handled by Nvim: - Libuv event loop is entered when Nvim blocks for user input(os_inchar is called) - Any event delivered by libuv that is not user input is queued for processing - The `K_EVENT` special key code is returned by os_inchar - `K_EVENT` is returned to a loop that is reading keys for the current Nvim mode, which will be handled by calling event_process() This approach has the advantage of integrating nicely with the current codebase, eg: vimscript code can be executed asynchronously with little surprises(Its the same as if the user typed a key). The problem with using keys to represent any event is that it also interferes with operators, and not every event needs or should do that. For example, consider this scenario: - A msgpack-rpc client calls vim_feedkeys("d") - Nvim processes K_EVENT, pushing "d" to the input queue - Nvim processes "d", entering operator-pending mode to wait for a motion - The client calls vim_feedkeys("w"), expecting Nvim to delete a word - Nvim processes K_EVENT, breaking out of operator-pending and pushing "w" - Nvim processes "w", moving a word This commit fixes the above problem by removing all automatic calls to `event_push`(which is what generates K_EVENT input). Right now this also breaks redrawing initiated by asynchronous events(and possibly other stuff too, Nvim is a complex state machine and we can't simply run vimscript code anywhere). In future commits the calls to `event_push` will be inserted only where it's absolutely necessary to run code in "key reading loops", such as when executing vimscript code or mutating editor data structures in ways that currently can only be done by the user.
* event: Remove EventType enum and pass a callback to `event_push`Thiago de Arruda2014-10-21
| | | | | | This approach is more flexible because we don't need to support a fixed set of "event types", any module can push events to be handled in main loop by simply passing a callback to the Event structure.
* msgpack-rpc: Create subdirectory for msgpack-rpc modulesThiago de Arruda2014-10-21
| | | | | Create the msgpack_rpc subdirectory and move all modules that deal with msgpack-rpc to it. Also merge msgpack_rpc.c into msgpack_rpc/helpers.c
* rstream: Add rbuffer_read_ptr/rbuffer_write_ptr functionsThiago de Arruda2014-10-19
| | | | | | | | | rbuffer_data was renamed to rbuffer_read_ptr, and it represents the next read position in a RBuffer instance. Similarly, rbuffer_write_ptr was added to represent the next write position. Also, rbuffer_data was being used for writing(in alloc_cb), replace that by rbuffer_write_ptr.
* rstream: Initialize 'rstream' field in RBuffer classThiago de Arruda2014-10-19
| | | | | This field is used in a conditional jump, so this initialization is fixing a bug.
* ui: Refactor input buffer handlingThiago de Arruda2014-10-18
| | | | | All input buffer code was moved to os/input.c, and `inbuf` is now a `RBuffer` instance(which abstracts static buffer manipulation).
* rstream: Extract some RStream functionality to RBufferThiago de Arruda2014-10-18
| | | | | | | | RBuffer instances represent the internal buffer used by RStreams. This changes RStream constructor to receive RBuffer pointers and adds a set of RBuffer methods that expose the lower level buffer manipulation to consumers of the RStream API.
* server: Improve error reporting.Scott Prager2014-10-17
| | | | | | | | If we fail to bind to the server address, do not try and listen lest the reported error always be "invalid argument". Also, return whether or not we errored from server_init() in case we want to respond differently in the future.
* wstream/shell: Fix memory errors caused by os_systemThiago de Arruda2014-10-01
| | | | | | | | | | | | | | The os_system function uses a write callback to close the input stream when the write completes, but this causes a memory error because the callback is invoked right before the stream is freed by the caller. This fixes the problem by removing the callback set by os_system. Instead, it calls job_close_in immediately after writing(the stream will only close after the write completes). The 'pending' parameter was also removed from the 'write_cb' as it should be hidden by the wstream module. While the `wstream_set_write_cb` and `job_write_cb` are no longer used, they will remain in the codebase for future use.
* memory: xstrchrnul and xmemscan.Scott Prager2014-09-30
|
* api/msgpack-rpc: Improve error infrastructureThiago de Arruda2014-09-18
| | | | | | | | | | | | | | | | - Add error type information to `Error` - Rename `set_api_error` to `api_set_error` for consistency with other api_* functions/macros. - Refactor the api_set_error macro to accept formatted strings and error types - Improve error messages - Wrap error messages with gettext macro - Refactor msgpack-rpc serialization to transform Error instances into [type, message] arrays - Add error type information to API metadata - Normalize nvim->client and client->nvim error handling(change channel_send_call to accept an Error pointer instead of the `errored` boolean pointer) - Use macro to initialize Error structures
* vim-patch:7.4.235Scott Prager2014-09-17
| | | | | | | Problem: It is not easy to get the full path of a command. Solution: Add the exepath() function. https://code.google.com/p/vim/source/detail?r=5ab2946f7ce560985830fbc3c453bb0f7a01f385
* channel: Fix unpacker loop conditionThiago de Arruda2014-09-16
|
* server: Rename address environment variableThiago de Arruda2014-09-13
| | | | | To follow the pattern of using NVIM for technical descriptions, it was renamed to NVIM_LISTEN_ADDRESS
* api/msgpack-rpc: Refactor metadata object constructionThiago de Arruda2014-09-12
| | | | | | | | | Instead of building all metadata from msgpack-gen.lua, we now merge the generated part with manual information(such as types and features). The metadata is accessible through the api method `vim_get_api_info`. This was done to simplify the generator while also increasing flexibility(by being able to add more metadata)
* api: Implement `vim_report_error` functionThiago de Arruda2014-09-12
| | | | | This function is used to report errors caused by remote functions called by channel_send_call
* provider: Major refactorThiago de Arruda2014-09-12
| | | | | | | | | | | | | | | | | - Providers for features are now registered as a unit. For example, instead of calling `register_provider("clipboard_get")` and `register_provider("clipboard_set")`, clients call `register_provider("clipboard")` and nvim will assume it implements all methods of the "clipboard" feature - Bootstrapping code was removed. With the `api_spawn` function exposed to vimscript, it's no longer necessary and will be handled by plugins distributed with nvim. - Now the `has` function will return true if there's a live channel that has registered as a provider for the feature. - 'initpython'/'initclipboard' options were removed - A new API function was exposed: `vim_discover_features` which returns an object with information about pluggable features such as 'python' or 'clipboard'
* api/msgpack-rpc: Implement `channel_close` and expose to vimscriptThiago de Arruda2014-09-12
| | | | Simple function for closing a channel by id
* wstream: Fix close/freeThiago de Arruda2014-09-12
| | | | The current code was leading to an invalid free when the wstream was closed
* job: Fix crash when passing a non-executable path to job_startThiago de Arruda2014-09-12
|
* api/msgpack-rpc: Refactor msgpack_rpc_helpers.{c,h}Thiago de Arruda2014-09-12
| | | | | | - Move helpers that are specific to API types to api/private/helpers.{c,h} - Include headers with generated declarations - Delete unused macros
* api/msgpack-rpc: Remove Position type, using arrays instead.Thiago de Arruda2014-09-12
|
* api/msgpack-rpc: Use EXT type to serialize Buffer/Window/TabpageThiago de Arruda2014-09-12
|
* api/msgpack-rpc: Remove specialized array typesThiago de Arruda2014-09-12
| | | | | | | | | | | | | | | | | Specialized array types(BufferArray, WindowArray, etc) were added to the API for two main reasons: - msgpack used to lack a way of serializing appliaction-specific types and there was no obvious way of making an API function accept/return arrays of custom objects such as buffers(which are represented as integers, so clients didn't have a way to distinguish from normal numbers) - Let clients in statically-typed languages that support generics have a better typed API With msgpack 2.0 EXT type the first item is no longer a factor and this commit starts by removing the specialized array types. The second item will be addressed in the future by making the API metadata return extra useful information for statically-typed languages.
* msgpack-rpc: Remove the `msgpack_rpc_unpack` functionThiago de Arruda2014-09-12
| | | | | | | The `msgpack_rpc_unpack` function was created to work around a deficiency in the msgpack unpack API, which did not let the caller know if parsing failed due to needing more data or to invalid input. The deficiency does not exist in the latest version of `msgpack_unpacker_next`, so it can safely be removed.
* msgpack-rpc: Remove support for integer ids in methodsThiago de Arruda2014-09-12
| | | | | There's no need to have integer and string ids, and since we now fully support msgpack-RPC, support for integer ids was removed.
* msgpack-rpc: Refactor API metadata discovery methodThiago de Arruda2014-09-12
| | | | | | | | | | A new method is now exposed via msgpack-rpc: "get_api_metadata". This method has the same job as the old method '0', it returns an object with API metadata for use by generators. There's one difference in the return value though: instead of returning a string containing another serialized msgpack document, the metadata object is returned directly(a separate deserialization step by clients is not required).
* msgpack-rpc: Move handle_missing_method to msgpack_rpc.cThiago de Arruda2014-09-12
| | | | | Since that function is not automatically generated, it's best to place it in a normal C module
* msgpack-rpc: Refactor initializer and dispatcherThiago de Arruda2014-09-12
| | | | | | | | Use Map(String, rpc_method_handler_fn) for storing/retrieving rpc method handlers in msgpack_rpc_init and msgpack_rpc_dispatch. Also refactor serialization/validation functions in the msgpack_rpc.c/msgpack_rpc_helpers.c modules to accept the new STR and BIN types.
* deps: Update to the experimental msgpack v5 branchThiago de Arruda2014-09-12
| | | | | | | | Using msgpack v5 will let nvim be more compatible with msgpack libraries for other platforms. This also replaces "raw" references by "bin" which is the new name for msgpack binary data type
* fileinfo: change returntype of os_fileinfo_sizeStefan Hoffmann2014-08-31
| | | | off_t -> uint64_t
* fileid: rename os_file_id_equal_file_infoStefan Hoffmann2014-08-31
|
* fileid: rename os_file_id_equalStefan Hoffmann2014-08-31
|
* fileid: rename os_get_file_idStefan Hoffmann2014-08-31
|
* fileinfo: rename os_file_info_get_inodeStefan Hoffmann2014-08-31
|
* fileinfo: rename os_file_info_get_idStefan Hoffmann2014-08-31
|
* fileinfo: rename os_file_info_id_equalStefan Hoffmann2014-08-31
|
* fileinfo: rename os_get_file_info{,_link,_fd}Stefan Hoffmann2014-08-31
|
* fileinfo: implement os_fileinfo_blocksizeStefan Hoffmann2014-08-31
|
* fileinfo: implement os_fileinfo_hardlinksStefan Hoffmann2014-08-31
|
* fileinfo: implement os_fileinfo_sizeStefan Hoffmann2014-08-31
| | | | this replaces os_get_file_size and file_info.stat.st_size
* channel: Remove code for automatically closing in channel_send_callThiago de Arruda2014-08-31
| | | | | | This was causing a segfault(reported in #1125) because channels are already closed by `parse_msgpack` when the connection ends. Also fix the RPC stack overflow error message
* msgpack-rpc: Always use arrays when sending events or callsThiago de Arruda2014-08-29
| | | | | | This is required by the msgpack-RPC specification. Also, the send_call/send_event functions were refactored to accept a variable number of arguments
* msgpack-rpc: Accept method names in requestsThiago de Arruda2014-08-29
|
* api: Implement '--embedded-mode' command-line optionThiago de Arruda2014-08-28
| | | | | This option makes nvim run in "embedded mode", which creates an API channel via stdin/stdout and disables all terminal-related code
* channel: Implement channel_from_stdio functionThiago de Arruda2014-08-28
| | | | | This function can be used to create an API channel that reads/writes from/to stdin/stdout
* channel: fix channel buffer sizeThiago de Arruda2014-08-28
|
* channel: Fix channel not being closed when the RStream reaches EOFThiago de Arruda2014-08-28
|
* wstream: Implement wstream_set_fileThiago de Arruda2014-08-28
| | | | | | It's analogous to rstream_set_file but only supports pipes(Support for regular files may be added later). This function was added to support creating API channels via stdout.
* Merge pull request #950 from Hinidu/os_fchownJustin M. Keyes2014-08-16
|\ | | | | Implement os_fchown and remove HAVE_FCHOWN