[latex3-commits] [latex3/latex3] main: Switch from x- to e-type in l3keys (dcc11cf4c)

github at latex-project.org github at latex-project.org
Tue Oct 10 12:59:28 CEST 2023


Repository : https://github.com/latex3/latex3
On branch  : main
Link       : https://github.com/latex3/latex3/commit/dcc11cf4c564745dbf453e054e8f7c309c39c3c8

>---------------------------------------------------------------

commit dcc11cf4c564745dbf453e054e8f7c309c39c3c8
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Tue Sep 26 13:42:39 2023 +0100

    Switch from x- to e-type in l3keys
    
    This requires a reasonable number of e-type
    additions to l3str.


>---------------------------------------------------------------

dcc11cf4c564745dbf453e054e8f7c309c39c3c8
 l3kernel/CHANGELOG.md                   |   2 +
 l3kernel/l3keys.dtx                     | 218 ++++++++++++++++++--------------
 l3kernel/l3str.dtx                      |  59 ++++-----
 l3kernel/testfiles/m3keys001.lvt        |   4 +-
 l3kernel/testfiles/m3keys002.lvt        |  40 +++---
 l3kernel/testfiles/m3keys002.tlg        |   8 +-
 l3kernel/testfiles/m3keys008.lvt        |   2 +-
 l3kernel/testfiles/m3keys008.tlg        |   2 +-
 l3kernel/testfiles/m3show002.luatex.tlg |   2 +-
 l3kernel/testfiles/m3show002.lvt        |   2 +-
 l3kernel/testfiles/m3show002.tlg        |   2 +-
 l3kernel/testfiles/m3show003.lvt        |   2 +-
 l3kernel/testfiles/m3show003.tlg        |   2 +-
 l3packages/xtemplate/xtemplate.dtx      |   6 +-
 14 files changed, 190 insertions(+), 161 deletions(-)

diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index a3666fbd7..d2b0b2c46 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -13,6 +13,7 @@ this project uses date-based 'snapshot' version identifiers.
   They were supported since l3kernel 2021-05-25, along with `\sys_timer:`.
 - l3doc.dtx: Support for footnotes in the function and variable environment  
 - Variants `\tl_if_single:c(TF)` and `\tl_if_single_p:c` (issue \#1272)
+- Key properties `.str_(g)set_e:N` and `.tl_(g)set_e:N`
 
 ### Changed
 - Convert `\file_if_exist:n(TF)` to expandable status,
@@ -24,6 +25,7 @@ this project uses date-based 'snapshot' version identifiers.
 
 ### Deprecated
 - `\iow_shipout_x:Nn` in favor of `e`-type naming
+- Key properties `.str_(g)set_x:N` and `.tl_(g)set_x:N`
 
 ### Fixed
 - Rare rounding error in divisions (issue \#1264)
diff --git a/l3kernel/l3keys.dtx b/l3kernel/l3keys.dtx
index aaa48b9b1..fbaf20b8f 100644
--- a/l3kernel/l3keys.dtx
+++ b/l3kernel/l3keys.dtx
@@ -124,7 +124,8 @@
 %
 % \section{Creating keys}
 %
-% \begin{function}[updated = 2017-11-14]{\keys_define:nn, \keys_define:nx}
+% \begin{function}[updated = 2017-11-14]
+%   {\keys_define:nn, \keys_define:ne, \keys_define:nx}
 %   \begin{syntax}
 %     \cs{keys_define:nn} \Arg{module} \Arg{keyval list}
 %   \end{syntax}
@@ -216,7 +217,7 @@
 % \end{function}
 %
 % \begin{function}[added = 2011-08-21, updated = 2013-07-10]
-%   {.choices:nn, .choices:Vn, .choices:on, .choices:xn}
+%   {.choices:nn, .choices:Vn}
 %   \begin{syntax}
 %     \meta{key} .choices:nn = \Arg{choices} \Arg{code}
 %   \end{syntax}
@@ -263,7 +264,7 @@
 % \end{function}
 %
 % \begin{function}[updated = 2013-07-09]
-%   {.default:n, .default:V, .default:o, .default:x}
+%   {.default:n, .default:V, .default:e, .default:o}
 %   \begin{syntax}
 %     \meta{key} .default:n = \Arg{default}
 %   \end{syntax}
@@ -355,7 +356,7 @@
 % \end{function}
 %
 % \begin{function}[updated = 2013-07-09]
-%   {.initial:n, .initial:V, .initial:o, .initial:x}
+%   {.initial:n, .initial:V, .initial:e, .initial:o, .initial:x}
 %   \begin{syntax}
 %     \meta{key} .initial:n = \Arg{value}
 %   \end{syntax}
@@ -424,7 +425,7 @@
 % \end{function}
 %
 % \begin{function}[added = 2011-08-21, updated = 2013-07-10]
-%   {.multichoices:nn, .multichoices:Vn, .multichoices:on, .multichoices:xn}
+%   {.multichoices:nn, .multichoices:Vn}
 %   \begin{syntax}
 %     \meta{key} .multichoices:nn \Arg{choices} \Arg{code}
 %   \end{syntax}
@@ -480,14 +481,14 @@
 %   at the point that the key is set up.
 % \end{function}
 %
-% \begin{function}[added = 2021-10-30]
-%   {.str_set_x:N, .str_set_x:c, .str_gset_x:N, .str_gset_x:c}
+% \begin{function}[added = 2023-09-18]
+%   {.str_set_e:N, .str_set_e:c, .str_gset_e:N, .str_gset_e:c}
 %   \begin{syntax}
-%     \meta{key} .str_set_x:N = \meta{string variable}
+%     \meta{key} .str_set_e:N = \meta{string variable}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{string variable} to \meta{value},
-%   which will be subjected to an \texttt{x}-type expansion
-%   (\emph{i.e.}~using \cs{str_set:Nx}). If the variable does not exist,
+%   which will be subjected to an \texttt{e}-type expansion
+%   (\emph{i.e.}~using \cs{str_set:Ne}). If the variable does not exist,
 %   it is created globally at the point that the key is set up.
 % \end{function}
 %
@@ -500,13 +501,14 @@
 %   at the point that the key is set up.
 % \end{function}
 %
-% \begin{function}{.tl_set_x:N, .tl_set_x:c, .tl_gset_x:N, .tl_gset_x:c}
+% \begin{function}[added = 2023-09-18]
+%   {.tl_set_e:N, .tl_set_e:c, .tl_gset_e:N, .tl_gset_e:c}
 %   \begin{syntax}
-%     \meta{key} .tl_set_x:N = \meta{token list variable}
+%     \meta{key} .tl_set_e:N = \meta{token list variable}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{token list variable} to \meta{value},
-%   which will be subjected to an \texttt{x}-type expansion
-%   (\emph{i.e.}~using \cs{tl_set:Nx}). If the variable does not exist,
+%   which will be subjected to an \texttt{e}-type expansion
+%   (\emph{i.e.}~using \cs{tl_set:Ne}). If the variable does not exist,
 %   it is created globally at the point that the key is set up.
 % \end{function}
 %
@@ -724,7 +726,10 @@
 % \section{Setting keys}
 %
 % \begin{function}[updated = 2017-11-14]
-%   {\keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx}
+%   {
+%     \keys_set:nn, \keys_set:nV, \keys_set:nv,  \keys_set:ne,
+%     \keys_set:no, \keys_set:nx
+%   }
 %   \begin{syntax}
 %     \cs{keys_set:nn} \Arg{module} \Arg{keyval list}
 %   \end{syntax}
@@ -782,14 +787,13 @@
 % \begin{function}[added = 2011-08-23, updated = 2019-01-29]
 %   {
 %     \keys_set_known:nn, \keys_set_known:nV,
-%     \keys_set_known:nv, \keys_set_known:nx,
-%     \keys_set_known:no,
+%     \keys_set_known:nv, \keys_set_known:ne,
+%     \keys_set_known:no, \keys_set_known:nx,
 %     \keys_set_known:nnN, \keys_set_known:nVN,
 %     \keys_set_known:nvN, \keys_set_known:nxN,
-%     \keys_set_known:noN,
+%     \keys_set_known:noN, \keys_set_known:neN,
 %     \keys_set_known:nnnN, \keys_set_known:nVnN,
-%     \keys_set_known:nvnN, \keys_set_known:nxnN,
-%     \keys_set_known:nonN
+%     \keys_set_known:nvnN, \keys_set_known:nenN
 %   }
 %   \begin{syntax}
 %     \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
@@ -1733,7 +1737,7 @@
 %
 % \subsection{The key defining mechanism}
 %
-% \begin{macro}{\keys_define:nn, \keys_define:nx}
+% \begin{macro}{\keys_define:nn, \keys_define:ne, \keys_define:nx}
 % \begin{macro}{\@@_define:nnn, \@@_define:onn}
 %   The public function for definitions is just a wrapper for the lower
 %   level mechanism, more or less. The outer function is designed to
@@ -1742,7 +1746,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \keys_define:nn
   { \@@_define:onn \l_@@_module_str }
-\cs_generate_variant:Nn \keys_define:nn { nx }
+\cs_generate_variant:Nn \keys_define:nn { ne , nx }
 \cs_new_protected:Npn \@@_define:nnn #1#2#3
   {
     \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} }
@@ -1802,7 +1806,7 @@
 %   and storing the text before and after it. Everything is turned into
 %   strings, so there is no problem using an \texttt{x}-type expansion. Since
 %   \cs{@@_trim_spaces:n} will turn its argument into a string anyway, this
-%   function uses \cs{cs_set_nopar:Npx} instead of \cs{tl_set:Nx} to gain some
+%   function uses \cs{cs_set_nopar:Npe} instead of \cs{tl_set:Ne} to gain some
 %   speed.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_property_find:n #1
@@ -1900,9 +1904,9 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \@@_choice_make:
-    \@@_cmd_set:nx { \l_keys_path_str / true }
+    \@@_cmd_set:ne { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
-    \@@_cmd_set:nx { \l_keys_path_str / false }
+    \@@_cmd_set:ne { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
     \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
       {
@@ -1975,7 +1979,7 @@
     \clist_map_inline:nn {#2}
       {
         \int_incr:N \l_keys_choice_int
-        \@@_cmd_set:nx
+        \@@_cmd_set:ne
           { \l_keys_path_str / \@@_trim_spaces:n {##1} }
           {
             \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1}
@@ -1991,7 +1995,7 @@
 %
 % \begin{macro}
 %   {
-%     \@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo,
+%     \@@_cmd_set:nn, \@@_cmd_set:Vn, \@@_cmd_set:ne, \@@_cmd_set:Vo,
 %     \@@_cmd_set_direct:nn
 %   }
 %   Setting the code for a key first logs if appropriate that we are
@@ -1999,7 +2003,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cmd_set:nn #1#2
   {  \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } }
-\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
+\cs_generate_variant:Nn \@@_cmd_set:nn { ne , Vn , Vo }
 \cs_new_protected:Npn \@@_cmd_set_direct:nn #1#2
   { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
 %    \end{macrocode}
@@ -2118,9 +2122,9 @@
 \cs_new_protected:Npn \@@_legacy_if_set:nnnn #1#2#3#4
   {
     \@@_choice_make:
-    \@@_cmd_set:nx { \l_keys_path_str / true }
+    \@@_cmd_set:ne { \l_keys_path_str / true }
       { \exp_not:c { legacy_if_#2  set_ #3 :n } { \exp_not:n {#1} } }
-    \@@_cmd_set:nx { \l_keys_path_str / false }
+    \@@_cmd_set:ne { \l_keys_path_str / false }
       { \exp_not:c { legacy_if_#2  set_ #4 :n } { \exp_not:n {#1} } }
     \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
@@ -2169,7 +2173,7 @@
     \prop_if_exist:NF #1 { \prop_new:N #1 }
     \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
       \l_@@_tmpa_tl \l_@@_tmpb_tl
-    \@@_cmd_set:nx \l_keys_path_str
+    \@@_cmd_set:ne \l_keys_path_str
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -2320,7 +2324,7 @@
 \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \@@_cmd_set:nx \l_keys_path_str
+    \@@_cmd_set:ne \l_keys_path_str
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -2390,8 +2394,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}
-%   {.choices:nn, .choices:Vn, .choices:on, .choices:xn}
+% \begin{macro}{.choices:nn, .choices:Vn}
 %   For auto-generation of a series of mutually-exclusive choices.
 %   Here, |#1| consists of two separate
 %   arguments, hence the slightly odd-looking implementation.
@@ -2400,10 +2403,6 @@
   { \@@_choices_make:nn #1 }
 \cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1
   { \exp_args:NV \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1
-  { \exp_args:No \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1
-  { \exp_args:Nx \@@_choices_make:nn #1 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2456,17 +2455,17 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{.default:n, .default:V, .default:o, .default:x}
+% \begin{macro}{.default:n, .default:V, .default:e, .default:o}
 %   Expansion is left to the internal functions.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1
   { \@@_default_set:n {#1} }
 \cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1
   { \exp_args:NV \@@_default_set:n #1 }
+\cs_new_protected:cpn { \c_@@_props_root_str .default:e } #1
+  { \exp_args:Ne \@@_default_set:n {#1} }
 \cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1
   { \exp_args:No \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1
-  { \exp_args:Nx \@@_default_set:n {#1} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2518,17 +2517,19 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x}
+% \begin{macro}{.initial:n, .initial:V, .initial:e, .initial:o, .initial:x}
 %   The standard hand-off approach.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1
   { \@@_initialise:n {#1} }
 \cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1
   { \exp_args:NV \@@_initialise:n #1 }
+\cs_new_protected:cpn { \c_@@_props_root_str .initial:e } #1
+  { \exp_args:Ne \@@_initialise:n {#1} }
 \cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1
   { \exp_args:No \@@_initialise:n {#1} }
 \cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1
-  { \exp_args:Nx \@@_initialise:n {#1} }
+  { \exp_args:Ne \@@_initialise:n {#1} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2583,11 +2584,7 @@
 % \end{macro}
 %
 % \begin{macro}{.multichoice:}
-% \begin{macro}
-%   {
-%     .multichoices:nn, .multichoices:Vn, .multichoices:on,
-%       .multichoices:xn,
-%   }
+% \begin{macro}{.multichoices:nn, .multichoices:Vn}
 %   The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but
 %   where more than one choice is allowed.
 %    \begin{macrocode}
@@ -2597,10 +2594,6 @@
   { \@@_multichoices_make:nn #1 }
 \cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1
   { \exp_args:NV \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1
-  { \exp_args:No \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1
-  { \exp_args:Nx \@@_multichoices_make:nn #1 }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2651,26 +2644,26 @@
 %
 % \begin{macro}{.str_set:N, .str_set:c}
 % \begin{macro}{.str_gset:N, .str_gset:c}
-% \begin{macro}{.str_set_x:N, .str_set_x:c}
-% \begin{macro}{.str_gset_x:N, .str_gset_x:c}
+% \begin{macro}{.str_set_e:N, .str_set_e:c}
+% \begin{macro}{.str_gset_e:N, .str_gset_e:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_str .str_set:N } #1
   { \@@_variable_set:NnnN #1 { str } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_str .str_set:c } #1
   { \@@_variable_set:cnnN {#1} { str } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1
-  { \@@_variable_set:NnnN #1 { str } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1
-  { \@@_variable_set:cnnN {#1} { str } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:N } #1
+  { \@@_variable_set:NnnN #1 { str } { } e }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:c } #1
+  { \@@_variable_set:cnnN {#1} { str } { } e }
 \cs_new_protected:cpn { \c_@@_props_root_str .str_gset:N } #1
   { \@@_variable_set:NnnN #1 { str } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_str .str_gset:c } #1
   { \@@_variable_set:cnnN {#1} { str } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1
-  { \@@_variable_set:NnnN #1 { str } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1
-  { \@@_variable_set:cnnN {#1} { str } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:N } #1
+  { \@@_variable_set:NnnN #1 { str } { g } e }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:c } #1
+  { \@@_variable_set:cnnN {#1} { str } { g } e }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2679,26 +2672,26 @@
 %
 % \begin{macro}{.tl_set:N, .tl_set:c}
 % \begin{macro}{.tl_gset:N, .tl_gset:c}
-% \begin{macro}{.tl_set_x:N, .tl_set_x:c}
-% \begin{macro}{.tl_gset_x:N, .tl_gset_x:c}
+% \begin{macro}{.tl_set_e:N, .tl_set_e:c}
+% \begin{macro}{.tl_gset_e:N, .tl_gset_e:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1
   { \@@_variable_set:NnnN #1 { tl } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
-  { \@@_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
-  { \@@_variable_set:cnnN {#1} { tl } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:N } #1
+  { \@@_variable_set:NnnN #1 { tl } { } e }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:c } #1
+  { \@@_variable_set:cnnN {#1} { tl } { } e }
 \cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1
   { \@@_variable_set:NnnN #1 { tl } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
-  { \@@_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
-  { \@@_variable_set:cnnN {#1} { tl } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:N } #1
+  { \@@_variable_set:NnnN #1 { tl } { g } e }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:c } #1
+  { \@@_variable_set:cnnN {#1} { tl } { g } e }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2736,7 +2729,8 @@
 %
 % \begin{macro}
 %   {
-%     \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx,
+%     \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:ne,
+%     \keys_set:no, \keys_set:nx,
 %     \@@_set:nn
 %   }
 % \begin{macro}{\@@_set:nnn}
@@ -2762,7 +2756,7 @@
           { \exp_not:o \l_@@_relative_tl }
       }
   }
-\cs_generate_variant:Nn \keys_set:nn { nV , nv , no , nx }
+\cs_generate_variant:Nn \keys_set:nn { nV , nv , ne , no , nx }
 \cs_new_protected:Npn \@@_set:nn #1#2
   { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} }
 \cs_new_protected:Npn \@@_set:nnn #1#2#3
@@ -2778,21 +2772,21 @@
 % \begin{macro}
 %   {
 %     \keys_set_known:nnN, \keys_set_known:nVN,
-%     \keys_set_known:nvN, \keys_set_known:nxN,
+%     \keys_set_known:nvN, \keys_set_known:neN,
+%     \keys_set_known:nxN,
 %     \keys_set_known:noN
 %   }
 % \begin{macro}
 %   {
 %     \keys_set_known:nnnN, \keys_set_known:nVnN,
-%     \keys_set_known:nvnN, \keys_set_known:nxnN,
-%     \keys_set_known:nonN
+%     \keys_set_known:nvnN, \keys_set_known:nenN
 %   }
 % \begin{macro}{\@@_set_known:nnnnN}
 % \begin{macro}
 %   {
 %     \keys_set_known:nn, \keys_set_known:nV,
-%     \keys_set_known:nv, \keys_set_known:nx,
-%     \keys_set_known:no
+%     \keys_set_known:nv, \keys_set_known:ne,
+%     \keys_set_known:nx, \keys_set_known:no
 %   }
 %  \begin{macro}{\@@_set_known:nnn}
 %   Setting known keys simply means setting the appropriate flag, then
@@ -2806,13 +2800,13 @@
     \exp_args:No \@@_set_known:nnnnN
       \l_@@_unused_clist \q_@@_no_value {#1} {#2} #3
   }
-\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , nx , no }
+\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , ne , nx , no }
 \cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4
   {
     \exp_args:No \@@_set_known:nnnnN
       \l_@@_unused_clist {#3} {#1} {#2} #4
   }
-\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , nx , no }
+\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , ne }
 \cs_new_protected:Npn \@@_set_known:nnnnN #1#2#3#4#5
   {
     \clist_clear:N \l_@@_unused_clist
@@ -2822,10 +2816,10 @@
   }
 \cs_new_protected:Npn \keys_set_known:nn #1#2
   { \@@_set_known:nnn \q_@@_no_value {#1} {#2} }
-\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , nx , no }
+\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , ne , nx , no }
 \cs_new_protected:Npn \@@_set_known:nnn #1#2#3
   {
-    \use:x
+    \use:e
       {
         \bool_set_true:N \exp_not:N \l_@@_only_known_bool
         \bool_set_false:N \exp_not:N \l_@@_filtered_bool
@@ -2903,7 +2897,7 @@
 \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
 \cs_new_protected:Npn \@@_set_filter:nnnn #1#2#3#4
   {
-    \use:x
+    \use:e
       {
         \bool_set_false:N \exp_not:N \l_@@_only_known_bool
         \bool_set_true:N \exp_not:N \l_@@_filtered_bool
@@ -2922,7 +2916,7 @@
   }
 \cs_new_protected:Npn \keys_set_groups:nnn #1#2#3
   {
-    \use:x
+    \use:e
       {
         \bool_set_false:N \exp_not:N \l_@@_only_known_bool
         \bool_set_false:N \exp_not:N \l_@@_filtered_bool
@@ -3279,12 +3273,12 @@
   {
     \__kernel_tl_set:Nx \l_@@_relative_tl
       { \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl }
-    \use:x
+    \use:e
       {
         \cs_set_protected:Npn \@@_store_unused:w
-          ####1 \l_@@_relative_tl /
-          ####2 \l_@@_relative_tl /
-          ####3 \s_@@_stop
+          ##1 \l_@@_relative_tl /
+          ##2 \l_@@_relative_tl /
+          ##3 \s_@@_stop
       }
         {
           \tl_if_blank:nF {##1}
@@ -3300,7 +3294,7 @@
                 { = { \exp_not:o \l_keys_value_tl } }
             }
         }
-    \use:x
+    \use:e
       {
         \@@_store_unused:w \l_keys_path_str
           \l_@@_relative_tl / \l_@@_relative_tl /
@@ -3499,21 +3493,21 @@
       \tl_to_str:n { \@@_precompile:n }
       \exp_not:N \s_@@_stop
   }
-\use:x
+\use:e
   {
     \cs_new:Npn \exp_not:N \@@_show:w
-      ##1 \tl_to_str:n { \@@_precompile:n }
-      ##2 \tl_to_str:n { \@@_precompile:n }
-      ##3 \exp_not:N \s_@@_stop
+      #1 \tl_to_str:n { \@@_precompile:n }
+      #2 \tl_to_str:n { \@@_precompile:n }
+      #3 \exp_not:N \s_@@_stop
   }
   {
     \tl_if_blank:nTF {#2}
       {#1}
       { \@@_show:Nw #2 \s_@@_stop }
   }
-\use:x
+\use:e
   {
-    \cs_new:Npn \exp_not:N \@@_show:Nw ##1##2
+    \cs_new:Npn \exp_not:N \@@_show:Nw #1#2
       \c_right_brace_str \exp_not:N \s_@@_stop
   }
   {#2}
@@ -3575,6 +3569,38 @@
 \prop_gput:Nnn \g_msg_module_type_prop { keys } { }
 %    \end{macrocode}
 %
+% \subsection{Deprecated functions}
+%
+% \begin{macro}{.str_set_x:N, .str_set_x:c}
+% \begin{macro}{.str_gset_x:N, .str_gset_x:c}
+%    \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1
+  { \@@_variable_set:NnnN #1 { str } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1
+  { \@@_variable_set:cnnN {#1} { str } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1
+  { \@@_variable_set:NnnN #1 { str } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1
+  { \@@_variable_set:cnnN {#1} { str } { g } x }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{.tl_set_x:N, .tl_set_x:c}
+% \begin{macro}{.tl_gset_x:N, .tl_gset_x:c}
+%    \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
+  { \@@_variable_set:NnnN #1 { tl } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
+  { \@@_variable_set:cnnN {#1} { tl } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
+  { \@@_variable_set:NnnN #1 { tl } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
+  { \@@_variable_set:cnnN {#1} { tl } { g } x }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</package>
 %    \end{macrocode}
diff --git a/l3kernel/l3str.dtx b/l3kernel/l3str.dtx
index 3af078a83..7f79b1663 100644
--- a/l3kernel/l3str.dtx
+++ b/l3kernel/l3str.dtx
@@ -108,8 +108,8 @@
 %
 % \begin{function}[added = 2015-09-18, updated = 2018-07-28]
 %   {
-%     \str_const:Nn, \str_const:NV, \str_const:Nx,
-%     \str_const:cn, \str_const:cV, \str_const:cx
+%     \str_const:Nn, \str_const:NV, \str_const:Ne, \str_const:Nx,
+%     \str_const:cn, \str_const:cV, \str_const:ce, \str_const:cx
 %   }
 %   \begin{syntax}
 %     \cs{str_const:Nn} \meta{str~var} \Arg{token list}
@@ -178,10 +178,10 @@
 %
 % \begin{function}[added = 2015-09-18, updated = 2018-07-28]
 %   {
-%     \str_set:Nn,  \str_set:NV, \str_set:Nx,
-%     \str_set:cn,  \str_set:cV, \str_set:cx,
-%     \str_gset:Nn, \str_gset:NV, \str_gset:Nx,
-%     \str_gset:cn, \str_gset:cV, \str_gset:cx
+%     \str_set:Nn,  \str_set:NV, \str_set:Ne, \str_set:Nx,
+%     \str_set:cn,  \str_set:cV, \str_set:ce, \str_set:cx,
+%     \str_gset:Nn, \str_gset:NV, \str_gset:Ne, \str_gset:Nx,
+%     \str_gset:cn, \str_gset:cV, \str_gset:ce, \str_gset:cx
 %   }
 %   \begin{syntax}
 %     \cs{str_set:Nn} \meta{str var} \Arg{token list}
@@ -192,10 +192,10 @@
 %
 % \begin{function}[added = 2015-09-18, updated = 2018-07-28]
 %   {
-%     \str_put_left:Nn, \str_put_left:NV, \str_put_left:Nx,
-%     \str_put_left:cn, \str_put_left:cV, \str_put_left:cx,
-%     \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Nx,
-%     \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:cx
+%     \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne, \str_put_left:Nx,
+%     \str_put_left:cn, \str_put_left:cV, \str_put_left:ce, \str_put_left:cx,
+%     \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne, \str_gput_left:Nx,
+%     \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce, \str_gput_left:cx
 %   }
 %   \begin{syntax}
 %     \cs{str_put_left:Nn} \meta{str var} \Arg{token list}
@@ -207,10 +207,10 @@
 %
 % \begin{function}[added = 2015-09-18, updated = 2018-07-28]
 %   {
-%     \str_put_right:Nn, \str_put_right:NV, \str_put_right:Nx,
-%     \str_put_right:cn, \str_put_right:cV, \str_put_right:cx,
-%     \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Nx,
-%     \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:cx
+%     \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne, \str_put_right:Nx,
+%     \str_put_right:cn, \str_put_right:cV, \str_put_right:Ne, \str_put_right:cx,
+%     \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, \str_gput_right:Nx,
+%     \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce, \str_gput_right:cx
 %   }
 %   \begin{syntax}
 %     \cs{str_put_right:Nn} \meta{str var} \Arg{token list}
@@ -973,20 +973,20 @@
 %
 % \begin{macro}
 %   {
-%     \str_set:Nn, \str_set:NV, \str_set:Nx,
-%     \str_set:cn, \str_set:cV, \str_set:cx,
-%     \str_gset:Nn, \str_gset:NV, \str_gset:Nx,
-%     \str_gset:cn, \str_gset:cV, \str_gset:cx,
-%     \str_const:Nn, \str_const:NV, \str_const:Nx,
-%     \str_const:cn, \str_const:cV, \str_const:cx,
-%     \str_put_left:Nn, \str_put_left:NV, \str_put_left:Nx,
-%     \str_put_left:cn, \str_put_left:cV, \str_put_left:cx,
-%     \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Nx,
-%     \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:cx,
-%     \str_put_right:Nn, \str_put_right:NV, \str_put_right:Nx,
-%     \str_put_right:cn, \str_put_right:cV, \str_put_right:cx,
-%     \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Nx,
-%     \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:cx
+%     \str_set:Nn, \str_set:NV, \str_set:Ne, \str_set:Nx,
+%     \str_set:cn, \str_set:cV, \str_set:ce, \str_set:cx,
+%     \str_gset:Nn, \str_gset:NV, \str_gset:Ne, \str_gset:Nx,
+%     \str_gset:cn, \str_gset:cV, \str_gset:ce, \str_gset:cx,
+%     \str_const:Nn, \str_const:NV, \str_const:Ne, \str_const:Nx,
+%     \str_const:cn, \str_const:cV, \str_const:ce, \str_const:cx,
+%     \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne, \str_put_left:Nx,
+%     \str_put_left:cn, \str_put_left:cV, \str_put_left:ce, \str_put_left:cx,
+%     \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne, \str_gput_left:Nx,
+%     \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce, \str_gput_left:cx,
+%     \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne, \str_put_right:Nx,
+%     \str_put_right:cn, \str_put_right:cV, \str_put_right:ce, \str_put_right:cx,
+%     \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, \str_gput_right:Nx,
+%     \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce, \str_gput_right:cx
 %   }
 %   Simply convert the token list inputs to \meta{strings}.
 %    \begin{macrocode}
@@ -1000,7 +1000,8 @@
               \exp_not:c { tl_ #1 :Nx } ##1
                 { \exp_not:N \tl_to_str:n {##2} }
             }
-          \cs_generate_variant:cn { str_ #1 :Nn } { NV , Nx , cn , cV , cx }
+          \cs_generate_variant:cn { str_ #1 :Nn }
+            { NV , Ne , Nx , cn , cV , ce , cx }
           \@@_tmp:n
         }
     }
diff --git a/l3kernel/testfiles/m3keys001.lvt b/l3kernel/testfiles/m3keys001.lvt
index 934a21142..7eba8f939 100644
--- a/l3kernel/testfiles/m3keys001.lvt
+++ b/l3kernel/testfiles/m3keys001.lvt
@@ -88,7 +88,7 @@
     \keys_define:nn { module }
       {
         key-one .code:n    = { \TYPE { "#1" } } ,
-        key-one .default:x = \l_tmpa_tl
+        key-one .default:e = \l_tmpa_tl
       }
     \keys_set:nn { module }
       {
@@ -156,7 +156,7 @@
     \keys_define:nn { module }
       {
         key-one .tl_set:N  = \l_tmpa_tl ,
-        key-one .initial:x = \l_tmpb_tl
+        key-one .initial:e = \l_tmpb_tl
       }
     \tl_log:N \l_tmpa_tl
     \keys_set:nn { module }
diff --git a/l3kernel/testfiles/m3keys002.lvt b/l3kernel/testfiles/m3keys002.lvt
index bc5e43461..7f2c77ab3 100644
--- a/l3kernel/testfiles/m3keys002.lvt
+++ b/l3kernel/testfiles/m3keys002.lvt
@@ -471,17 +471,17 @@
     \str_log:N \g_myb_str
   }
 
-\TEST { .str_set_x:N }
+\TEST { .str_set_e:N }
   {
     \OMIT
       \str_set:Nn \l_tmpb_str { foo }
     \TIMO
     \keys_define:nn { module }
       {
-        key-one   .str_set_x:N  = \l_tmpa_str ,
-        key-two   .str_set_x:N  = \l_mya_str  ,
-        key-three .str_gset_x:N = \g_tmpa_str ,
-        key-four  .str_gset_x:N = \g_mya_str  ,
+        key-one   .str_set_e:N  = \l_tmpa_str ,
+        key-two   .str_set_e:N  = \l_mya_str  ,
+        key-three .str_gset_e:N = \g_tmpa_str ,
+        key-four  .str_gset_e:N = \g_mya_str  ,
       }
     \group_begin:
       \keys_set:nn { module }
@@ -502,17 +502,17 @@
     \str_log:N \g_mya_str
   }
 
-\TEST { .str_set_x:c }
+\TEST { .str_set_e:c }
   {
     \OMIT
       \str_set:Nn \l_tmpb_str { foo bar }
     \TIMO
     \keys_define:nn { module }
       {
-        key-one   .str_set_x:c  = { l_tmpa_str } ,
-        key-two   .str_set_x:c  = { l_myb_str }  ,
-        key-three .str_gset_x:c = { g_tmpa_str } ,
-        key-four  .str_gset_x:c = { g_myb_str }  ,
+        key-one   .str_set_e:c  = { l_tmpa_str } ,
+        key-two   .str_set_e:c  = { l_myb_str }  ,
+        key-three .str_gset_e:c = { g_tmpa_str } ,
+        key-four  .str_gset_e:c = { g_myb_str }  ,
       }
     \group_begin:
       \keys_set:nn { module }
@@ -595,17 +595,17 @@
     \tl_log:N \g_mya_tl
   }
 
-\TEST { .tl_set_x:N }
+\TEST { .tl_set_e:N }
   {
     \OMIT
       \tl_set:Nn \l_tmpb_tl { foo }
     \TIMO
     \keys_define:nn { module }
       {
-        key-one   .tl_set_x:N  = \l_tmpa_tl ,
-        key-two   .tl_set_x:N  = \l_mya_tl  ,
-        key-three .tl_gset_x:N = \g_tmpa_tl ,
-        key-four  .tl_gset_x:N = \g_mya_tl  ,
+        key-one   .tl_set_e:N  = \l_tmpa_tl ,
+        key-two   .tl_set_e:N  = \l_mya_tl  ,
+        key-three .tl_gset_e:N = \g_tmpa_tl ,
+        key-four  .tl_gset_e:N = \g_mya_tl  ,
       }
     \group_begin:
       \keys_set:nn { module }
@@ -626,17 +626,17 @@
     \tl_log:N \g_mya_tl
   }
 
-\TEST { .tl_set_x:c }
+\TEST { .tl_set_e:c }
   {
     \OMIT
       \tl_set:Nn \l_tmpb_tl { foo bar }
     \TIMO
     \keys_define:nn { module }
       {
-        key-one   .tl_set_x:c  = { l_tmpa_tl } ,
-        key-two   .tl_set_x:c  = { l_mya_tl }  ,
-        key-three .tl_gset_x:c = { g_tmpa_tl } ,
-        key-four  .tl_gset_x:c = { g_mya_tl }  ,
+        key-one   .tl_set_e:c  = { l_tmpa_tl } ,
+        key-two   .tl_set_e:c  = { l_mya_tl }  ,
+        key-three .tl_gset_e:c = { g_tmpa_tl } ,
+        key-four  .tl_gset_e:c = { g_mya_tl }  ,
       }
     \group_begin:
       \keys_set:nn { module }
diff --git a/l3kernel/testfiles/m3keys002.tlg b/l3kernel/testfiles/m3keys002.tlg
index 5460a9fa3..b3e14addc 100644
--- a/l3kernel/testfiles/m3keys002.tlg
+++ b/l3kernel/testfiles/m3keys002.tlg
@@ -348,7 +348,7 @@ Defining key module/key-four on line ...
 > \g_myb_str=bar.
 ============================================================
 ============================================================
-TEST 17: .str_set_x:N
+TEST 17: .str_set_e:N
 ============================================================
 Defining key module/key-one on line ...
 Defining key module/key-two on line ...
@@ -364,7 +364,7 @@ Defining key module/key-four on line ...
 > \g_mya_str=foo.
 ============================================================
 ============================================================
-TEST 18: .str_set_x:c
+TEST 18: .str_set_e:c
 ============================================================
 Defining key module/key-one on line ...
 Defining key module/key-two on line ...
@@ -414,7 +414,7 @@ Defining key module/key-four on line ...
 > \g_mya_tl=barbar.
 ============================================================
 ============================================================
-TEST 21: .tl_set_x:N
+TEST 21: .tl_set_e:N
 ============================================================
 Defining key module/key-one on line ...
 Defining key module/key-two on line ...
@@ -430,7 +430,7 @@ Defining key module/key-four on line ...
 > \g_mya_tl=foo.
 ============================================================
 ============================================================
-TEST 22: .tl_set_x:c
+TEST 22: .tl_set_e:c
 ============================================================
 Defining key module/key-one on line ...
 Defining key module/key-two on line ...
diff --git a/l3kernel/testfiles/m3keys008.lvt b/l3kernel/testfiles/m3keys008.lvt
index c012f88d1..e127f5024 100644
--- a/l3kernel/testfiles/m3keys008.lvt
+++ b/l3kernel/testfiles/m3keys008.lvt
@@ -32,7 +32,7 @@
           key-nine .skip_set:N = \l_tmpa_skip ,
           key-ten .str_set:N = \l_tmpa_str ,
           key-eleven .tl_set:N = \l_tmpa_tl ,
-          key-twelve .tl_set_x:N = \l_tmpb_tl
+          key-twelve .tl_set_e:N = \l_tmpb_tl
         }
     \TIMO
     \keys_precompile:nnN
diff --git a/l3kernel/testfiles/m3keys008.tlg b/l3kernel/testfiles/m3keys008.tlg
index fc76f6098..7a5f5ca1e 100644
--- a/l3kernel/testfiles/m3keys008.tlg
+++ b/l3kernel/testfiles/m3keys008.tlg
@@ -8,7 +8,7 @@ TEST 1: Key precompilation of settings
 {a,b}foo\cs_set:Npn \foo ##1##2{##1:##2}\dim_set:Nn \l_tmpa_dim
 {0.3pt}\fp_set:Nn \l_tmpa_fp {2*0.3}\int_set:Nn \l_tmpa_int
 {123}\muskip_set:Nn \l_tmpa_muskip {0.4mu}\skip_set:Nn \l_tmpa_skip
-{0.66pt}\str_set:Nn \l_tmpa_str {foo}\tl_set:Nn \l_tmpa_tl {footoo}\tl_set:Nx
+{0.66pt}\str_set:Nn \l_tmpa_str {foo}\tl_set:Nn \l_tmpa_tl {footoo}\tl_set:Ne
 \l_tmpb_tl {\l_tmpa_tl }.
 <recently read> }
 l. ...  }
diff --git a/l3kernel/testfiles/m3show002.luatex.tlg b/l3kernel/testfiles/m3show002.luatex.tlg
index 50d79103b..0f30b54e7 100644
--- a/l3kernel/testfiles/m3show002.luatex.tlg
+++ b/l3kernel/testfiles/m3show002.luatex.tlg
@@ -179,7 +179,7 @@ TEST 7: KEYS
 The key test/text has the properties:
 >  code  =>  \tl_set:Nn \l_tmpa_tl {#1}.
 The key test/expanded has the properties:
->  code  =>  \tl_gset:Nx \l_tmpb_tl {#1}.
+>  code  =>  \tl_gset:Ne \l_tmpb_tl {#1}.
 ============================================================
 ============================================================
 TEST 8: CHAR
diff --git a/l3kernel/testfiles/m3show002.lvt b/l3kernel/testfiles/m3show002.lvt
index 1ffe2f8f4..451682190 100644
--- a/l3kernel/testfiles/m3show002.lvt
+++ b/l3kernel/testfiles/m3show002.lvt
@@ -101,7 +101,7 @@
 \keys_define:nn { test }
   {
     text     .tl_set:c    = { l_tmpa_tl } ,
-    expanded .tl_gset_x:N = \l_tmpb_tl    ,
+    expanded .tl_gset_e:N = \l_tmpb_tl    ,
   }
 \TIMO
 
diff --git a/l3kernel/testfiles/m3show002.tlg b/l3kernel/testfiles/m3show002.tlg
index 3c217bc1d..bd50eacca 100644
--- a/l3kernel/testfiles/m3show002.tlg
+++ b/l3kernel/testfiles/m3show002.tlg
@@ -179,7 +179,7 @@ TEST 7: KEYS
 The key test/text has the properties:
 >  code  =>  \tl_set:Nn \l_tmpa_tl {#1}.
 The key test/expanded has the properties:
->  code  =>  \tl_gset:Nx \l_tmpb_tl {#1}.
+>  code  =>  \tl_gset:Ne \l_tmpb_tl {#1}.
 ============================================================
 ============================================================
 TEST 8: CHAR
diff --git a/l3kernel/testfiles/m3show003.lvt b/l3kernel/testfiles/m3show003.lvt
index 2708067ac..d5b7c5995 100644
--- a/l3kernel/testfiles/m3show003.lvt
+++ b/l3kernel/testfiles/m3show003.lvt
@@ -131,7 +131,7 @@
 \keys_define:nn { test }
   {
     text     .tl_set:c    = { l_tmpa_tl } ,
-    expanded .tl_gset_x:N = \l_tmpb_tl    ,
+    expanded .tl_gset_e:N = \l_tmpb_tl    ,
   }
 \TIMO
 
diff --git a/l3kernel/testfiles/m3show003.tlg b/l3kernel/testfiles/m3show003.tlg
index 8c77293f3..a07b038e7 100644
--- a/l3kernel/testfiles/m3show003.tlg
+++ b/l3kernel/testfiles/m3show003.tlg
@@ -158,7 +158,7 @@ TEST 9: keys
 The key test/text has the properties:
 >  code  =>  \tl_set:Nn \l_tmpa_tl {#1}.
 The key test/expanded has the properties:
->  code  =>  \tl_gset:Nx \l_tmpb_tl {#1}.
+>  code  =>  \tl_gset:Ne \l_tmpb_tl {#1}.
 ============================================================
 ============================================================
 TEST 10: muskip
diff --git a/l3packages/xtemplate/xtemplate.dtx b/l3packages/xtemplate/xtemplate.dtx
index 848329d30..edd7a5d1e 100644
--- a/l3packages/xtemplate/xtemplate.dtx
+++ b/l3packages/xtemplate/xtemplate.dtx
@@ -1665,7 +1665,7 @@
   }
 \cs_new_protected:Npn \@@_parse_vars_elt_key:nn #1#2
   {
-    \keys_define:nx { template / #1 }
+    \keys_define:ne { template / #1 }
       { \l_@@_key_name_tl #2 }
   }
 %    \end{macrocode}
@@ -1703,7 +1703,7 @@
   {
     \clist_set:No \l_@@_tmp_clist { \l_@@_keytype_arg_tl }
     \prop_put:Non \l_@@_vars_prop \l_@@_key_name_tl { }
-    \keys_define:nx { template / #1 } { \l_@@_key_name_tl .choice: }
+    \keys_define:ne { template / #1 } { \l_@@_key_name_tl .choice: }
     \keyval_parse:nnn
       { \@@_implement_choice_elt:n }
       { \@@_implement_choice_elt:nnn {#1} }
@@ -1790,7 +1790,7 @@
   }
 \cs_new_protected:Npn \@@_implement_choice_elt_aux:nnn #1#2#3
   {
-    \keys_define:nx { template / #1 }
+    \keys_define:ne { template / #1 }
       { \l_@@_key_name_tl / #2 .code:n = { \exp_not:n {#3} } }
     \tl_set:Nx \l_@@_tmp_tl
       { \l_@@_key_name_tl \c_space_tl #2 }





More information about the latex3-commits mailing list.