bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#20707: [PROPOSED PATCH] Use curved quoting in C-generated errors


From: Paul Eggert
Subject: bug#20707: [PROPOSED PATCH] Use curved quoting in C-generated errors
Date: Mon, 1 Jun 2015 00:39:21 -0700

Quote with curved single quotes, ‘like this’, in diagnostics
generated from C code.  This mostly uses C11-style UTF-8 strings,
e.g., u8"quote ‘like this’", with a backward compatibility macro
u8 for pre-C11 compilers.
* src/buffer.c (Fmake_indirect_buffer, Frename_buffer)
(Fset_buffer_multibyte):
* src/callint.c (Fcall_interactively):
* src/category.c (Fmake_category_set, Fdefine_category):
* src/chartab.c (Fchar_table_range, Fset_char_table_range):
* src/coding.c (Ffind_operation_coding_system)
(Fdefine_coding_system_internal):
* src/dispnew.c (add_window_display_history):
* src/editfns.c (Fsubst_char_in_region):
* src/eval.c (FletX, Flet, eval_sub, Ffuncall):
* src/fileio.c (Ffile_name_nondirectory)
(Ffile_name_as_directory, Fdirectory_file_name)
(Fexpand_file_name, Fsubstitute_in_file_name):
* src/fns.c (Frequire):
* src/font.c (Ffont_spec):
* src/fontset.c (check_fontset_name):
* src/frame.c (x_set_font):
* src/image.c (xbm_read_bitmap_data, xbm_load_image, xbm_load)
(xpm_load, xpm_load_image, xpm_load, pbm_load, png_load_body)
(jpeg_load_body, tiff_load, gif_load, imagemagick_load_image)
(imagemagick_load, svg_load, svg_load_image, gs_load)
(x_kill_gs_process):
* src/keymap.c (store_in_keymap, Fdescribe_buffer_bindings):
* src/lread.c (load_warn_old_style_backquotes, Fload):
* src/nsfns.m (Fns_list_colors):
* src/regex.c (PUSH_FAILURE_POINT, POP_FAILURE_POINT)
(re_match_2_internal):
* src/search.c (Freplace_match):
* src/syntax.c (Finternal_describe_syntax_value):
* src/sysdep.c (serial_configure):
* src/w32.c (serial_configure):
* src/window.c (Fset_frame_selected_window, Fset_window_buffer)
(Frecenter):
* src/xfaces.c (load_pixmap):
Reword to avoid quoting with grave accent and apostrophe
in diagnostics.
* src/conf_post.h (u8): New macro, for compatibility with pre-C11.
* src/doc.c (Fsubstitute_command_keys):
Use curved quotes when generating keymap info.
* src/lisp.h (uLSQM, uRSQM): New macros.
---
 src/buffer.c    |   8 ++--
 src/callint.c   |   5 ++-
 src/category.c  |   4 +-
 src/chartab.c   |   4 +-
 src/coding.c    |   6 +--
 src/conf_post.h |   4 ++
 src/dispnew.c   |   2 +-
 src/doc.c       |   4 +-
 src/editfns.c   |   2 +-
 src/eval.c      |   8 ++--
 src/fileio.c    |  14 +++---
 src/fns.c       |   4 +-
 src/font.c      |   2 +-
 src/fontset.c   |   2 +-
 src/frame.c     |   4 +-
 src/image.c     | 130 ++++++++++++++++++++++++++++----------------------------
 src/keymap.c    |   6 +--
 src/lisp.h      |   7 +++
 src/lread.c     |   8 ++--
 src/nsfns.m     |   2 +-
 src/regex.c     |  14 +++---
 src/search.c    |   6 +--
 src/syntax.c    |   2 +-
 src/sysdep.c    |   4 +-
 src/w32.c       |   4 +-
 src/window.c    |   6 +--
 src/xfaces.c    |   2 +-
 27 files changed, 138 insertions(+), 126 deletions(-)

diff --git a/src/buffer.c b/src/buffer.c
index 0b98431..f95a726 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -745,12 +745,12 @@ CLONE nil means the indirect buffer's state is reset to 
default values.  */)
   CHECK_STRING (name);
   buf = Fget_buffer (name);
   if (!NILP (buf))
-    error ("Buffer name `%s' is in use", SDATA (name));
+    error (u8"Buffer name ‘%s’ is in use", SDATA (name));
 
   tem = base_buffer;
   base_buffer = Fget_buffer (base_buffer);
   if (NILP (base_buffer))
-    error ("No such buffer: `%s'", SDATA (tem));
+    error (u8"No such buffer: ‘%s’", SDATA (tem));
   if (!BUFFER_LIVE_P (XBUFFER (base_buffer)))
     error ("Base buffer has been killed");
 
@@ -1429,7 +1429,7 @@ This does not change the name of the visited file (if 
any).  */)
       if (!NILP (unique))
        newname = Fgenerate_new_buffer_name (newname, BVAR (current_buffer, 
name));
       else
-       error ("Buffer name `%s' is in use", SDATA (newname));
+       error (u8"Buffer name ‘%s’ is in use", SDATA (newname));
     }
 
   bset_name (current_buffer, newname);
@@ -2412,7 +2412,7 @@ current buffer is cleared.  */)
   struct gcpro gcpro1;
 
   if (current_buffer->base_buffer)
-    error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
+    error (u8"Cannot do ‘set-buffer-multibyte’ on an indirect buffer");
 
   /* Do nothing if nothing actually changes.  */
   if (NILP (flag) == NILP (BVAR (current_buffer, enable_multibyte_characters)))
