Commit Graph

20 Commits

Author SHA1 Message Date
Thiago de Arruda
57cd2d6614 Remove the old mch_call_shell implementation 2014-04-05 11:05:31 -03:00
Stefan Hoffmann
092bdcac90 Removed not defined prototypes in os_unix.h
* reset_signals, vim_handle_signal:
    signal handling was rewritten, not defined anywhere

  * related to x clipboard handling, not defined anywhere:
    * {setup,start,stop,clear}_xterm_clip
    * stop_xterm_trace
    * clip_xterm_{own_selection,lose_selection,request_selection,set_selection}

  * related to XSMP (x session management protocol):
    * xsmp_{handle_requests,init,close}
2014-04-04 19:09:01 -03:00
Thiago de Arruda
774f668c43 Move signal handling to libuv event loop
This removes all signal handling code from os_unix.c to os/signal.c. Now signal
handling is done like this:

- Watchers for signals are registered with libuv default event loop
- `event_poll` continuously calls `poll_uv_loop` to produce events until it
  receives user input, SIGINT or a timeout
- Any signals received in `poll_uv_loop` will push events to a queue that is
  drained and processed by `event_poll`

Signals aren't handled directly in the libuv callback to avoid recursion in the
event loop(which isn't supported by libuv).

The same principle will apply to other events in the future: Push to a queue
from a libuv callback and drain it from `event_poll`
2014-04-01 09:46:29 -03:00
John Schmidt
7464b07c22 Move mch_expandpath from os_unix.c 2014-04-01 08:08:07 -03:00
Thiago de Arruda
0d61b1c470 Refactor SHELL_* defines into enum typedef
The SHELL_* defines are the bitflags that can be passed to `mch_call_shell`.
The enum is defined in 'os/shell.h', where all shell-related functions will
eventually be defined.
2014-03-31 08:07:47 -03:00
Thiago de Arruda
c791922224 Make extra_shell_arg a mch_call_shell parameter 2014-03-31 08:07:46 -03:00
Thiago de Arruda
452804638d Reimplement input functions on top of libuv
The functions `mch_inchar`, `mch_breakcheck`, `mch_char_avail` were
reimplemented on top of libuv. Here's how it works:

- When Neovim needs to wait for characters, it will transfer control to libuv
  event loop.
- When the libuv event loop gets user input, it will transfer control back to
  Neovim
- Neovim uses the `input_read` function to get the actual data read by libuv.

With this scheme its possible to keep Neovim single-threaded while enjoying the
benefits provided by libuv.

This commit leaves SIGWINCH broken for now
2014-03-26 18:30:18 -03:00
Thiago de Arruda
32f118a47f Implement mch_delay on top of libuv
Needed to temporarily move two static variables from os_unix.c to 'globals.h'
as those are shared by other functions still in os_unix.
2014-03-24 19:25:07 -03:00
Thomas Wienecke
c83e8b4dc7 Move and refactor mch_[gs]etperm to os/fs module. 2014-03-15 11:50:22 -03:00
Stefan Hoffmann
ce31410c79 moved mch_get_user_name() and mch_get_uname() into os/users.c 2014-03-13 17:18:44 -03:00
Thomas Wienecke
d5b223afe2 Move mch_can_exe, executable_file to os/fs.c.
* Rename executable_file to is_executable.
2014-03-07 17:30:39 -03:00
Thomas Wienecke
8bb672e6a0 Port mch_isdir to libuv. 2014-03-05 15:01:19 -03:00
Alexander Bolodurin
d8b37824b5 Remove dead stack-checking code.
Code under HAVE_STACK_LIMIT is not used.
The definition was commented out in rev 180 of the original
Mercurial repo, and then completely removed in rev 2520,
but the code guarded by it was left in.
2014-03-03 09:50:41 -03:00
Nicolas Pierron
d9283c4927 Remove __ARGS macro. Close #205
This is a squash of all commits sent to #81.

- Remove unused undef of __ARGS.
- Fix mch_rename declaration.
- Follow changes related to moved & extracted files.
- Properly indent function declarations of getchar.h and quickfix.c.
2014-03-02 14:19:59 -03:00
scott-linder
0ef90c13b7 Removes 'proto' dir
See #137 for the issue.

Every header in the proto directory was:

* Given include guards in the form

    #ifndef NEOVIM_FILENAME_H
    #define NEOVIM_FILENAME_H
        ...
    #endif /* NEOVIM_FILENAM_H */

* Renamed from *.pro -> *.h
* Moved from src/proto/ to src/

This would have caused conficts with some existing headers in src/;
rather than merge these conflicts now (which is a whole other can of
worms involving multiple and conditional inclusion), any header in src/
with a conflicting name was renamed from *.h -> *_defs.h (which may or
may not actually describe its purpose, the change is purely a
namespacing issue).

Once all of these changes were made a script was developed to determine
what #includes needed to be added to each source file to describe its
dependencies and allow it to compile; because the script is so short
and I'll just list it here:

    #! /bin/bash

    cd $(dirname $0)

    # Scrapes `make` output for provided error messages and outputs #includes
    # needed to resolve them.
    #   $1 : part of the clang error message between filename and identifier
    list_missing_includes() {
        for file_missing_pair in $(CC=clang make 2>&1 >/dev/null | sed -n "s/\/\(.*\.[hc]\).*$1.*'\(.*\)'.*/\1:\2/p"); do
            fields=(${file_missing_pair//:/ })
            source_file=${fields[0]}
            missing_func=${fields[1]}
            # Try to find the declaration of the missing function.
            echo $(basename $source_file) \
                \#include \"$(grep -r "\b$missing_func __ARGS" | sed -n "s/.*\/\(.*\)\:.*/\1/p")\"
        # Remove duplicates
        done | sort | uniq
    }

    echo "Finding missing function prototypes..."
    list_missing_includes "implicit declaration of function"
    echo "Finding missing identifier declarations..."
    list_missing_includes "use of undeclared identifier"

Each list of required headers was added by hand in the following format:

    #include "vim.h"
    #include "*_defs.h"
    #include "filename.h"
    /* All other includes in same module here, in alphabetical order. */
    /* All includes from other modules (e.g. "os/*.h") here in alphabetical
     * order. */
2014-02-26 04:17:27 -03:00
Thomas Wienecke
82e0636e78 Delete local function strerror and USE_GETCWD define.
Both are useless after porting mch_dirname to libuv.
2014-02-25 21:24:52 -03:00
Rich Wareham
65e7610655 os_unix: use libuv total memory function 2014-02-24 22:00:03 -03:00
Christian Wellenbrock
79321c62d5 Use neovim versions of ~/.vim and ~/.vimrc 2014-02-24 14:13:11 -03:00
scott-linder
b76c358f3d Convert function declarations from K&R to ANSI style.
cproto (http://invisible-island.net/cproto/) was used to do the bulk of
the work in batch; even the most recent version had some issues with
typedef'd parameters; a quick "patch" was to modify `lex.l` to
explicitly include all vim typedefs as known types. One example from
`vim.h` is

    typedef unsigned char char_u;

which was added in `lex.l` as

    <INITIAL>char_u    { save_text_offset(); return T_CHAR; }

Even with these changes there were some problems:

* Two files (`mbyte.c` and `os_unix.c`) were not cleanly converted.
* Any function with the `UNUSED` macro in its parameter list was not converted.

Rather than spend more time fixing the automated approach, the two files
`mbyte.c` and `os_unix.c` were converted by hand.

The `UNUSED` macros were compiler specific, and the alternative, generic
version would require a different syntax, so in order to simplify the
conversion all uses of `UNUSED` were stripped, and then the sources were
run back through cproto. It is planned to reconsider each use of
`UNUSED` manually using a new macro definition.
2014-02-24 09:48:18 -05:00
Thiago de Arruda
72cf89bce8 Import vim from changeset v5628:c9cad40b4181
- Cleanup source tree, leaving only files necessary for compilation/testing
- Process files through unifdef to remove tons of FEAT_* macros
- Process files through uncrustify to normalize source code formatting.
- Port the build system to cmake
2014-01-31 10:39:15 -03:00