Commit Graph

229 Commits

Author SHA1 Message Date
Thiago de Arruda
541eaf598c ui: Remove ui_inchar/ui_char_avail
Also:

- Remove NO_CONSOLE_INPUT/NO_CONSULE preprocessor conditionals
- Remove ctrl_c_interrupts variable, check for mapped_ctrl_c directly in
  process_interrupts()
- Move ui_inchar profiling to input_poll which is where Nvim blocks for input.
2014-11-27 14:12:59 -03:00
Thiago de Arruda
f09a33bbc1 event: No longer process K_EVENT automatically
Two new functions, `event_enable_deferred()`/`event_disable_deferred()` have to
be called by code that is capable of handling asynchronicity. User-dialog states
like "press ENTER to continue" or the swap file confirmation no longer will
generate K_EVENT.
2014-11-21 15:41:02 -03:00
Eliseo Martínez
a6548e4fb3 Fix warnings: message.c: vim_vsnprintf(): Dead assignment (2): HI.
Problem    : Dead assignment @ 3323.
             Dead assignment @ 3587.
Diagnostic : Harmless issues.
Rationale  : - 3323: Assignment is in fact dead. But, in addition to
               that, `length_modifier` is assigned default value `\0`
               when declared and is untouched in path leading to
               signaled point. So, maintaining assignment adds nothing
               to code.
             - 3587: Assignment is in fact dead. It could be thought
               that `precision_specified` has to be 1 in order to flag
               `precision` as having a valid value. But that doesn't
               seem to be the case, as there are places in the code
               where `precision` gets assigned a default value, even if
               `precision_specified` is 0. So, maintaining assignment
               adds nothing to code.
Resolution : Remove dead assignments.
2014-11-11 01:43:14 +01:00
Eliseo Martínez
5bf6639e0f Fix warnings: message.c: delete_first_msg(): Np dereference: FP.
Problem    : Dereference of null pointer @ 693.
Diagnostic : False positive.
Rationale  : Error condition occurs if `delete_first_msg` is entered two
             consecutive times, the firt of which sets leaves history
             empty. But, in that case, second entrance should leave at
             the `return FAIL`, and thus cannot reach the pointer
             dereference.
Resolution : Assert history will be empty after first entrance.
2014-11-11 01:43:14 +01:00
Scott Prager
eff839b26d memory: xstrchrnul and xmemscan. 2014-09-30 19:33:48 -04:00
Thiago de Arruda
2e4ea29d2c events: Refactor how event deferral is handled
- Remove all *_set_defer methods and the 'defer' flag from rstream/jobs
- Added {signal,rstream,job}_event_source functions. Each return a pointer that
  represent the event source for the object in question(For signals, a static
  pointer is returned)
- Added a 'source' field to the Event struct, which is set to the appropriate
  value by the code that created the event.
- Added a 'sources' parameter to `event_poll`. It should point to a
  NULL-terminated array of event sources that will be used to decide which
  events should be processed immediately
- Added a 'source_override' parameter to `rstream_new`. This was required to use
  jobs as event sources of RStream instances(When "focusing" on a job, for
  example).
- Extracted `process_from` static function from `event_process`.
- Remove 'defer' parameter from `event_process`, which now operates only on
  deferred events.
- Refactor `channel_send_call` to use the new lock mechanism

What changed in a single sentence: Code that calls `event_poll` have to specify
which event sources should NOT be deferred. This change was necessary for a
number of reasons:

- To fix a bug where due to race conditions, a client request
  could end in the deferred queue in the middle of a `channel_send_call`
  invocation, resulting in a deadlock since the client process would never
  receive a response, and channel_send_call would never return because
  the client would still be waiting for the response.
- To handle "event locking" correctly in recursive `channel_send_call`
  invocations when the frames are waiting for responses from different
  clients. Not much of an issue now since there's only a python client, but
  could break things later.
- To simplify the process of implementing synchronous functions that depend on
  asynchronous events.
2014-07-17 11:37:42 -03:00
Brandon Coleman
a32df5e734 move defines from vim.h
buffer.h:
   buflist_getfile() flags
   buflist_new() flags
   buf_freeall() flags
   do_buffer() flags

charset.h:
   chartab[] flags

edit.h:
   in_cinkeys() flags
   change_indent() flags
   beginline() flags
   insertchar() flags
   nv_mousescroll() flags