diff --git a/src/callint.c b/src/callint.c
index 2ff2f80..d31aade 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -413,7 +413,7 @@ invoke it.  If KEYS is omitted or nil, the return value of
   while (1)
     {
       if (*string == '+')
-       error ("`+' is not used in `interactive' for ordinary commands");
+       error (u8"‘+’ is not used in ‘interactive’ for ordinary commands");
       else if (*string == '*')
        {
          string++;
@@ -785,7 +785,8 @@ invoke it.  If KEYS is omitted or nil, the return value of
             if anyone tries to define one here.  */
        case '+':
        default:
-         error ("Invalid control letter `%c' (#o%03o, #x%04x) in interactive 
calling string",
+         error ((u8"Invalid control letter ‘%c’ (#o%03o, #x%04x)"
+                 u8" in interactive calling string"),
                 STRING_CHAR ((unsigned char *) tem),
                 (unsigned) STRING_CHAR ((unsigned char *) tem),
                 (unsigned) STRING_CHAR ((unsigned char *) tem));
diff --git a/src/category.c b/src/category.c
index ab90f5f..5dadea4 100644
--- a/src/category.c
+++ b/src/category.c
@@ -100,7 +100,7 @@ those categories.  */)
   val = MAKE_CATEGORY_SET;
 
   if (STRING_MULTIBYTE (categories))
-    error ("Multibyte string in `make-category-set'");
+    error (u8"Multibyte string in ‘make-category-set’");
 
   len = SCHARS (categories);
   while (--len >= 0)
@@ -134,7 +134,7 @@ the current buffer's category table.  */)
   table = check_category_table (table);
 
   if (!NILP (CATEGORY_DOCSTRING (table, XFASTINT (category))))
-    error ("Category `%c' is already defined", (int) XFASTINT (category));
+    error (u8"Category ‘%c’ is already defined", (int) XFASTINT (category));
   if (!NILP (Vpurify_flag))
     docstring = Fpurecopy (docstring);
   SET_CATEGORY_DOCSTRING (table, XFASTINT (category), docstring);
diff --git a/src/chartab.c b/src/chartab.c
index acaabce..b0d3d9a 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -622,7 +622,7 @@ a cons of character codes (for characters in the range), or 
a character code.  *
       /* Not yet implemented. */
     }
   else
-    error ("Invalid RANGE argument to `char-table-range'");
+    error (u8"Invalid RANGE argument to ‘char-table-range’");
   return val;
 }
 
@@ -655,7 +655,7 @@ or a character code.  Return VALUE.  */)
                            XINT (XCAR (range)), XINT (XCDR (range)), value);
     }
   else
-    error ("Invalid RANGE argument to `set-char-table-range'");
+    error (u8"Invalid RANGE argument to ‘set-char-table-range’");
 
   return value;
 }
diff --git a/src/coding.c b/src/coding.c
index 9342c38..8f536d4 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -9853,14 +9853,14 @@ usage: (find-operation-coding-system OPERATION 
ARGUMENTS...)  */)
       || (target_idx = Fget (operation, Qtarget_idx), !NATNUMP (target_idx)))
     error ("Invalid first argument");
   if (nargs <= 1 + XFASTINT (target_idx))
-    error ("Too few arguments for operation `%s'",
+    error (u8"Too few arguments for operation ‘%s’",
           SDATA (SYMBOL_NAME (operation)));
   target = args[XFASTINT (target_idx) + 1];
   if (!(STRINGP (target)
        || (EQ (operation, Qinsert_file_contents) && CONSP (target)
            && STRINGP (XCAR (target)) && BUFFERP (XCDR (target)))
        || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
-    error ("Invalid argument %"pI"d of operation `%s'",
+    error ("Invalid argument %"pI"d of operation "uLSQM"%s"uRSQM,
           XFASTINT (target_idx) + 1, SDATA (SYMBOL_NAME (operation)));
   if (CONSP (target))
     target = XCAR (target);
@@ -10094,7 +10094,7 @@ usage: (define-coding-system-internal ...)  */)
              : EQ (coding_type, Qemacs_mule)
              ? CHARSET_EMACS_MULE_ID (charset) < 0
              : 0)
-           error ("Can't handle charset `%s'",
+           error (u8"Can't handle charset ‘%s’",
                   SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 
          XSETCAR (tail, make_number (charset->id));
diff --git a/src/conf_post.h b/src/conf_post.h
index 1a080fa..e9c7863 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -43,6 +43,10 @@ typedef unsigned int bool_bf;
 typedef bool bool_bf;
 #endif
 
+/* On older compilers that do not support C11-style UTF-8 string literals,
+   treat the u8 encoding prefix as a no-op.  */
+#define u8
+
 #ifndef WINDOWSNT
 /* On AIX 3 this must be included before any other include file.  */
 #include <alloca.h>
diff --git a/src/dispnew.c b/src/dispnew.c
index 1fc3cfe..ede7adf 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -177,7 +177,7 @@ add_window_display_history (struct window *w, const char 
*msg, bool paused_p)
   ++history_idx;
 
   snprintf (buf, sizeof redisplay_history[0].trace,
-           "%"pMu": window %p (`%s')%s\n%s",
+           "%"pMu": window %p ("uLSQM"%s"uRSQM")%s\n%s",
            history_tick++,
            ptr,
            ((BUFFERP (w->contents)
diff --git a/src/doc.c b/src/doc.c
index f1ba643..aa87282 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -891,11 +891,11 @@ Otherwise, return a new string.  */)
          if (NILP (tem))
            {
              name = Fsymbol_name (name);
-             insert_string ("\nUses keymap `");
+             insert_string (u8"\nUses keymap ‘");
              insert_from_string (name, 0, 0,
                                  SCHARS (name),
                                  SBYTES (name), 1);
-             insert_string ("', which is not currently defined.\n");
+             insert_string (u8"’, which is not currently defined.\n");
              if (start[-1] == '<') keymap = Qnil;
            }
          else if (start[-1] == '<')
diff --git a/src/editfns.c b/src/editfns.c
index c387dc7..8dc2a47 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2994,7 +2994,7 @@ Both characters must have the same length of multi-byte 
form.  */)
     {
       len = CHAR_STRING (fromc, fromstr);
       if (CHAR_STRING (toc, tostr) != len)
-       error ("Characters in `subst-char-in-region' have different 
byte-lengths");
+       error (u8"Characters in ‘subst-char-in-region’ have different 
byte-lengths");
       if (!ASCII_CHAR_P (*tostr))
        {
          /* If *TOSTR is in the range 0x80..0x9F and TOCHAR is not a
diff --git a/src/eval.c b/src/eval.c
index 4655095..92b5653 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -864,7 +864,7 @@ usage: (let* VARLIST BODY...)  */)
          val = Qnil;
        }
       else if (! NILP (Fcdr (Fcdr (elt))))
-       signal_error ("`let' bindings can have only one value-form", elt);
+       signal_error (u8"‘let’ bindings can have only one value-form", elt);
       else
        {
          var = Fcar (elt);
@@ -931,7 +931,7 @@ usage: (let VARLIST BODY...)  */)
       if (SYMBOLP (elt))
        temps [argnum++] = Qnil;
       else if (! NILP (Fcdr (Fcdr (elt))))
-       signal_error ("`let' bindings can have only one value-form", elt);
+       signal_error (u8"‘let’ bindings can have only one value-form", elt);
       else
        temps [argnum++] = eval_sub (Fcar (Fcdr (elt)));
       gcpro2.nvars = argnum;
@@ -2087,7 +2087,7 @@ eval_sub (Lisp_Object form)
       if (max_lisp_eval_depth < 100)
        max_lisp_eval_depth = 100;
       if (lisp_eval_depth > max_lisp_eval_depth)
-       error ("Lisp nesting exceeds `max-lisp-eval-depth'");
+       error (u8"Lisp nesting exceeds ‘max-lisp-eval-depth’");
     }
 
   original_fun = XCAR (form);
@@ -2658,7 +2658,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
       if (max_lisp_eval_depth < 100)
        max_lisp_eval_depth = 100;
       if (lisp_eval_depth > max_lisp_eval_depth)
-       error ("Lisp nesting exceeds `max-lisp-eval-depth'");
+       error (u8"Lisp nesting exceeds ‘max-lisp-eval-depth’");
     }
 
   /* This also GCPROs them.  */
diff --git a/src/fileio.c b/src/fileio.c
index aad0270..13ee4c0 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -410,7 +410,7 @@ or the entire name if it contains no slash.  */)
                                        filename);
       if (STRINGP (handled_name))
        return handled_name;
-      error ("Invalid handler in `file-name-handler-alist'");
+      error (u8"Invalid handler in ‘file-name-handler-alist’");
     }
 
   beg = SSDATA (filename);
@@ -514,7 +514,7 @@ For a Unix-syntax file name, just appends a slash.  */)
                                        file);
       if (STRINGP (handled_name))
        return handled_name;
