On Windows R is run with CWD set to the directory used at install time,
rather than the current directory. The official workaround for this is
to add links to R from the home directories of each of your projects.
We can't do that in Vim, but we can call `setwd()` to Vim's idea of
current directory. This mimics the behaviour of R on UNIX.
The syntax checker uses the `cabal check` command to check Haskell
Cabal package descriptions for syntax errors and other potential
problems. Currently, the `cabal check` command does not take a file
argument, so the current working directory must be changed to that
of the package description's before `cabal` can be executed.
Additionally, `cabal check` only issues line numbers for parse errors,
so warnings are arbitrarily assigned to line 1.
On terms that support smm / rmm (f.i. xterm), initializing readline
prints the smm sequence, regardless of whether stdout is a terminal or
not, which in turn can make checkers' output unparseable.
Workaround: set TERM to dumb before calling the checkers.
Error sorting can't be done as a postprocess function called from
SyntasticMake(), since the final values of some relevant fields (f.i.
type) might not be known yet at that point. Solution: move sorting to
getLocListRaw(), after per-checker quiet_messages. New checker methods
getWantSort() / setWantSort() are needed.
Second problem: some checkers return screen columns mixed with byte
indices. Solution: compute screen columns as needed. Sadly, everything
about working with screen columns is fragile.
Especially for 'hdevtools' this results into a more robust behaviour,
because 'hdevtools' starts a background process and changing the
current directory doesn't affect the current directory of the background
process.