eval.c
   AUTOLOAD_CHAR

eval.h:
   enum for vimvars[]

ex_cmds.h:
   do_ecmd
   read_viminfo flags

ex_cmds2.h:
   check_changed() flags
   do_source() flags

ex_cmds_defs.h:
   BAD_* flags

ex_docmd.h:
   VALID_PATH VALID_HEAD
   EXMODE_*
   do_cmdline() flags
added include

ex_getln.c
   *_ESC_CHARS definitions

ex_getln.h:
   history table flags - used by add_to_history()

fileio.h:
   readfile() flags
   event_T definition

getchar.h:
   ins_typebuf() flags
   KEYLEN_*

globals.h:
   NO_SCREEN
   NO_BUFFERS
   SEA_* defines
   current_SID flags
   hlf_T enum
   HL_FLAGS
   do_profiling() flags
   schar_T
   sattr_T

indent.h:
   set_indent() flags

macros.h:
   BINARY_FILE_IO flags

mbyte.h:
   MB_BYTE2LEN*
   ENC_*

memfile.h:
   mf_sync() flags

misc1.h:
   open_line() flags

message.h:
   do_dialog() flags
   vim_dialogyesno() flags
   DLG_BUTTON_*

normal.h:
   find_ident_under_cursor() flags

ops.h:
   do_put() flags
   operator ID's

option.h:
   buf_copy_options() flags
   OPT_* flags

os_unix.h:
   mch_nodetype() flags

quickfix.h:
   skip_vimgrep_pat() flags

regexp.h:
   vim_regcomp() flags
   values for reg_do_extmatch

search.h:
   do_search() flags
   search_regcomp() flags
   findmatchlimit() flags

syntax.h:
   HL_* flags
      HL_FOLD is used in buffer_defs.h but nvim
      compiles just fine with the defines in
      syntax.h

tag.h:
   do_tag() flags
   find_tags() flags

term.h:
   TBUFSZ flags
   MOUSE flags

ui.h:
   jump_to_mouse() flags

window.h:
   file_name_in_line() flags
   win_split() flags
   MIN_LINES
   MIN_COLUMNS

