Please find attached a patch for the following issue: :mzscheme could be invoked before the mzscheme/racket libraries were initialised, e.g. in startup scripts and on the command line.
Therefore the following would SEGV: vim +':mz 1' Even though: :mz 1 works when editing a file. mzscheme expects to be invoked by a "trampoline" that wraps around the main() of the embedding environment -- and this trampoline is around main_loop(). exe_pre_commands() and source_startup_scripts() are outside the scope of the trampoline. This patch causes main() to be called in two parts. The first part sets up vim's environment and globals, but does not execute any vim commands (as far as I can tell). It then calls to mzscheme_init, which eventually recurs into main(); which skips the initialisation, and proceeds with anything that may perform commands. Notes: * I pass fname and params between invocations of main() through the static variables save_mz_fname and save_mz_params. There is justification at the top of main() for doing so. I'm not so keen on statics, myself -- so I've not re-declared fname and params themselves. * The other option would be to split main into two parts -- an "initialisation" and a "commands" part. Then start up vim with: main(argc, argv) calls mzscheme_init(argc, argv, fname, params) calls ... main_part2(argc, argv, fname, params) [or, in the case of !FEAT_MZSCHEME: main(argc,argv) calls main_part2(argc, argv, fname, params)] I think I've done enough in main already! And, unless there is more general merit in such a refactoring, this is as much disruption as I need to cause :-) Thanks Sergey and Bram for your help! Tim -- | Tim Brown <tim.br...@timb.net> | M:+44(0)7771714159 | H:01372747875 | -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
mzscheme-is-ready-when-vim-needs-it.patch
Description: Binary data