-      error ("Invalid handler in `file-name-handler-alist'");
+      error (u8"Invalid handler in ‘file-name-handler-alist’");
     }
 
 #ifdef WINDOWSNT
@@ -580,7 +580,7 @@ In Unix-syntax, this function just removes the final slash. 
 */)
                                        directory);
       if (STRINGP (handled_name))
        return handled_name;
-      error ("Invalid handler in `file-name-handler-alist'");
+      error (u8"Invalid handler in ‘file-name-handler-alist’");
     }
 
 #ifdef WINDOWSNT
@@ -798,7 +798,7 @@ filesystem tree, not (expand-file-name ".."  dirname).  */)
                            name, default_directory);
       if (STRINGP (handled_name))
        return handled_name;
-      error ("Invalid handler in `file-name-handler-alist'");
+      error (u8"Invalid handler in ‘file-name-handler-alist’");
     }
 
 
@@ -831,7 +831,7 @@ filesystem tree, not (expand-file-name ".."  dirname).  */)
                                name, default_directory);
          if (STRINGP (handled_name))
            return handled_name;
-         error ("Invalid handler in `file-name-handler-alist'");
+         error (u8"Invalid handler in ‘file-name-handler-alist’");
        }
     }
 
@@ -1424,7 +1424,7 @@ filesystem tree, not (expand-file-name ".."  dirname).  
*/)
       handled_name = call3 (handler, Qexpand_file_name,
                            result, default_directory);
       if (! STRINGP (handled_name))
-       error ("Invalid handler in `file-name-handler-alist'");
+       error (u8"Invalid handler in ‘file-name-handler-alist’");
       result = handled_name;
     }
 
@@ -1680,7 +1680,7 @@ those `/' is discarded.  */)
                                        filename);
       if (STRINGP (handled_name))
        return handled_name;
-      error ("Invalid handler in `file-name-handler-alist'");
+      error (u8"Invalid handler in ‘file-name-handler-alist’");
     }
 
   /* Always work on a copy of the string, in case GC happens during
diff --git a/src/fns.c b/src/fns.c
index 235a4f6..642df5c 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -2878,7 +2878,7 @@ The normal messages at start and end of loading FILENAME 
are suppressed.  */)
          tem = XCDR (tem);
        }
       if (nesting > 3)
-       error ("Recursive `require' for feature `%s'",
+       error (u8"Recursive ‘require’ for feature ‘%s’",
               SDATA (SYMBOL_NAME (feature)));
 
       /* Update the list for any nested `require's that occur.  */
@@ -2901,7 +2901,7 @@ The normal messages at start and end of loading FILENAME 
are suppressed.  */)
 
       tem = Fmemq (feature, Vfeatures);
       if (NILP (tem))
-       error ("Required feature `%s' was not provided",
+       error (u8"Required feature ‘%s’ was not provided",
               SDATA (SYMBOL_NAME (feature)));
 
       /* Once loading finishes, don't undo it.  */
diff --git a/src/font.c b/src/font.c
index 1405d43..4fb5d52 100644
--- a/src/font.c
+++ b/src/font.c
@@ -3885,7 +3885,7 @@ usage: (font-spec ARGS...)  */)
 
       CHECK_SYMBOL (key);
       if (i + 1 >= nargs)
-       error ("No value for key `%s'", SDATA (SYMBOL_NAME (key)));
+       error (u8"No value for key ‘%s’", SDATA (SYMBOL_NAME (key)));
       val = args[i + 1];
 
       if (EQ (key, QCname))
diff --git a/src/fontset.c b/src/fontset.c
index e957c38..848bc7a 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1303,7 +1303,7 @@ check_fontset_name (Lisp_Object name, Lisp_Object *frame)
        /* For backward compatibility, try again NAME as pattern.  */
        id = fs_query_fontset (name, 0);
       if (id < 0)
-       error ("Fontset `%s' does not exist", SDATA (name));
+       error (u8"Fontset ‘%s’ does not exist", SDATA (name));
     }
   return FONTSET_FROM_ID (id);
 }
