diff options
Diffstat (limited to 'Src/prompt.c')
-rw-r--r-- | Src/prompt.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/Src/prompt.c b/Src/prompt.c index 36eaca3e9..7bba51c61 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -725,11 +725,37 @@ putpromptchar(int doprint, int endchar, unsigned int *txtchangep) if(Rstring) stradd(Rstring); break; + case 'I': + if (funcstack && funcstack->tp != FS_SOURCE) { + /* + * We're in a function or an eval with + * EVALLINENO. Calculate the line number in + * the file. + */ + zlong flineno = lineno + funcstack->flineno; + /* take account of eval line nos. starting at 1 */ + if (funcstack->tp == FS_EVAL) + lineno--; + addbufspc(DIGBUFSIZE); + sprintf(bp, "%ld", (long)flineno); + bp += strlen(bp); + break; + } + /* else we're in a file and lineno is already correct */ + /* FALLTHROUGH */ case 'i': addbufspc(DIGBUFSIZE); sprintf(bp, "%ld", (long)lineno); bp += strlen(bp); break; + case 'x': + if (funcstack && funcstack->tp != FS_SOURCE) + promptpath(funcstack->filename ? funcstack->filename : "", + arg, 0); + else + promptpath(scriptfilename ? scriptfilename : argzero, + arg, 0); + break; case '\0': return 0; case Meta: |