Remove VimClipboard which should have been removed with PR #921.
2014-07-12 14:26:55 +02:00
Brandon Coleman
0fff487690 move errno.h include out of vim.h 2014-07-09 00:18:20 +02:00
Brandon Coleman
b94d07b046 move stdarg.h include out of vim.h 2014-07-09 00:18:19 +02:00
Brandon Coleman
bf219e1442 move <inttypes.h> include out of vim.h 2014-07-09 00:18:19 +02:00
Brandon Coleman
82b71a3056 move ascii.h include out of vim.h 2014-07-09 00:18:18 +02:00
Brandon Coleman
a4f441e547 remove stdbool.h include from vim.h and globals.h 2014-07-09 00:18:17 +02:00
Klemen Košir
a568e8b644 Replaced most TRUE/FALSE macros in arabic, mbyte and spell. #645 2014-07-08 17:34:08 +00:00
Felipe Oliveira Carvalho
be3a4b6ca8 ga_growsize should be >= 1
I know it could be 0 sometimes. Running the tests with
`assert(gap->ga_growsize > 0)` in ga_grow() crashes nvim while running the
tests.

 - Add a setter for ga_growsize that checks whether the value passed is >=1 (log
	 in case it's not)
 - log when ga_grow() tries to use a ga_growsize that's not >=1
 - use GA_EMPTY_INIT_VALUE is many places
2014-06-30 03:57:50 -04:00
Thiago de Arruda
0621a6eaa5 events: Refactor how events are queued for processing
To make it possible reuse `event_poll` recursively and in other blocking
function calls, this changes how deferred/immediate events are processed:

- There are two queues in event.c, one for immediate events and another for
  deferred events. The queue used when pushing/processing events is determined
  with boolean arguments passed to `event_push`/`event_process` respectively.
- Events pushed to the immediate queue are processed inside `event_poll` but
  after the `uv_run` call. This is required because libuv event loop does not
  support recursion, and processing events may result in other `event_poll`
  calls.
- Events pushed to the deferred queue are processed later by calling
  `event_process(true)`. This is required to "trick" vim into treating all
  asynchronous events as special keypresses, which is the least obtrusive
  way of introducing asynchronicity into the editor.
- RStream instances will now forward the `defer` flag to the `event_push` call.
2014-06-18 11:36:07 -03:00
Felipe Oliveira Carvalho
e85598e5a9 Remove unnecessary comments and unnecessary return 2014-06-16 01:40:29 -03:00
Felipe Oliveira Carvalho
3d10e2e0cb No OOM in msg_show_console_dialog() 2014-06-16 01:31:37 -03:00
Douglas Schneider
d430f039d1 Replace vim_strncpy calls: message.c 2014-06-13 18:08:22 -04:00
Will Stamper
5b3b3fd3ed spelling fixes #827 2014-06-12 20:26:35 -04:00
Nicolas Hillegeer
46e4bc0481 text: remove useless arg from mb_string2cells
mb_string2cells was always called like mb_string2cells(..., -1) so that was
the only codepath that was tested. @tarruda was the first to try to input an
actual length, after which valgrind detected that funny business was going
on.

It's not even possible to do the right thing with the current text codec
infrastructure: they all assume to be working with C strings. Meaning that
if there is no NUL-terminator, they will happily keep on reading past the
end of Pascal strings. Ergo, passing the length parameter is moot. The
condition in the for-loop was wrong as well (but that's no longer relevant).

Also change the return value to size_t, by analogy with strlen.

ref:
677d30d796
2014-06-08 12:48:22 -04:00
Justin M. Keyes
01ca4600ba Remove USE_CR and tag_fgets. #808
These features are only used by legacy Mac OS.
2014-06-06 18:04:37 -04:00
ZyX
6498b281fa Remove remaining declarations with new script: finddeclarations.pl 2014-06-02 11:04:18 -03:00
ZyX
70929f7e16 Add automatic generation of headers
- The 'stripdecls.py' script replaces declarations in all headers by includes to
  generated headers.
  `ag '#\s*if(?!ndef NEOVIM_).*((?!#\s*endif).*\n)*#ifdef INCLUDE_GENERATED'`
  was used for this.
- Add and integrate gendeclarations.lua into the build system to generate the
  required includes.
- Add -Wno-unused-function
- Made a bunch of old-style definitions ANSI

This adds a requirement: all type and structure definitions must be present
before INCLUDE_GENERATED_DECLARATIONS-protected include.

Warning: mch_expandpath (path.h.generated.h) was moved manually. So far it is
the only exception.
2014-06-02 11:04:17 -03:00
Hinidu
b4ca3abc9f Remove FEAT_FLOAT
Support for floating point variables
2014-05-28 13:08:55 -04:00
Hinidu
a29b94e2f9 Remove FEAT_EVAL
Support for VimScript, :let, :if, etc.
2014-05-28 13:08:54 -04:00
Felipe Oliveira Carvalho
21784aeb00 Replace alloc() with xmalloc() and remove immediate OOM checks 2014-05-19 14:50:23 -03:00
Eliseo Martínez
762a8ad0f3 Introduce nvim namespace: Fix unmasked strings.h issue.
Problem:  Now that nvim/strings.h is correctly namespaced, an issue
          that had been masked until now arises:

          When compiling, we get a lot of errors because of everywhere
          the functions in nvim/strings.h are used, there's no include
          to import them.

          But, how could this compile and work previously, then? It
          turns out that:
          - In every such case, we are also including vim.h, which in
            turn includes os_unix_defs.h.
          - os_unix_defs.h includes <string.h> and also <strings.h> in
            some systems (e.g. OSX).
          - Build had been modified previously to (even when importing
            system headers), prefer equally-named local ones. That was
            in fact done as a previous attempt to solve the same issue
            we are trying to solve another way now.

          So, we were including our "strings.h" as a side-effect of
          including <strings.h> through "vim.h" --> "os_unix_defs.h".

Solution: Correctly include "nvim/strings.h" in every file needing it.
2014-05-15 20:46:02 +02:00
Eliseo Martínez
409cc138f2 Introduce nvim namespace: Fix project-local includes.
Prepend 'nvim/' in all project-local (non-system) includes.
2014-05-15 20:46:01 +02:00
Eliseo Martínez
da51dc9cf2 Introduce nvim namespace: Move files.
Move files from src/ to src/nvim/.
- src/nvim/ becomes the new root dir for nvim executable sources.
- src/libnvim/ is planned to become root dir of the neovim library.
2014-05-15 20:46:01 +02:00