aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-09-28 08:13:31 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:56 +1000
commite8bfa491fa726c034a99ff7fc4fc64b990d45e12 (patch)
tree59a1bc194f3becfb7d9b2d9d18c3949972488033
parent6cd1b1be48ee1713db03480336d6a53c714ce61a (diff)
downloadjimtcl-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.c17
-rw-r--r--rlprompt.tcl7
2 files changed, 13 insertions, 11 deletions
diff --git a/jimsh.c b/jimsh.c
index 73763b8..32f16b7 100644
--- a/jimsh.c
+++ b/jimsh.c
@@ -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