diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-09-28 08:13:31 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:56 +1000 |
commit | e8bfa491fa726c034a99ff7fc4fc64b990d45e12 (patch) | |
tree | 59a1bc194f3becfb7d9b2d9d18c3949972488033 | |
parent | 6cd1b1be48ee1713db03480336d6a53c714ce61a (diff) | |
download | jimtcl-e8bfa491fa726c034a99ff7fc4fc64b990d45e12.zip jimtcl-e8bfa491fa726c034a99ff7fc4fc64b990d45e12.tar.gz jimtcl-e8bfa491fa726c034a99ff7fc4fc64b990d45e12.tar.bz2 |
Allow exit from .jimrc
Only show error on JIM_ERR from .jimrc
Also fixes to rlprompt.tcl so it can be used from .jimrc
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jimsh.c | 17 | ||||
-rw-r--r-- | rlprompt.tcl | 7 |
2 files changed, 13 insertions, 11 deletions
@@ -92,7 +92,7 @@ static Jim_Obj *JimGetExePath(Jim_Interp *interp, const char *argv0) } #endif /* JIM_ANSIC */ -static void JimLoadJimRc(Jim_Interp *interp) +static int JimLoadJimRc(Jim_Interp *interp) { const char *home; /* XXX: Move off stack */ @@ -100,21 +100,24 @@ static void JimLoadJimRc(Jim_Interp *interp) const char *names[] = { ".jimrc", "jimrc.tcl", NULL }; int i; FILE *fp; + int retcode; if ((home = getenv("HOME")) == NULL) - return; + return JIM_OK; for (i = 0; names[i] != NULL; i++) { if (strlen(home) + strlen(names[i]) + 1 > JIM_PATH_LEN) continue; sprintf(buf, "%s/%s", home, names[i]); if ((fp = fopen(buf, "r")) != NULL) { fclose(fp); - if (Jim_EvalFile(interp, buf) != JIM_OK) { + retcode = Jim_EvalFile(interp, buf); + if (retcode == JIM_ERR) { Jim_PrintErrorMessage(interp); } - return; + return retcode; } } + return JIM_OK; } static void JimSetArgv(Jim_Interp *interp, int argc, char *const argv[]) @@ -160,8 +163,10 @@ int main(int argc, char *const argv[]) if (argc == 1) { Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "1"); JimSetArgv(interp, 0, NULL); - JimLoadJimRc(interp); - retcode = Jim_InteractivePrompt(interp); + retcode = JimLoadJimRc(interp); + if (retcode != JIM_EXIT) { + retcode = Jim_InteractivePrompt(interp); + } } else { Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "0"); diff --git a/rlprompt.tcl b/rlprompt.tcl index 1d8860e..cdd78d4 100644 --- a/rlprompt.tcl +++ b/rlprompt.tcl @@ -9,6 +9,7 @@ # rlprompt.shell # } # } +package require readline proc rlprompt.shell {} { puts "Readline shell loaded" @@ -16,11 +17,7 @@ proc rlprompt.shell {} { set prompt ". " set buf "" while 1 { - try -exit { - set line [readline.readline $prompt] - } on exit dummy { - break - } + set line [readline.readline $prompt] if {[string length $line] == 0} { continue |