From 314485edfb0d0e7c7cb645764be2405374c31e9a Mon Sep 17 00:00:00 2001 From: Leif Andersen Date: Fri, 22 Jul 2016 14:12:04 -0400 Subject: [PATCH] Start up xrepl when repl is loaded. --- racket/collects/racket/init.rkt | 5 ----- racket/src/gracket/grmain.c | 25 +++++++++++++++++++++++++ racket/src/racket/cmdline.inc | 9 +++++++++ racket/src/racket/main.c | 27 +++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/racket/collects/racket/init.rkt b/racket/collects/racket/init.rkt index 92d344e14e..aa2a545349 100644 --- a/racket/collects/racket/init.rkt +++ b/racket/collects/racket/init.rkt @@ -12,8 +12,3 @@ (provide (all-from-out racket racket/enter racket/help)) - -;; Set the default replt to XREPL -(when (collection-file-path "main.rkt" "xrepl" - #:fail (lambda _ #f)) - (dynamic-require 'xrepl #f)) diff --git a/racket/src/gracket/grmain.c b/racket/src/gracket/grmain.c index b47e7e9e6e..1fcdcb78ba 100644 --- a/racket/src/gracket/grmain.c +++ b/racket/src/gracket/grmain.c @@ -20,6 +20,7 @@ static void pre_filter_cmdline_arguments(int *argc, char ***argv); #endif struct Scheme_Env; +static char *get_gr_config_init_filename(struct Scheme_Env *env); static char *get_gr_init_filename(struct Scheme_Env *env); #ifdef wx_xt @@ -36,6 +37,7 @@ static void pre_filter_cmdline_arguments(int *argc, char ***argv); #define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\gracketrc.rktl" #define MACOS9_INIT_FILENAME "PREFERENCES:gracketrc.rktl" #define GET_INIT_FILENAME get_gr_init_filename +#define GET_CONFIG_INIT_FILENAME get_gr_config_init_filename #if WIN32 # define NEED_CONSOLE_PRINTF # define DEFER_EXPLICIT_EXIT @@ -63,6 +65,29 @@ static void pre_filter_cmdline_arguments(int *argc, char ***argv); # include "../racket/main.c" +static char *get_gr_config_init_filename(Scheme_Env *env) +{ + char *s, *s2; + int len, i; + + s = get_config_init_filename(env); + if (s) { + len = strlen(s); + for (i = len - 8; i; i--) { + if (!strncmp(s XFORM_OK_PLUS i, "racketrc", 8)) { + s2 = (char *)malloc(len + 2); + memcpy(s2, s, i); + memcpy(s2 + i + 1, s + i, len - i + 1); + s2[i] = 'g'; + s = s2; + break; + } + } + } + + return s; +} + static char *get_gr_init_filename(Scheme_Env *env) { char *s, *s2; diff --git a/racket/src/racket/cmdline.inc b/racket/src/racket/cmdline.inc index bf9a27e46e..ed6a0aa281 100644 --- a/racket/src/racket/cmdline.inc +++ b/racket/src/racket/cmdline.inc @@ -670,6 +670,15 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) #ifndef DONT_LOAD_INIT_FILE if (fa->a->use_repl && !fa->a->no_init_file) { char *filename; + + filename = GET_CONFIG_INIT_FILENAME(fa->global_env); + if (filename) { + filename = scheme_expand_filename(filename, -1, "startup", NULL, SCHEME_GUARD_FILE_EXISTS); + if (scheme_file_exists(filename)) { + scheme_load(filename); + } + } + filename = GET_INIT_FILENAME(fa->global_env); if (filename) { filename = scheme_expand_filename(filename, -1, "startup", NULL, SCHEME_GUARD_FILE_EXISTS); diff --git a/racket/src/racket/main.c b/racket/src/racket/main.c index 2e6b294613..6ef5340594 100644 --- a/racket/src/racket/main.c +++ b/racket/src/racket/main.c @@ -97,6 +97,32 @@ extern BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved); /*========================================================================*/ #ifndef DONT_LOAD_INIT_FILE +static char * get_config_init_filename(Scheme_Env *env) +{ + Scheme_Object *f, *a[2]; + Scheme_Thread * volatile p; + mz_jmp_buf * volatile save, newbuf; + + p = scheme_get_current_thread(); + save = p->error_buf; + p->error_buf = &newbuf; + + if(!scheme_setjmp(newbuf)) { + f = scheme_builtin_value("find-main-config"); + a[0] = _scheme_apply(f, 0, NULL); + a[1] = scheme_make_path("racketrc"); + f = scheme_builtin_value("build-path"); + f = _scheme_apply(f, 2, a); + if (SCHEME_PATHP(f)) { + p->error_buf = save; + return SCHEME_PATH_VAL(f); + } + } + p->error_buf = save; + + return NULL; +} + static char *get_init_filename(Scheme_Env *env) { Scheme_Object *f; @@ -136,6 +162,7 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env); # define UNIX_INIT_FILENAME "~/.racketrc" # define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\racketrc.rktl" # define MACOS9_INIT_FILENAME "PREFERENCES:racketrc.rktl" +# define GET_CONFIG_INIT_FILENAME get_config_init_filename # define GET_INIT_FILENAME get_init_filename # define PRINTF printf # define PROGRAM "Racket"