diff --git a/src/frame.c b/src/frame.c
index e3ad82f..368775e 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -3562,14 +3562,14 @@ x_set_font (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
        {
          font_object = font_open_by_name (f, arg);
          if (NILP (font_object))
-           error ("Font `%s' is not defined", SSDATA (arg));
+           error (u8"Font ‘%s’ is not defined", SSDATA (arg));
          arg = AREF (font_object, FONT_NAME_INDEX);
        }
       else if (fontset > 0)
        {
          font_object = font_open_by_name (f, fontset_ascii (fontset));
          if (NILP (font_object))
-           error ("Font `%s' is not defined", SDATA (arg));
+           error (u8"Font ‘%s’ is not defined", SDATA (arg));
          arg = AREF (font_object, FONT_NAME_INDEX);
        }
       else
diff --git a/src/image.c b/src/image.c
index dfa8941..a33448c 100644
--- a/src/image.c
+++ b/src/image.c
@@ -2791,7 +2791,7 @@ xbm_read_bitmap_data (struct frame *f, unsigned char 
*contents, unsigned char *e
   if (!check_image_size (f, *width, *height))
     {
       if (!inhibit_image_error)
-       image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+       image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto failure;
     }
   else if (data == NULL)
@@ -2936,13 +2936,13 @@ xbm_load_image (struct frame *f, struct image *img, 
unsigned char *contents,
       if (img->pixmap == NO_PIXMAP)
        {
          x_clear_image (f, img);
-         image_error ("Unable to create X pixmap for `%s'", img->spec, Qnil);
+         image_error (u8"Unable to create X pixmap for ‘%s’", img->spec, Qnil);
        }
       else
        success_p = 1;
     }
   else
-    image_error ("Error loading XBM image `%s'", img->spec, Qnil);
+    image_error (u8"Error loading XBM image ‘%s’", img->spec, Qnil);
 
   return success_p;
 }
@@ -2983,14 +2983,14 @@ xbm_load (struct frame *f, struct image *img)
       file = x_find_image_file (file_name);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", file_name, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", file_name, Qnil);
          return 0;
        }
 
       contents = slurp_file (SSDATA (file), &size);
       if (contents == NULL)
        {
-         image_error ("Error loading XBM image `%s'", img->spec, Qnil);
+         image_error (u8"Error loading XBM image ‘%s’", img->spec, Qnil);
          return 0;
        }
 
@@ -3025,7 +3025,7 @@ xbm_load (struct frame *f, struct image *img)
          eassert (img->width > 0 && img->height > 0);
          if (!check_image_size (f, img->width, img->height))
            {
-             image_error ("Invalid image size (see `max-image-size')",
+             image_error (u8"Invalid image size (see ‘max-image-size’)",
                           Qnil, Qnil);
              return 0;
            }
@@ -3103,7 +3103,7 @@ xbm_load (struct frame *f, struct image *img)
            success_p = 1;
          else
            {
-             image_error ("Unable to create pixmap for XBM image `%s'",
+             image_error (u8"Unable to create pixmap for XBM image ‘%s’",
                           img->spec, Qnil);
              x_clear_image (f, img);
            }
@@ -3626,7 +3626,7 @@ xpm_load (struct frame *f, struct image *img)
       Lisp_Object file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
 #ifdef ALLOC_XPM_COLORS
          xpm_free_color_cache ();
 #endif
@@ -3657,7 +3657,7 @@ xpm_load (struct frame *f, struct image *img)
       Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (buffer))
        {
-         image_error ("Invalid image data `%s'", buffer, Qnil);
+         image_error (u8"Invalid image data ‘%s’", buffer, Qnil);
 #ifdef ALLOC_XPM_COLORS
          xpm_free_color_cache ();
 #endif
@@ -4101,7 +4101,7 @@ xpm_load_image (struct frame *f,
 
   if (!check_image_size (f, width, height))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto failure;
     }
 
@@ -4291,14 +4291,14 @@ xpm_load (struct frame *f,
       file = x_find_image_file (file_name);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", file_name, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", file_name, Qnil);
          return 0;
        }
 
       contents = slurp_file (SSDATA (file), &size);
       if (contents == NULL)
        {
-         image_error ("Error loading XPM image `%s'", img->spec, Qnil);
+         image_error (u8"Error loading XPM image ‘%s’", img->spec, Qnil);
          return 0;
        }
 
@@ -4312,7 +4312,7 @@ xpm_load (struct frame *f,
       data = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (data))
        {
-         image_error ("Invalid image data `%s'", data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", data, Qnil);
          return 0;
        }
       success_p = xpm_load_image (f, img, SDATA (data),
@@ -5266,14 +5266,14 @@ pbm_load (struct frame *f, struct image *img)
       file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
          return 0;
        }
 
       contents = slurp_file (SSDATA (file), &size);
       if (contents == NULL)
        {
-         image_error ("Error reading `%s'", file, Qnil);
+         image_error (u8"Error reading ‘%s’", file, Qnil);
          return 0;
        }
 
@@ -5286,7 +5286,7 @@ pbm_load (struct frame *f, struct image *img)
       data = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (data))
        {
-         image_error ("Invalid image data `%s'", data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", data, Qnil);
          return 0;
        }
       p = SDATA (data);
@@ -5296,7 +5296,7 @@ pbm_load (struct frame *f, struct image *img)
   /* Check magic number.  */
   if (end - p < 2 || *p++ != 'P')
     {
-      image_error ("Not a PBM image: `%s'", img->spec, Qnil);
+      image_error (u8"Not a PBM image: ‘%s’", img->spec, Qnil);
     error:
       xfree (contents);
       img->pixmap = NO_PIXMAP;
@@ -5330,7 +5330,7 @@ pbm_load (struct frame *f, struct image *img)
       break;
 
     default:
-      image_error ("Not a PBM image: `%s'", img->spec, Qnil);
+      image_error (u8"Not a PBM image: ‘%s’", img->spec, Qnil);
       goto error;
     }
 
@@ -5356,7 +5356,7 @@ pbm_load (struct frame *f, struct image *img)
 
   if (!check_image_size (f, width, height))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto error;
     }
 
@@ -5429,7 +5429,7 @@ pbm_load (struct frame *f, struct image *img)
                        x_destroy_x_image (ximg);
 #endif
                        x_clear_image (f, img);
-                       image_error ("Invalid image size in image `%s'",
+                       image_error (u8"Invalid image size in image ‘%s’",
                                     img->spec, Qnil);
                        goto error;
                      }
@@ -5464,7 +5464,7 @@ pbm_load (struct frame *f, struct image *img)
          x_destroy_x_image (ximg);
 #endif
          x_clear_image (f, img);
-         image_error ("Invalid image size in image `%s'",
+         image_error (u8"Invalid image size in image ‘%s’",
                       img->spec, Qnil);
          goto error;
        }
@@ -5508,7 +5508,7 @@ pbm_load (struct frame *f, struct image *img)
 #else
                x_destroy_x_image (ximg);
 #endif
-               image_error ("Invalid pixel value in image `%s'",
+               image_error (u8"Invalid pixel value in image ‘%s’",
                             img->spec, Qnil);
                goto error;
              }
@@ -5904,7 +5904,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
       file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
          return 0;
        }
 
