| Ilya Zakharevich on Tue, 15 Oct 2002 22:05:32 -0700 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [PATCH CVS] log and colors and prettyprint |
I suspect that most of the people do not want to see meaningless
escapes and tex-formatting in the log file, right?
The following patch disables escape sequences and the-line-noise-which-
is-the-input-for-prettyprinter when writing to the log file.
The "proper" solution may be to have two extra flags (or bits of
default(log)) to enable/disable these "features"; but I hope that most
people do not want to go back.
Enjoy,
Ilya
--- ./src/gp/gp.c-pre Tue Oct 15 17:34:02 2002
+++ ./src/gp/gp.c Tue Oct 15 20:26:00 2002
@@ -2219,9 +2219,10 @@ brace_color(char *s, int c, int force)
}
static char *
-do_prompt(int in_comment, char *p)
+do_prompt(int in_comment, char *p, char **bare)
{
static char buf[MAX_PROMPT_LEN + 24]; /* + room for color codes */
+ static char buf1[MAX_PROMPT_LEN];
char *s;
if (GP_DATA->flags & TEST) return prompt;
@@ -2231,8 +2232,12 @@ do_prompt(int in_comment, char *p)
s += strlen(s);
if (in_comment)
strcpy(s, COMMENTPROMPT);
- else
- do_strftime(p,s, MAX_PROMPT_LEN-1);
+ else {
+ do_strftime(p,buf1, MAX_PROMPT_LEN-1);
+ strcpy(s, buf1);
+ }
+ if (bare)
+ *bare = buf1;
s += strlen(s);
brace_color(s, c_INPUT, 1); return buf;
}
@@ -2308,7 +2313,7 @@ input_loop(filtre_t *F, input_method *IM
/* read continuation line */
s = F->end;
- if (IM->prompt) IM->prompt = do_prompt(F->in_comment, prompt_cont);
+ if (IM->prompt) IM->prompt = do_prompt(F->in_comment, prompt_cont, NULL);
to_read = IM->getline(b,&s, IM);
if (!to_read) break;
}
@@ -2441,7 +2446,7 @@ is_interactive(void)
#endif
}
-extern int get_line_from_readline(char *prompt, filtre_t *F);
+extern int get_line_from_readline(char *prompt, char *bare_prompt, filtre_t *F);
/* return 0 if no line could be read (EOF) */
static int
@@ -2451,10 +2456,15 @@ read_line(filtre_t *F, char *PROMPT)
if (compatible == OLDALL) F->downcase = 1;
if (is_interactive())
{
- if (!PROMPT) PROMPT = do_prompt(F->in_comment, prompt);
+ char *bare_prompt;
+
+ if (PROMPT)
+ bare_prompt = PROMPT;
+ else
+ PROMPT = do_prompt(F->in_comment, prompt, &bare_prompt);
#ifdef READLINE
if (GP_DATA->flags & USE_READLINE)
- res = get_line_from_readline(PROMPT, F);
+ res = get_line_from_readline(PROMPT, bare_prompt, F);
else
#endif
res = get_line_from_user(PROMPT, F);
--- ./src/gp/gp_rl.c-pre Tue Oct 15 17:34:02 2002
+++ ./src/gp/gp_rl.c Tue Oct 15 20:26:50 2002
@@ -798,7 +798,7 @@ unblock_SIGINT(void)
* Return 0: EOF
* 1: got one line from readline or infile */
int
-get_line_from_readline(char *prompt, filtre_t *F)
+get_line_from_readline(char *prompt, char *bare_prompt, filtre_t *F)
{
const int index = history_length;
char *s;
@@ -823,7 +823,7 @@ get_line_from_readline(char *prompt, fil
}
/* update logfile */
- if (logfile) fprintf(logfile, "%s%s\n",prompt,s);
+ if (logfile) fprintf(logfile, "%s%s\n",bare_prompt,s);
}
unblock_SIGINT(); /* bug in readline 2.0: need to unblock ^C */
return 1;
--- ./src/language/es.c-pre Tue Oct 15 17:34:04 2002
+++ ./src/language/es.c Tue Oct 15 21:55:20 2002
@@ -318,7 +318,11 @@ pariputsf(char *format, ...)
void
term_color(int c)
{
+ FILE *o_logfile = logfile;
+
+ logfile = 0; /* Ugly hack... */
pariputs(term_get_color(c));
+ logfile = o_logfile;
}
void
@@ -1978,6 +1982,7 @@ tex2mail_output(GEN z, long n)
{
pariout_t T = *(GP_DATA->fmt); /* copy */
FILE *o_out;
+ FILE *o_logfile = logfile;
if (!prettyp_init()) return 0;
o_out = pari_outfile; /* save state */
@@ -1987,11 +1992,13 @@ tex2mail_output(GEN z, long n)
pariflush();
pari_outfile = GP_DATA->pp->file->file;
T.prettyp = f_TEX;
+ logfile = NULL;
/* history number */
if (n)
{
char s[128];
+
if (*term_get_color(c_HIST) || *term_get_color(c_OUTPUT))
{
char col1[80];
@@ -2002,12 +2009,21 @@ tex2mail_output(GEN z, long n)
else
sprintf(s, "\\%%%ld = ", n);
pariputs_opt(s);
+ if (o_logfile)
+ fprintf(o_logfile, "%%%ld = ", n);
}
/* output */
gen_output(z, &T);
+
/* flush and restore */
prettyp_wait();
+ if (o_logfile) {
+ pari_outfile = o_logfile;
+ /* XXXX Maybe it is better to output in another format? */
+ outbrute(z); pariputc('\n'); pariflush();
+ }
+ logfile = o_logfile;
pari_outfile = o_out;
if (n) term_color(c_NONE);
return 1;