Re: [patch] config_charset variable (wishlist #1642)
Looks good to me, except for the formatting which doesn't match what
the remaining source code does. Any comments/thoughts?
On 2004-01-17 21:03:52 +0100, Joël Riou wrote:
> From: Joël Riou <joel.riou@xxxxxxxxxxxxxx>
> To: mutt-dev@xxxxxxxx
> Date: Sat, 17 Jan 2004 21:03:52 +0100
> Subject: [patch] config_charset variable (wishlist #1642)
> X-Spam-Level:
>
> Attached is a patch for the wishlist bug #1642. It adds a variable
> config_charset that one may define in a rc file that contains non ascii
> characters (aliases files for instance). Where a rc file is sourced, the
> commands are converted from this encoding, so that it works well if you
> are used to working in UTF8 xterms but sometimes have to use a
> latin-encoded terminal.
>
> --
> Joël Riou
>
> diff -u mutt/globals.h mutt.new/globals.h
> --- mutt/globals.h 2004-01-17 20:12:25.000000000 +0100
> +++ mutt.new/globals.h 2004-01-17 20:13:17.000000000 +0100
> @@ -37,6 +37,7 @@
> WHERE char *AttachFormat;
> WHERE char *Charset;
> WHERE char *ComposeFormat;
> +WHERE char *ConfigCharset;
> WHERE char *ContentType;
> WHERE char *DefaultHook;
> WHERE char *DateFmt;
> diff -u mutt/init.c mutt.new/init.c
> --- mutt/init.c 2004-01-17 20:12:20.000000000 +0100
> +++ mutt.new/init.c 2004-01-17 20:25:35.000000000 +0100
> @@ -1249,9 +1249,10 @@
> static int source_rc (const char *rcfile, BUFFER *err)
> {
> FILE *f;
> - int line = 0, rc = 0;
> + int line = 0, rc = 0, conv = 0;
> BUFFER token;
> char *linebuf = NULL;
> + char *currentline = NULL;
> size_t buflen;
> pid_t pid;
>
> @@ -1264,15 +1265,26 @@
> memset (&token, 0, sizeof (token));
> while ((linebuf = mutt_read_line (linebuf, &buflen, f, &line)) != NULL)
> {
> - if (mutt_parse_rc_line (linebuf, &token, err) == -1)
> + conv=ConfigCharset && (*ConfigCharset) && Charset;
> + if (conv) {
> + currentline=safe_strdup(linebuf);
> + if (!currentline) continue;
> + mutt_convert_string(¤tline, ConfigCharset, Charset, 0);
> + } else currentline=linebuf;
> + if (mutt_parse_rc_line (currentline, &token, err) == -1)
> {
> mutt_error (_("Error in %s, line %d: %s"), rcfile, line, err->data);
> - if (--rc < -MAXERRS)
> + if (--rc < -MAXERRS) {
> + if (conv) FREE(¤tline);
> break;
> + }
> }
> else
> + {
> if (rc < 0)
> rc = -1;
> + }
> + if (conv) FREE(¤tline);
> }
> FREE (&token.data);
> FREE (&linebuf);
> diff -u mutt/init.h mutt.new/init.h
> --- mutt/init.h 2004-01-17 20:12:54.000000000 +0100
> +++ mutt.new/init.h 2004-01-17 20:13:15.000000000 +0100
> @@ -329,6 +329,12 @@
> ** See the text describing the ``$$status_format'' option for more
> ** information on how to set ``$$compose_format''.
> */
> + { "config_charset", DT_STR, R_NONE, UL &ConfigCharset, UL 0 },
> + /*
> + ** .pp
> + ** When defined, Mutt will recode commands in rc files from this
> + ** encoding.
> + */
> { "confirmappend", DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 },
> /*
> ** .pp
--
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.