@@ -5912,7 +5912,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
       fp = emacs_fopen (SSDATA (file), "rb");
       if (!fp)
        {
-         image_error ("Cannot open image file `%s'", file, Qnil);
+         image_error (u8"Cannot open image file ‘%s’", file, Qnil);
          return 0;
        }
 
@@ -5921,7 +5921,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
          || png_sig_cmp (sig, 0, sizeof sig))
        {
          fclose (fp);
-         image_error ("Not a PNG file: `%s'", file, Qnil);
+         image_error (u8"Not a PNG file: ‘%s’", file, Qnil);
          return 0;
        }
     }
@@ -5929,7 +5929,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
     {
       if (!STRINGP (specified_data))
        {
-         image_error ("Invalid image data `%s'", specified_data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", specified_data, Qnil);
          return 0;
        }
 
@@ -5942,7 +5942,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
       if (tbr.len < sizeof sig
          || png_sig_cmp (tbr.bytes, 0, sizeof sig))
        {
-         image_error ("Not a PNG image: `%s'", img->spec, Qnil);
+         image_error (u8"Not a PNG image: ‘%s’", img->spec, Qnil);
          return 0;
        }
 
@@ -6010,7 +6010,7 @@ png_load_body (struct frame *f, struct image *img, struct 
png_load_context *c)
   if (! (width <= INT_MAX && height <= INT_MAX
         && check_image_size (f, width, height)))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto error;
     }
 
@@ -6668,20 +6668,20 @@ jpeg_load_body (struct frame *f, struct image *img,
       file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
          return 0;
        }
 
       fp = emacs_fopen (SSDATA (file), "rb");
       if (fp == NULL)
        {
-         image_error ("Cannot open `%s'", file, Qnil);
+         image_error (u8"Cannot open ‘%s’", file, Qnil);
          return 0;
        }
     }
   else if (!STRINGP (specified_data))
     {
-      image_error ("Invalid image data `%s'", specified_data, Qnil);
+      image_error (u8"Invalid image data ‘%s’", specified_data, Qnil);
       return 0;
     }
 
@@ -6697,13 +6697,13 @@ jpeg_load_body (struct frame *f, struct image *img,
          {
            char buf[JMSG_LENGTH_MAX];
            mgr->cinfo.err->format_message ((j_common_ptr) &mgr->cinfo, buf);
-           image_error ("Error reading JPEG image `%s': %s", img->spec,
+           image_error (u8"Error reading JPEG image ‘%s’: %s", img->spec,
                         build_string (buf));
            break;
          }
 
        case MY_JPEG_INVALID_IMAGE_SIZE:
-         image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+         image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, 
Qnil);
          break;
 
        case MY_JPEG_CANNOT_CREATE_X:
@@ -7183,7 +7183,7 @@ tiff_load (struct frame *f, struct image *img)
       file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
          return 0;
        }
 # ifdef WINDOWSNT
@@ -7194,7 +7194,7 @@ tiff_load (struct frame *f, struct image *img)
       tiff = TIFFOpen (SSDATA (file), "r");
       if (tiff == NULL)
        {
-         image_error ("Cannot open `%s'", file, Qnil);
+         image_error (u8"Cannot open ‘%s’", file, Qnil);
          return 0;
        }
     }
@@ -7202,7 +7202,7 @@ tiff_load (struct frame *f, struct image *img)
     {
       if (!STRINGP (specified_data))
        {
-         image_error ("Invalid image data `%s'", specified_data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", specified_data, Qnil);
          return 0;
        }
 
@@ -7222,7 +7222,7 @@ tiff_load (struct frame *f, struct image *img)
 
       if (!tiff)
        {
-         image_error ("Cannot open memory source for `%s'", img->spec, Qnil);
+         image_error (u8"Cannot open memory source for ‘%s’", img->spec, Qnil);
          return 0;
        }
     }
@@ -7234,7 +7234,7 @@ tiff_load (struct frame *f, struct image *img)
       if (! (TYPE_MINIMUM (tdir_t) <= ino && ino <= TYPE_MAXIMUM (tdir_t)
             && TIFFSetDirectory (tiff, ino)))
        {
-         image_error ("Invalid image number `%s' in image `%s'",
+         image_error (u8"Invalid image number ‘%s’ in image ‘%s’",
                       image, img->spec);
          TIFFClose (tiff);
          return 0;
@@ -7248,7 +7248,7 @@ tiff_load (struct frame *f, struct image *img)
 
   if (!check_image_size (f, width, height))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       TIFFClose (tiff);
       return 0;
     }
@@ -7278,7 +7278,7 @@ tiff_load (struct frame *f, struct image *img)
   TIFFClose (tiff);
   if (!rc)
     {
-      image_error ("Error reading TIFF image `%s'", img->spec, Qnil);
+      image_error (u8"Error reading TIFF image ‘%s’", img->spec, Qnil);
       xfree (buf);
       return 0;
     }
@@ -7615,7 +7615,7 @@ gif_load (struct frame *f, struct image *img)
       file = x_find_image_file (specified_file);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", specified_file, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", specified_file, Qnil);
          return 0;
        }
 #ifdef WINDOWSNT
