Subject: Re: bug#2967: smart quotes in .emacs

From: Eli Zaretskii <[email-masked]>
Date: Wed, 07 Jun 2017 08:09:30 +0300

> From: [email-masked]
> Date: Tue, 06 Jun 2017 23:46:48 -0400
> Cc: [email-masked], Alan Mackenzie <[email-masked]>,
> 	Stefan Monnier <[email-masked]>
> 
> --- i/src/lread.c
> +++ w/src/lread.c
> @@ -3349,6 +3349,15 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
>  	     ? multibyte_chars_in_text ((unsigned char *) read_buffer,
>  					nbytes)
>  	     : nbytes);
> +        if (!quoted && multibyte)
> +          {
> +            switch (STRING_CHAR ((unsigned char *) read_buffer))
> +              {
> +              case 0x2018:      /* LEFT SINGLE QUOTATION MARK */
> +              case 0x2019:      /* RIGHT SINGLE QUOTATION MARK */
> +                invalid_syntax ("strange quote");
> +              }
> +          }
>  	Lisp_Object name = ((uninterned_symbol && ! NILP (Vpurify_flag)
>  			     ? make_pure_string : make_specified_string)
>  			    (read_buffer, nchars, nbytes, multibyte));
> 
> We then get the following error from evaluating (read (format-message "'foo")):
> 
> Debugger entered--Lisp error: (invalid-read-syntax "strange quote")
>   read("’foo")
>   eval((read (format-message "'foo")) nil)

Please include the character itself in the error message text.

Also, are we sure these two are the only ones we want to catch in this
manner?

Finally, if this is accepted, let's have a test for this, and maybe
also some documentation, at least in NEWS.

Thanks.