neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

events.c (2384B)


      1 #include <assert.h>
      2 #include <inttypes.h>
      3 #include <stdbool.h>
      4 #include <stddef.h>
      5 #include <stdint.h>
      6 #include <stdlib.h>
      7 #include <string.h>
      8 
      9 #include "klib/kvec.h"
     10 #include "nvim/api/events.h"
     11 #include "nvim/api/private/converter.h"
     12 #include "nvim/api/private/defs.h"
     13 #include "nvim/api/private/helpers.h"
     14 #include "nvim/api/private/validate.h"
     15 #include "nvim/api/ui.h"
     16 #include "nvim/assert_defs.h"
     17 #include "nvim/autocmd.h"
     18 #include "nvim/autocmd_defs.h"
     19 #include "nvim/channel.h"
     20 #include "nvim/channel_defs.h"
     21 #include "nvim/eval/vars.h"
     22 #include "nvim/globals.h"
     23 #include "nvim/main.h"
     24 #include "nvim/map_defs.h"
     25 #include "nvim/memory.h"
     26 #include "nvim/memory_defs.h"
     27 #include "nvim/msgpack_rpc/channel.h"
     28 #include "nvim/msgpack_rpc/channel_defs.h"
     29 #include "nvim/msgpack_rpc/packer.h"
     30 #include "nvim/msgpack_rpc/packer_defs.h"
     31 #include "nvim/types_defs.h"
     32 #include "nvim/ui.h"
     33 
     34 /// Emitted on the client channel if an async API request responds with an error.
     35 ///
     36 /// @param channel_id
     37 /// @param type Error type id as defined by `api_info().error_types`.
     38 /// @param msg Error message.
     39 void nvim_error_event(uint64_t channel_id, Integer type, String msg)
     40  FUNC_API_REMOTE_ONLY
     41 {
     42  // TODO(bfredl): consider printing message to user, as will be relevant
     43  // if we fork nvim processes as async workers
     44  ELOG("async error on channel %" PRId64 ": %s", channel_id, msg.size ? msg.data : "");
     45 }
     46 
     47 /// Emitted by the TUI client to signal when a host-terminal event occurred.
     48 ///
     49 /// Supports these events:
     50 ///
     51 ///   - "termresponse": The host-terminal sent a DA1, OSC, DCS, or APC response sequence to Nvim.
     52 ///                     The payload is the received response. Sets |v:termresponse| and fires
     53 ///                     |TermResponse|.
     54 ///
     55 /// @param channel_id
     56 /// @param event Event name
     57 /// @param value Event payload
     58 /// @param[out] err Error details, if any.
     59 void nvim_ui_term_event(uint64_t channel_id, String event, Object value, Error *err)
     60  FUNC_API_SINCE(12) FUNC_API_REMOTE_ONLY
     61 {
     62  if (strequal("termresponse", event.data)) {
     63    if (value.type != kObjectTypeString) {
     64      api_set_error(err, kErrorTypeValidation, "termresponse must be a string");
     65      return;
     66    }
     67 
     68    const String termresponse = value.data.string;
     69    set_vim_var_string(VV_TERMRESPONSE, termresponse.data, (ptrdiff_t)termresponse.size);
     70    do_termresponse_autocmd(termresponse);
     71  }
     72 }