@@ -7627,14 +7627,14 @@ gif_load (struct frame *f, struct image *img)
       gif = DGifOpenFileName (SSDATA (file));
       if (gif == NULL)
        {
-         image_error ("Cannot open `%s'", file, Qnil);
+         image_error (u8"Cannot open ‘%s’", file, Qnil);
          return 0;
        }
 #else
       gif = DGifOpenFileName (SSDATA (file), &gif_err);
       if (gif == NULL)
        {
-         image_error ("Cannot open `%s': %s",
+         image_error (u8"Cannot open ‘%s’: %s",
                       file, build_string (GifErrorString (gif_err)));
          return 0;
        }
@@ -7644,7 +7644,7 @@ gif_load (struct frame *f, struct image *img)
     {
       if (!STRINGP (specified_data))
        {
-         image_error ("Invalid image data `%s'", specified_data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", specified_data, Qnil);
          return 0;
        }
 
@@ -7658,14 +7658,14 @@ gif_load (struct frame *f, struct image *img)
       gif = DGifOpen (&memsrc, gif_read_from_memory);
       if (!gif)
        {
-         image_error ("Cannot open memory source `%s'", img->spec, Qnil);
+         image_error (u8"Cannot open memory source ‘%s’", img->spec, Qnil);
          return 0;
        }
 #else
       gif = DGifOpen (&memsrc, gif_read_from_memory, &gif_err);
       if (!gif)
        {
-         image_error ("Cannot open memory source `%s': %s",
+         image_error (u8"Cannot open memory source ‘%s’: %s",
                       img->spec, build_string (GifErrorString (gif_err)));
          return 0;
        }
@@ -7675,7 +7675,7 @@ gif_load (struct frame *f, struct image *img)
   /* Before reading entire contents, check the declared image size. */
   if (!check_image_size (f, gif->SWidth, gif->SHeight))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       gif_close (gif, NULL);
       return 0;
     }
@@ -7684,7 +7684,7 @@ gif_load (struct frame *f, struct image *img)
   rc = DGifSlurp (gif);
   if (rc == GIF_ERROR || gif->ImageCount <= 0)
     {
-      image_error ("Error reading `%s'", img->spec, Qnil);
+      image_error (u8"Error reading ‘%s’", img->spec, Qnil);
       gif_close (gif, NULL);
       return 0;
     }
@@ -7695,7 +7695,7 @@ gif_load (struct frame *f, struct image *img)
     idx = INTEGERP (image_number) ? XFASTINT (image_number) : 0;
     if (idx < 0 || idx >= gif->ImageCount)
       {
-       image_error ("Invalid image number `%s' in image `%s'",
+       image_error (u8"Invalid image number ‘%s’ in image ‘%s’",
                     image_number, img->spec);
        gif_close (gif, NULL);
        return 0;
@@ -7714,7 +7714,7 @@ gif_load (struct frame *f, struct image *img)
 
   if (!check_image_size (f, width, height))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       gif_close (gif, NULL);
       return 0;
     }
@@ -7968,10 +7968,10 @@ gif_load (struct frame *f, struct image *img)
       char *error_text = GifErrorString (gif_err);
 
       if (error_text)
-       image_error ("Error closing `%s': %s",
+       image_error (u8"Error closing ‘%s’: %s",
                     img->spec, build_string (error_text));
 #else
-      image_error ("Error closing `%s'", img->spec, Qnil);
+      image_error (u8"Error closing ‘%s’", img->spec, Qnil);
 #endif
     }
 
@@ -8516,7 +8516,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
 
   if (ino < 0 || ino >= MagickGetNumberImages (image_wand))
     {
-      image_error ("Invalid image number `%s' in image `%s'",
+      image_error (u8"Invalid image number ‘%s’ in image ‘%s’",
                   image, img->spec);
       DestroyMagickWand (image_wand);
       return 0;
@@ -8651,7 +8651,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
   if (! (image_width <= INT_MAX && image_height <= INT_MAX
         && check_image_size (f, image_width, image_height)))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto imagemagick_error;
     }
 
@@ -8787,7 +8787,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
 
   MagickWandTerminus ();
   /* TODO more cleanup.  */
-  image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
+  image_error (u8"Error parsing IMAGEMAGICK image ‘%s’", img->spec, Qnil);
   return 0;
 }
 
@@ -8811,7 +8811,7 @@ imagemagick_load (struct frame *f, struct image *img)
       file = x_find_image_file (file_name);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", file_name, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", file_name, Qnil);
          return 0;
        }
 #ifdef WINDOWSNT
@@ -8828,7 +8828,7 @@ imagemagick_load (struct frame *f, struct image *img)
       data = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (data))
        {
-         image_error ("Invalid image data `%s'", data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", data, Qnil);
          return 0;
        }
       success_p = imagemagick_load_image (f, img, SDATA (data),
@@ -9092,7 +9092,7 @@ svg_load (struct frame *f, struct image *img)
       file = x_find_image_file (file_name);
       if (!STRINGP (file))
        {
-         image_error ("Cannot find image file `%s'", file_name, Qnil);
+         image_error (u8"Cannot find image file ‘%s’", file_name, Qnil);
          return 0;
        }
 
@@ -9100,7 +9100,7 @@ svg_load (struct frame *f, struct image *img)
       contents = slurp_file (SSDATA (file), &size);
       if (contents == NULL)
        {
-         image_error ("Error loading SVG image `%s'", img->spec, Qnil);
+         image_error (u8"Error loading SVG image ‘%s’", img->spec, Qnil);
          return 0;
        }
       /* If the file was slurped into memory properly, parse it.  */
@@ -9116,7 +9116,7 @@ svg_load (struct frame *f, struct image *img)
       data = image_spec_value (img->spec, QCdata, NULL);
       if (!STRINGP (data))
        {
-         image_error ("Invalid image data `%s'", data, Qnil);
+         image_error (u8"Invalid image data ‘%s’", data, Qnil);
          return 0;
        }
       original_filename = BVAR (current_buffer, filename);
@@ -9183,7 +9183,7 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
   rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
   if (! check_image_size (f, dimension_data.width, dimension_data.height))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       goto rsvg_error;
     }
 
@@ -9315,7 +9315,7 @@ svg_load_image (struct frame *f,         /* Pointer to 
emacs frame structure.  *
   g_object_unref (rsvg_handle);
   /* FIXME: Use error->message so the user knows what is the actual
      problem with the image.  */
-  image_error ("Error parsing SVG image `%s'", img->spec, Qnil);
+  image_error (u8"Error parsing SVG image ‘%s’", img->spec, Qnil);
   g_error_free (err);
   return 0;
 }
@@ -9468,7 +9468,7 @@ gs_load (struct frame *f, struct image *img)
   if (! (in_width <= INT_MAX && in_height <= INT_MAX
         && check_image_size (f, in_width, in_height)))
     {
-      image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil);
+      image_error (u8"Invalid image size (see ‘max-image-size’)", Qnil, Qnil);
       return 0;
     }
   img->width = in_width;
@@ -9489,7 +9489,7 @@ gs_load (struct frame *f, struct image *img)
 
   if (!img->pixmap)
     {
-      image_error ("Unable to create pixmap for `%s'", img->spec, Qnil);
+      image_error (u8"Unable to create pixmap for ‘%s’", img->spec, Qnil);
       return 0;
     }
 
@@ -9601,7 +9601,7 @@ x_kill_gs_process (Pixmap pixmap, struct frame *f)
 #endif
        }
       else
