diff options
author | Glenn Morris <rgm@gnu.org> | 2018-09-20 07:50:34 -0700 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2018-09-20 07:50:34 -0700 |
commit | 44c1ce3a370ed94199751d1429a65f40880b9234 (patch) | |
tree | c797f1b9a2aa388b2bfdd9ebe7b2a7555088d5ae | |
parent | 229c51afbf741b20504b821e6fd5da4145a776f5 (diff) | |
parent | d28d54c76754759e5f0fc8254541fbb4ef6a21d8 (diff) | |
download | emacs-44c1ce3a370ed94199751d1429a65f40880b9234.tar.gz emacs-44c1ce3a370ed94199751d1429a65f40880b9234.tar.bz2 emacs-44c1ce3a370ed94199751d1429a65f40880b9234.zip |
Merge from origin/emacs-26
d28d54c (origin/emacs-26) More accurate docs for 'text-char-description'
b3baf99 Document synchronous behavior of eshell/make (Bug#32513)
98544ea Fix bs-show with wide characters (Bug#17822)
85af51b Improve Custom menu labels for 2 options
72a2a36 Improve wording of last change in dired-x.texi
d4fa83b Fix GnuTLS test suite with GnuTLS versions 3.4.x
b5bee6b Fix build with gnutls versions 3.0 to 3.2 (Bug#32446)
67eb80e ; * etc/enriched.txt (hanging-indents): Remove extra indent.
c71cfb7 Fix the Bubbles game on TTY frames
3bbf21b Add choice to reshow certificate information (Bug#31877)
6f2c471 * src/alloc.c (Fbool_vector, Flist, Fvector): Doc tweak.
39eecb3 * src/alloc.c (vector): Fix grammatical error in doc string: ...
-rw-r--r-- | doc/lispref/help.texi | 30 | ||||
-rw-r--r-- | doc/misc/dired-x.texi | 4 | ||||
-rw-r--r-- | doc/misc/eshell.texi | 5 | ||||
-rw-r--r-- | lisp/bs.el | 4 | ||||
-rw-r--r-- | lisp/dired.el | 13 | ||||
-rw-r--r-- | lisp/eshell/em-unix.el | 3 | ||||
-rw-r--r-- | lisp/net/nsm.el | 51 | ||||
-rw-r--r-- | lisp/play/bubbles.el | 64 | ||||
-rw-r--r-- | lisp/progmodes/xref.el | 20 | ||||
-rw-r--r-- | src/alloc.c | 8 | ||||
-rw-r--r-- | src/gnutls.c | 49 | ||||
-rw-r--r-- | src/keymap.c | 3 |
12 files changed, 148 insertions, 106 deletions
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index a23bc413d25..2688a2bff6e 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -556,13 +556,15 @@ brackets. @defun text-char-description character This function returns a string describing @var{character} in the -standard Emacs notation for characters that can appear in text---like -@code{single-key-description}, except that the argument must be a -valid character code that passes a @code{characterp} test -(@pxref{Character Codes}), control characters are represented with a -leading caret (which is how control characters in Emacs buffers are -usually displayed), and the 2**7 bit is treated as the Meta bit, -whereas @code{single-key-description} uses the 2**27 bit for Meta. +standard Emacs notation for characters that can appear in +text---similar to @code{single-key-description}, except that the +argument must be a valid character code that passes a +@code{characterp} test (@pxref{Character Codes}). The function +produces descriptions of control characters with a leading caret +(which is how Emacs usually displays control characters in buffers). +Characters with modifier bits will cause this function to signal an +error (@acronym{ASCII} characters with the Control modifier are an +exception, they are represented as control characters). @smallexample @group @@ -571,19 +573,7 @@ whereas @code{single-key-description} uses the 2**27 bit for Meta. @end group @group (text-char-description ?\M-m) - @result{} "\xed" -@end group -@group -(text-char-description ?\C-\M-m) - @result{} "\x8d" -@end group -@group -(text-char-description (+ 128 ?m)) - @result{} "M-m" -@end group -@group -(text-char-description (+ 128 ?\C-m)) - @result{} "M-^M" + @error{} Wrong type argument: characterp, 134217837 @end group @end smallexample @end defun diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi index 1ff2b73512a..36a9cb0291a 100644 --- a/doc/misc/dired-x.texi +++ b/doc/misc/dired-x.texi @@ -521,7 +521,9 @@ where each @var{command} can either be a string or a Lisp expression that evaluates to a string. If several commands are given, all of them will temporarily be pushed onto the history. -A @samp{*} in the shell command is replaced by the file name. +A @samp{*} in the shell command stands for the file name that matched +@var{regexp}. When Emacs invokes the @var{command}, it replaces each +instance of @samp{*} with the matched file name. You can set this variable in your @file{~/.emacs}. For example, to add rules for @samp{.foo} and @samp{.bar} file extensions, write diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index 817e50d7893..79aac9b31fc 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -346,8 +346,9 @@ Alias to Emacs's @code{locate} function, which simply runs the external @item make @cmindex make -Run @command{make} through @code{compile}. -@xref{Compilation, , , emacs, The GNU Emacs Manual}. +Run @command{make} through @code{compile} when run asynchronously +(e.g., @samp{make &}). @xref{Compilation, , , emacs, The GNU Emacs +Manual}. Otherwise call the external @command{make} command. @item occur @cmindex occur diff --git a/lisp/bs.el b/lisp/bs.el index 0d65da14c72..32431ba4466 100644 --- a/lisp/bs.el +++ b/lisp/bs.el @@ -1159,7 +1159,7 @@ and move point to current buffer." (bs-mode) (let* ((inhibit-read-only t) (map-fun (lambda (entry) - (length (buffer-name entry)))) + (string-width (buffer-name entry)))) (max-length-of-names (apply 'max (cons 0 (mapcar map-fun list)))) (name-entry-length (min bs-maximal-buffer-name-column @@ -1371,7 +1371,7 @@ normally *buffer-selection*." apply-args) (nth 3 column) ; align (- min to-much))) - (len (length new-string))) + (len (string-width new-string))) (setq string (concat string new-string)) (when (> len min) (setq to-much (- len min)))))) diff --git a/lisp/dired.el b/lisp/dired.el index 26a7449e039..0ed1a4f602d 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -88,9 +88,11 @@ If nil, `dired-listing-switches' is used." (defcustom dired-use-ls-dired 'unspecified "Non-nil means Dired should pass the \"--dired\" option to \"ls\". -The special value of `unspecified' means to check explicitly, and -save the result in this variable. This is performed the first -time `dired-insert-directory' is called. +If nil, don't pass \"--dired\" to \"ls\". +The special value of `unspecified' means to check whether \"ls\" +supports the \"--dired\" option, and save the result in this +variable. This is performed the first time `dired-insert-directory' +is invoked. Note that if you set this option to nil, either through choice or because your \"ls\" program does not support \"--dired\", Dired @@ -104,9 +106,10 @@ This is used by default on MS Windows, which does not have an \"ls\" program. Note that `ls-lisp' does not support as many options as GNU ls, though. For more details, see Info node `(emacs)ls in Lisp'." :group 'dired - :type '(choice (const :tag "Check for --dired support" unspecified) + :type '(choice (const :tag + "Use --dired only if 'ls' supports it" unspecified) (const :tag "Do not use --dired" nil) - (other :tag "Use --dired" t))) + (other :tag "Always use --dired" t))) (defcustom dired-chmod-program "chmod" "Name of chmod command (usually `chmod')." diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index c912c15ac75..9a99c53571c 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -656,7 +656,8 @@ Concatenate FILE(s), or standard input, to standard output.") ;; special front-end functions for compilation-mode buffers (defun eshell/make (&rest args) - "Use `compile' to do background makes." + "Use `compile' to do background makes. +Fallback to standard make when called synchronously." (if (and eshell-current-subjob-p (eshell-interactive-output-p)) (let ((compilation-process-setup-function diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el index 9eb914e107f..e857e64be84 100644 --- a/lisp/net/nsm.el +++ b/lisp/net/nsm.el @@ -365,29 +365,34 @@ HOST PORT STATUS OPTIONAL-PARAMETER.") t)))) (defun nsm-query-user (message args cert) - (let ((buffer (get-buffer-create "*Network Security Manager*"))) - (save-window-excursion - ;; First format the certificate and warnings. - (with-help-window buffer - (with-current-buffer buffer - (erase-buffer) - (when (> (length cert) 0) - (insert cert "\n")) - (let ((start (point))) - (insert (apply #'format-message message args)) - (goto-char start) - ;; Fill the first line of the message, which usually - ;; contains lots of explanatory text. - (fill-region (point) (line-end-position))))) - ;; Then ask the user what to do about it. - (unwind-protect - (cadr - (read-multiple-choice - "Continue connecting?" - '((?a "always" "Accept this certificate this session and for all future sessions.") - (?s "session only" "Accept this certificate this session only.") - (?n "no" "Refuse to use this certificate, and close the connection.")))) - (kill-buffer buffer))))) + (catch 'return + (while t + (let ((buffer (get-buffer-create "*Network Security Manager*"))) + (save-window-excursion + ;; First format the certificate and warnings. + (with-help-window buffer + (with-current-buffer buffer + (erase-buffer) + (when (> (length cert) 0) + (insert cert "\n")) + (let ((start (point))) + (insert (apply #'format-message message args)) + (goto-char start) + ;; Fill the first line of the message, which usually + ;; contains lots of explanatory text. + (fill-region (point) (line-end-position))))) + ;; Then ask the user what to do about it. + (pcase (unwind-protect + (cadr + (read-multiple-choice + "Continue connecting?" + '((?a "always" "Accept this certificate this session and for all future sessions.") + (?s "session only" "Accept this certificate this session only.") + (?n "no" "Refuse to use this certificate, and close the connection.") + (?r "reshow" "Reshow certificate information.")))) + (kill-buffer buffer)) + ("reshow") + (val (throw 'return val)))))))) (defun nsm-save-host (host port status what permanency) (let* ((id (nsm-id host port)) diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el index e30838dfca4..ee2135b9bbe 100644 --- a/lisp/play/bubbles.el +++ b/lisp/play/bubbles.el @@ -250,10 +250,10 @@ Available modes are `shift-default' and `shift-always'." "Indicate whether images have been created successfully.") (defvar bubbles--col-offset 0 - "Horizontal offset for centering the bubbles grid.") + "Horizontal offset for centering the bubbles grid, in pixels.") (defvar bubbles--row-offset 0 - "Vertical offset for centering the bubbles grid.") + "Vertical offset for centering the bubbles grid, in pixels.") (defvar bubbles--save-data nil "List containing bubbles save data (SCORE BUFFERCONTENTS).") @@ -960,33 +960,26 @@ columns on its right towards the left. (defun bubbles--compute-offsets () "Update horizontal and vertical offsets for centering the bubbles grid. Set `bubbles--col-offset' and `bubbles--row-offset'." - (cond ((and (display-images-p) - bubbles--images-ok - (not (eq bubbles-graphics-theme 'ascii)) - (fboundp 'window-inside-pixel-edges)) - ;; compute offset in units of pixels - (let ((bubbles--image-size - (car (image-size (car bubbles--images) t)))) - (setq bubbles--col-offset - (list - (max 0 (/ (- (nth 2 (window-inside-pixel-edges)) - (nth 0 (window-inside-pixel-edges)) - (* ( + bubbles--image-size 2) ;; margin - (bubbles--grid-width))) 2)))) - (setq bubbles--row-offset - (list - (max 0 (/ (- (nth 3 (window-inside-pixel-edges)) - (nth 1 (window-inside-pixel-edges)) - (* (+ bubbles--image-size 1) ;; margin - (bubbles--grid-height))) 2)))))) - (t - ;; compute offset in units of chars - (setq bubbles--col-offset - (max 0 (/ (- (window-width) - (bubbles--grid-width)) 2))) - (setq bubbles--row-offset - (max 0 (/ (- (window-height) - (bubbles--grid-height) 2) 2)))))) + (let* ((use-images-p (and (display-images-p) + bubbles--images-ok + (not (eq bubbles-graphics-theme 'ascii)))) + (bubbles--image-size + (if use-images-p (car (image-size (car bubbles--images) t)) 1)) + ;; In GUI mode, leave thin margins around the images. + (image-hor-size + (if use-images-p (+ bubbles--image-size 2) bubbles--image-size)) + (image-vert-size + (if use-images-p (1+ bubbles--image-size) bubbles--image-size))) + (setq bubbles--col-offset + (max 0 (/ (- (nth 2 (window-body-pixel-edges)) + (nth 0 (window-body-pixel-edges)) + (* image-hor-size (bubbles--grid-width))) + 2))) + (setq bubbles--row-offset + (max 0 (/ (- (nth 3 (window-body-pixel-edges)) + (nth 1 (window-body-pixel-edges)) + (* image-vert-size (bubbles--grid-height))) + 2))))) (defun bubbles--remove-overlays () "Remove all overlays." @@ -1007,7 +1000,8 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." (insert " ") (put-text-property (point-min) (point) 'display - (cons 'space (list :height bubbles--row-offset))) + (cons 'space (list :height + (list bubbles--row-offset)))) (insert "\n") (let ((max-char (length (bubbles--colors)))) (dotimes (i (bubbles--grid-height)) @@ -1015,7 +1009,8 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." (insert " ") (put-text-property p (point) 'display - (cons 'space (list :width bubbles--col-offset)))) + (cons 'space (list :width + (list bubbles--col-offset))))) (dotimes (j (bubbles--grid-width)) (let* ((index (random max-char)) (char (nth index bubbles-chars))) @@ -1025,7 +1020,8 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." (insert "\n ") (put-text-property (1- (point)) (point) 'display - (cons 'space (list :width bubbles--col-offset)))) + (cons 'space (list :width + (list bubbles--col-offset))))) (put-text-property (point-min) (point-max) 'pointer 'arrow)) (bubbles-mode) (bubbles--reset-score) @@ -1177,7 +1173,7 @@ Use optional parameter POS instead of point if given." (insert " ") (put-text-property (1- (point)) (point) 'display - (cons 'space (list :width bubbles--col-offset))) + (cons 'space (list :width (list bubbles--col-offset)))) (insert (format "Score: %4d" bubbles--score)) (put-text-property pos (point) 'status t)))) @@ -1197,7 +1193,7 @@ Use optional parameter POS instead of point if given." (insert "\n ") (put-text-property (1- (point)) (point) 'display - (cons 'space (list :width bubbles--col-offset))) + (cons 'space (list :width (list bubbles--col-offset)))) (insert "Game Over!")) ;; save score (gamegrid-add-score (format "bubbles-%s-%d-%d-%d-scores" diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index c85fe676da2..c7ae40eb34e 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -323,21 +323,23 @@ backward." (defcustom xref-prompt-for-identifier '(not xref-find-definitions xref-find-definitions-other-window xref-find-definitions-other-frame) - "When t, always prompt for the identifier name. + "If non-nil, prompt for the identifier to find. + +When t, always prompt for the identifier name. When nil, prompt only when there's no value at point we can use, or when the command has been called with the prefix argument. -Otherwise, it's a list of xref commands which will prompt -anyway (the value at point, if any, will be used as the default). - +Otherwise, it's a list of xref commands which will always prompt, +with the identifier at point, if any, used as the default. If the list starts with `not', the meaning of the rest of the -elements is negated." - :type '(choice (const :tag "always" t) - (const :tag "auto" nil) - (set :menu-tag "command specific" :tag "commands" +elements is negated: these commands will NOT prompt." + :type '(choice (const :tag "Always prompt for identifier" t) + (const :tag "Prompt if no identifier at point" nil) + (set :menu-tag "Prompt according to command" + :tag "Prompt according to command" :value (not) - (const :tag "Except" not) + (const :tag "Except for commands listed below" not) (repeat :inline t (symbol :tag "command"))))) (defcustom xref-after-jump-hook '(recenter diff --git a/src/alloc.c b/src/alloc.c index 6bced4e8f01..3b150797c36 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -2425,7 +2425,7 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */) DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0, doc: /* Return a new bool-vector with specified arguments as elements. -Any number of arguments, even zero arguments, are allowed. +Allows any number of arguments, including zero. usage: (bool-vector &rest OBJECTS) */) (ptrdiff_t nargs, Lisp_Object *args) { @@ -2872,7 +2872,7 @@ listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...) DEFUN ("list", Flist, Slist, 0, MANY, 0, doc: /* Return a newly created list with specified arguments as elements. -Any number of arguments, even zero arguments, are allowed. +Allows any number of arguments, including zero. usage: (list &rest OBJECTS) */) (ptrdiff_t nargs, Lisp_Object *args) { @@ -3497,7 +3497,7 @@ See also the function `vector'. */) DEFUN ("vector", Fvector, Svector, 0, MANY, 0, doc: /* Return a newly created vector with specified arguments as elements. -Any number of arguments, even zero arguments, are allowed. +Allows any number of arguments, including zero. usage: (vector &rest OBJECTS) */) (ptrdiff_t nargs, Lisp_Object *args) { @@ -3729,7 +3729,7 @@ build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) elements. If all the arguments are characters that can fit in a string of events, make a string; otherwise, make a vector. - Any number of arguments, even zero arguments, are allowed. */ + Allows any number of arguments, including zero. */ Lisp_Object make_event_array (ptrdiff_t nargs, Lisp_Object *args) diff --git a/src/gnutls.c b/src/gnutls.c index a48d99832ad..d36b637044f 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -38,6 +38,23 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ So, require 3.5.1. */ #if GNUTLS_VERSION_NUMBER >= 0x030501 # define HAVE_GNUTLS_AEAD +#elif GNUTLS_VERSION_NUMBER < 0x030202 +/* gnutls_cipher_get_tag_size was introduced in 3.2.2, but it's only + relevant for AEAD ciphers. */ +# define gnutls_cipher_get_tag_size(cipher) 0 +#endif + +#if GNUTLS_VERSION_NUMBER < 0x030200 +/* gnutls_cipher_get_iv_size was introduced in 3.2.0. For the ciphers + available in previous versions, block size is equivalent. */ +#define gnutls_cipher_get_iv_size(cipher) gnutls_cipher_get_block_size (cipher) +#endif + +#if GNUTLS_VERSION_NUMBER < 0x030202 +/* gnutls_digest_list and gnutls_digest_get_name were added in 3.2.2. + For previous versions, the mac algorithms are equivalent. */ +# define gnutls_digest_list() ((const gnutls_digest_algorithm_t *) gnutls_mac_list ()) +# define gnutls_digest_get_name(id) gnutls_mac_get_name ((gnutls_mac_algorithm_t) id) #endif /* gnutls_mac_get_nonce_size was added in GnuTLS 3.2.0, but was @@ -206,13 +223,21 @@ DEF_DLL_FN (const gnutls_mac_algorithm_t *, gnutls_mac_list, (void)); DEF_DLL_FN (size_t, gnutls_mac_get_nonce_size, (gnutls_mac_algorithm_t)); # endif DEF_DLL_FN (size_t, gnutls_mac_get_key_size, (gnutls_mac_algorithm_t)); +# ifndef gnutls_digest_list DEF_DLL_FN (const gnutls_digest_algorithm_t *, gnutls_digest_list, (void)); +# endif +# ifndef gnutls_digest_get_name DEF_DLL_FN (const char *, gnutls_digest_get_name, (gnutls_digest_algorithm_t)); +# endif DEF_DLL_FN (gnutls_cipher_algorithm_t *, gnutls_cipher_list, (void)); +# ifndef gnutls_cipher_get_iv_size DEF_DLL_FN (int, gnutls_cipher_get_iv_size, (gnutls_cipher_algorithm_t)); +# endif DEF_DLL_FN (size_t, gnutls_cipher_get_key_size, (gnutls_cipher_algorithm_t)); DEF_DLL_FN (int, gnutls_cipher_get_block_size, (gnutls_cipher_algorithm_t)); +# ifndef gnutls_cipher_get_tag_size DEF_DLL_FN (int, gnutls_cipher_get_tag_size, (gnutls_cipher_algorithm_t)); +# endif DEF_DLL_FN (int, gnutls_cipher_init, (gnutls_cipher_hd_t *, gnutls_cipher_algorithm_t, const gnutls_datum_t *, const gnutls_datum_t *)); @@ -340,13 +365,21 @@ init_gnutls_functions (void) LOAD_DLL_FN (library, gnutls_mac_get_nonce_size); # endif LOAD_DLL_FN (library, gnutls_mac_get_key_size); +# ifndef gnutls_digest_list LOAD_DLL_FN (library, gnutls_digest_list); +# endif +# ifndef gnutls_digest_get_name LOAD_DLL_FN (library, gnutls_digest_get_name); +# endif LOAD_DLL_FN (library, gnutls_cipher_list); +# ifndef gnutls_cipher_get_iv_size LOAD_DLL_FN (library, gnutls_cipher_get_iv_size); +# endif LOAD_DLL_FN (library, gnutls_cipher_get_key_size); LOAD_DLL_FN (library, gnutls_cipher_get_block_size); +# ifndef gnutls_cipher_get_tag_size LOAD_DLL_FN (library, gnutls_cipher_get_tag_size); +# endif LOAD_DLL_FN (library, gnutls_cipher_init); LOAD_DLL_FN (library, gnutls_cipher_set_iv); LOAD_DLL_FN (library, gnutls_cipher_encrypt2); @@ -456,13 +489,21 @@ init_gnutls_functions (void) # define gnutls_mac_get_nonce_size fn_gnutls_mac_get_nonce_size # endif # define gnutls_mac_get_key_size fn_gnutls_mac_get_key_size -# define gnutls_digest_list fn_gnutls_digest_list -# define gnutls_digest_get_name fn_gnutls_digest_get_name +# ifndef gnutls_digest_list +# define gnutls_digest_list fn_gnutls_digest_list +# endif +# ifndef gnutls_digest_get_name +# define gnutls_digest_get_name fn_gnutls_digest_get_name +# endif # define gnutls_cipher_list fn_gnutls_cipher_list -# define gnutls_cipher_get_iv_size fn_gnutls_cipher_get_iv_size +# ifndef gnutls_cipher_get_iv_size +# define gnutls_cipher_get_iv_size fn_gnutls_cipher_get_iv_size +# endif # define gnutls_cipher_get_key_size fn_gnutls_cipher_get_key_size # define gnutls_cipher_get_block_size fn_gnutls_cipher_get_block_size -# define gnutls_cipher_get_tag_size fn_gnutls_cipher_get_tag_size +# ifndef gnutls_cipher_get_tag_size +# define gnutls_cipher_get_tag_size fn_gnutls_cipher_get_tag_size +# endif # define gnutls_cipher_init fn_gnutls_cipher_init # define gnutls_cipher_set_iv fn_gnutls_cipher_set_iv # define gnutls_cipher_encrypt2 fn_gnutls_cipher_encrypt2 diff --git a/src/keymap.c b/src/keymap.c index e405ed8c827..22e24b2cb00 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -2297,7 +2297,8 @@ push_text_char_description (register unsigned int c, register char *p) DEFUN ("text-char-description", Ftext_char_description, Stext_char_description, 1, 1, 0, doc: /* Return the description of CHARACTER in standard Emacs notation. CHARACTER must be a valid character code that passes the `characterp' test. -Control characters turn into "^char", the 2**7 bit is treated as Meta, etc. +Control characters turn into "^char", and characters with Meta and other +modifiers signal an error, as they are not valid characterr codes. This differs from `single-key-description' which accepts character events, and thus doesn't enforce the `characterp' condition, turns control characters into "C-char", and uses the 2**27 bit for Meta. |