-       image_error ("Cannot get X image of `%s'; colors will not be freed",
+       image_error (u8"Cannot get X image of ‘%s’; colors will not be freed",
                     img->spec, Qnil);
 
       unblock_input ();
diff --git a/src/keymap.c b/src/keymap.c
index 8f4ac0d..6e370a4 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -770,7 +770,7 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object 
idx, Lisp_Object def)
   where_is_cache_keymaps = Qt;
 
   if (EQ (idx, Qkeymap))
-    error ("`keymap' is reserved for embedded parent maps");
+    error (u8"‘keymap’ is reserved for embedded parent maps");
 
   /* If we are preparing to dump, and DEF is a menu element
      with a menu item indicator, copy it to ensure it is not pure.  */
@@ -2858,7 +2858,7 @@ You type        Translation\n\
       if (!NILP (start1))
        {
          describe_map_tree (start1, 1, shadow, prefix,
-                            "\f\n`keymap' Property Bindings", nomenu,
+                            u8"\f\n‘keymap’ Property Bindings", nomenu,
                             0, 0, 0);
          shadow = Fcons (start1, shadow);
        }
@@ -2903,7 +2903,7 @@ You type        Translation\n\
                               "\f\nMajor Mode Bindings", nomenu, 0, 0, 0);
          else
            describe_map_tree (start1, 1, shadow, prefix,
-                              "\f\n`local-map' Property Bindings",
+                              u8"\f\n‘local-map’ Property Bindings",
                               nomenu, 0, 0, 0);
 
          shadow = Fcons (start1, shadow);
diff --git a/src/lisp.h b/src/lisp.h
index 198f116..82d5f8f 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -156,6 +156,13 @@ typedef EMACS_UINT uprintmax_t;
 # define pMu pI"u"
 #endif
 
+/* UTF-8 sequences for U+2018 LEFT SINGLE QUOTATION MARK and U+2019
+   RIGHT SINGLE QUOTATION MARK.  These may be useful in string
+   literals that use pI and similar macros, since these literals
+   cannot also portably use the u8 encoding prefix.  */
+#define uLSQM "\xE2\x80\x98"
+#define uRSQM "\xE2\x80\x99"
+
 /* Use pD to format ptrdiff_t values, which suffice for indexes into
    buffers and strings.  Emacs never allocates objects larger than
    PTRDIFF_MAX bytes, as they cause problems with pointer subtraction.
diff --git a/src/lread.c b/src/lread.c
index 11c8d00..5402494 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -947,7 +947,7 @@ load_warn_old_style_backquotes (Lisp_Object file)
 {
   if (!NILP (Vold_style_backquotes))
     {
-      AUTO_STRING (format, "Loading `%s': old-style backquotes detected!");
+      AUTO_STRING (format, u8"Loading ‘%s’: old-style backquotes detected!");
       CALLN (Fmessage, format, file);
     }
 }
@@ -1211,9 +1211,9 @@ Return t if the file exists and loads successfully.  */)
            {
              safe_p = 0;
              if (!load_dangerous_libraries)
-               error ("File `%s' was not compiled in Emacs", SDATA (found));
+               error (u8"File ‘%s’ was not compiled in Emacs", SDATA (found));
              else if (!NILP (nomessage) && !force_load_messages)
-               message_with_string ("File `%s' not compiled in Emacs", found, 
1);
+               message_with_string (u8"File ‘%s’ not compiled in Emacs", 
found, 1);
            }
 
          compiled = 1;
@@ -1245,7 +1245,7 @@ Return t if the file exists and loads successfully.  */)
                     {
                       Lisp_Object msg_file;
                       msg_file = Fsubstring (found, make_number (0), 
make_number (-1));
-                      message_with_string ("Source file `%s' newer than 
byte-compiled file",
+                      message_with_string (u8"Source file ‘%s’ newer than 
byte-compiled file",
                                            msg_file, 1);
                     }
                 }
diff --git a/src/nsfns.m b/src/nsfns.m
index 6a2e2ff..264e53b 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1948,7 +1948,7 @@ The optional argument FRAME is currently ignored.  */)
     {
       CHECK_FRAME (frame);
       if (! FRAME_NS_P (XFRAME (frame)))
-        error ("non-Nextstep frame used in `ns-list-colors'");
+        error (u8"non-Nextstep frame used in ‘ns-list-colors’");
     }
 
   block_input ();
diff --git a/src/regex.c b/src/regex.c
index 38c5e35..dcf2864 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -1544,9 +1544,9 @@ do {                                                      
                \
   DEBUG_PRINT ("  Push frame index: %zd\n", fail_stack.frame);         \
   PUSH_FAILURE_INT (fail_stack.frame);                                 \
                                                                        \
-  DEBUG_PRINT ("  Push string %p: `", string_place);                   \
+  DEBUG_PRINT ("  Push string %p: \"", string_place);                  \
   DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, size2);\
-  DEBUG_PRINT ("'\n");                                                 \
+  DEBUG_PRINT ("\"\n");                                                        
\
   PUSH_FAILURE_POINTER (string_place);                                 \
                                                                        \
   DEBUG_PRINT ("  Push pattern %p: ", pattern);                                
\
@@ -1598,9 +1598,9 @@ do {                                                      
                \
      on_failure_keep_string_jump opcode, and we want to throw away the \
      saved NULL, thus retaining our current position in the string.  */        
\
   str = POP_FAILURE_POINTER ();                                                
\
-  DEBUG_PRINT ("  Popping string %p: `", str);                         \
+  DEBUG_PRINT ("  Popping string %p: \"", str);                                
\
   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);     \
-  DEBUG_PRINT ("'\n");                                                 \
+  DEBUG_PRINT ("\"\n");                                                        
\
                                                                        \
   fail_stack.frame = POP_FAILURE_INT ();                               \
   DEBUG_PRINT ("  Popping  frame index: %zd\n", fail_stack.frame);     \
@@ -5127,9 +5127,9 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 
   DEBUG_PRINT ("The compiled pattern is: ");
   DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
-  DEBUG_PRINT ("The string to match is: `");
+  DEBUG_PRINT ("The string to match is: \"");
   DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
-  DEBUG_PRINT ("'\n");
+  DEBUG_PRINT ("\"\n");
 
   /* This loops over pattern commands.  It exits by returning from the
      function if the match is complete, or it drops through if the match
@@ -5435,7 +5435,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
                    && buf_ch == '\000'))
              goto fail;
 
-           DEBUG_PRINT ("  Matched `%d'.\n", *d);
+           DEBUG_PRINT ("  Matched \"%d\".\n", *d);
            d += buf_charlen;
          }
          break;
diff --git a/src/search.c b/src/search.c
index 5da99c4..5a6549e 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2346,7 +2346,7 @@ since only regular expressions have distinguished 
subexpressions.  */)
                                /* but some C compilers blew it */
 
   if (search_regs.num_regs <= 0)
-    error ("`replace-match' called before any match found");
+    error (u8"‘replace-match’ called before any match found");
 
   if (NILP (subexp))
     sub = 0;
@@ -2510,7 +2510,7 @@ since only regular expressions have distinguished 
subexpressions.  */)
                  else if (c == '\\')
                    delbackslash = 1;
                  else if (c != '?')
-                   error ("Invalid use of `\\' in replacement text");
+                   error (u8"Invalid use of ‘\\’ in replacement text");
                }
              if (substart >= 0)
                {
@@ -2642,7 +2642,7 @@ since only regular expressions have distinguished 
subexpressions.  */)
              else
                {
                  xfree (substed);
-                 error ("Invalid use of `\\' in replacement text");
+                 error (u8"Invalid use of ‘\\’ in replacement text");
                }
            }
          else
diff --git a/src/syntax.c b/src/syntax.c
index 1695815..02c4137 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1333,7 +1333,7 @@ DEFUN ("internal-describe-syntax-value", 
Finternal_describe_syntax_value,
     insert_string (" (nestable)");
 
   if (prefix)
-    insert_string (",\n\t  is a prefix character for `backward-prefix-chars'");
+    insert_string (u8",\n\t  is a prefix character for 
‘backward-prefix-chars’");
 
   return syntax;
 }
diff --git a/src/sysdep.c b/src/sysdep.c
index 0a0b0ac..58dc40a 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2592,7 +2592,7 @@ serial_configure (struct Lisp_Process *p,
   else
     tem = Fplist_get (p->childp, QCparity);
   if (!NILP (tem) && !EQ (tem, Qeven) && !EQ (tem, Qodd))
-    error (":parity must be nil (no parity), `even', or `odd'");
+    error (u8":parity must be nil (no parity), ‘even’, or ‘odd’");
 #if defined (PARENB) && defined (PARODD) && defined (IGNPAR) && defined (INPCK)
   attr.c_cflag &= ~(PARENB | PARODD);
   attr.c_iflag &= ~(IGNPAR | INPCK);
@@ -2647,7 +2647,7 @@ serial_configure (struct Lisp_Process *p,
   else
     tem = Fplist_get (p->childp, QCflowcontrol);
   if (!NILP (tem) && !EQ (tem, Qhw) && !EQ (tem, Qsw))
-    error (":flowcontrol must be nil (no flowcontrol), `hw', or `sw'");
+    error (u8":flowcontrol must be nil (no flowcontrol), ‘hw’, or ‘sw’");
 #if defined (CRTSCTS)
   attr.c_cflag &= ~CRTSCTS;
 #endif
diff --git a/src/w32.c b/src/w32.c
index 8721ed9..36f9808 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -9391,7 +9391,7 @@ serial_configure (struct Lisp_Process *p, Lisp_Object 
contact)
   else
     tem = Fplist_get (p->childp, QCparity);
   if (!NILP (tem) && !EQ (tem, Qeven) && !EQ (tem, Qodd))
-    error (":parity must be nil (no parity), `even', or `odd'");
+    error (u8":parity must be nil (no parity), ‘even’, or ‘odd’");
   dcb.fParity = FALSE;
   dcb.Parity = NOPARITY;
   dcb.fErrorChar = FALSE;
@@ -9438,7 +9438,7 @@ serial_configure (struct Lisp_Process *p, Lisp_Object 
contact)
   else
     tem = Fplist_get (p->childp, QCflowcontrol);
   if (!NILP (tem) && !EQ (tem, Qhw) && !EQ (tem, Qsw))
-    error (":flowcontrol must be nil (no flowcontrol), `hw', or `sw'");
+    error (u8":flowcontrol must be nil (no flowcontrol), ‘hw’, or ‘sw’");
   dcb.fOutxCtsFlow     = FALSE;
   dcb.fOutxDsrFlow     = FALSE;
   dcb.fDtrControl      = DTR_CONTROL_DISABLE;
diff --git a/src/window.c b/src/window.c
index ad5ac79..24d7c14 100644
--- a/src/window.c
+++ b/src/window.c
@@ -432,7 +432,7 @@ Return WINDOW.  */)
   CHECK_LIVE_WINDOW (window);
 
   if (! EQ (frame, WINDOW_FRAME (XWINDOW (window))))
-    error ("In `set-frame-selected-window', WINDOW is not on FRAME");
+    error (u8"In ‘set-frame-selected-window’, WINDOW is not on FRAME");
 
   if (EQ (frame, selected_frame))
     return Fselect_window (window, norecord);
@@ -3521,7 +3521,7 @@ This function runs `window-scroll-functions' before 
running
          if (EQ (w->dedicated, Qt))
            /* WINDOW is strongly dedicated to its buffer, signal an
               error.  */
-           error ("Window is dedicated to `%s'", SDATA (BVAR (XBUFFER (tem), 
name)));
+           error (u8"Window is dedicated to ‘%s’", SDATA (BVAR (XBUFFER (tem), 
name)));
          else
            /* WINDOW is weakly dedicated to its buffer, reset
               dedication.  */
@@ -5755,7 +5755,7 @@ and redisplay normally--don't erase and redraw the frame. 
 */)
   int this_scroll_margin;
 
   if (buf != current_buffer)
-    error ("`recenter'ing a window that does not display current-buffer.");
+    error (u8"‘recenter’ing a window that does not display current-buffer.");
 
   /* If redisplay is suppressed due to an error, try again.  */
   buf->display_error_modiff = 0;
diff --git a/src/xfaces.c b/src/xfaces.c
index f0b6d39..a7c74bf 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -797,7 +797,7 @@ load_pixmap (struct frame *f, Lisp_Object name)
 
   if (bitmap_id < 0)
     {
-      add_to_log ("Invalid or undefined bitmap `%s'", name, Qnil);
+      add_to_log (u8"Invalid or undefined bitmap ‘%s’", name, Qnil);
       bitmap_id = 0;
     }
   else
-- 
2.1.0






reply via email to

[Prev in Thread] Current Thread [Next in Thread]