GNU bug report logs - #74999
[PATCH v2] Recommend `keymap-set' instead of `define-key' in emacs lisp intro

Previous Next

Package: emacs;

Reported by: Hong Xu <hong <at> topbug.net>

Date: Fri, 20 Dec 2024 21:45:02 UTC

Severity: wishlist

Tags: patch

Merged with 74983

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 74999 in the body.
You can then email your comments to 74999 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Fri, 20 Dec 2024 21:45:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Hong Xu <hong <at> topbug.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 20 Dec 2024 21:45:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: bug-gnu-emacs <at> gnu.org
Subject: [PATCH v2] Recommend `keymap-set' instead of `define-key' in emacs
 lisp intro
Date: Fri, 20 Dec 2024 13:42:29 -0800
* Since `define-key' is considered legacy and we encourage `keymap-set'
  now.
---
 doc/lispintro/emacs-lisp-intro.texi | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 49916235fbf9..ba671e60ffcf 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -17358,11 +17358,21 @@ Keymaps
 (global-set-key "\C-x\C-b" 'buffer-menu)
 @end smallexample
 
-Mode-specific keymaps are bound using the @code{define-key} function,
+Mode-specific keymaps are bound using the @code{keymap-set} function,
 which takes a specific keymap as an argument, as well as the key and
-the command.  For example, my @file{.emacs} file contains the
-following expression to bind the @code{texinfo-insert-@@group} command
-to @kbd{C-c C-c g}:
+the command.  For example, the following expression binds the
+@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
+
+@smallexample
+@group
+(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
+@end group
+@end smallexample
+
+While you are encouraged to use @code{keymap-set}, you likely would
+encounter @code{define-key} in various places. @code{define-key} is an
+older function to create keymaps, and is now considered legacy. The
+above key map can be rewritten in @code{define-key} as:
 
 @smallexample
 @group
@@ -17396,9 +17406,9 @@ Keymaps
 write a function to insert a word; but I prefer key strokes consistent
 with other Texinfo mode key bindings.)
 
-You will see numerous @code{define-key} expressions in
-@file{loaddefs.el} as well as in the various mode libraries, such as
-@file{cc-mode.el} and @file{lisp-mode.el}.
+You will see numerous @code{keymap-set} and @code{define-key}
+expressions in @file{loaddefs.el} as well as in the various mode
+libraries, such as @file{cc-mode.el} and @file{lisp-mode.el}.
 
 @xref{Key Bindings, , Customizing Key Bindings, emacs, The GNU Emacs
 Manual}, and @ref{Keymaps, , Keymaps, elisp, The GNU Emacs Lisp
-- 
2.47.1





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Sat, 21 Dec 2024 07:20:02 GMT) Full text and rfc822 format available.

Message #8 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v2] Recommend `keymap-set' instead of
 `define-key' in emacs lisp intro
Date: Sat, 21 Dec 2024 09:19:28 +0200
> From: Hong Xu <hong <at> topbug.net>
> Date: Fri, 20 Dec 2024 13:42:29 -0800
> 
> -Mode-specific keymaps are bound using the @code{define-key} function,
> +Mode-specific keymaps are bound using the @code{keymap-set} function,
>  which takes a specific keymap as an argument, as well as the key and
> -the command.  For example, my @file{.emacs} file contains the
> -following expression to bind the @code{texinfo-insert-@@group} command
> -to @kbd{C-c C-c g}:
> +the command.  For example, the following expression binds the
> +@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
> +
> +@smallexample
> +@group
> +(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
> +@end group
> +@end smallexample
> +
> +While you are encouraged to use @code{keymap-set}, you likely would
> +encounter @code{define-key} in various places. @code{define-key} is an
> +older function to create keymaps, and is now considered legacy.

This should say that historically, Emacs used 'define-key', and
therefore you are likely to see 'define-key' in various places etc.
In addition "older function" is not really accurate: 'keymap-set'
calls 'define-key' internally, so 'define-key' will not disappear from
Emacs any time soon.  We just prefer using 'keymap-set' in Lisp
programs because it is higher-level.  So instead of saying "older
function", I think we should say "more low-level function".

Also, please make sure to leave two spaces between sentences, per our
conventions.

>                                                             The
> +above key map can be rewritten in @code{define-key} as:

Not "key map", but "key binding".  The example doesn't show a complete
key map, it only shows a single binding within a key map.  Since this
is an introductory manual, we must be very accurate and clear in our
text, to avoid confusing newcomers to Lisp, who are probably confused
already to begin with...

Thanks.




Merged 74983 74999. Request was from Eli Zaretskii <eliz <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 21 Dec 2024 07:21:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Sat, 21 Dec 2024 08:07:02 GMT) Full text and rfc822 format available.

Message #13 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: 74999 <at> debbugs.gnu.org
Subject: [PATCH v3] Recommend `keymap-set' instead of `define-key' in emacs
 lisp intro
Date: Sat, 21 Dec 2024 00:03:54 -0800
* Since `define-key' is considered legacy and we encourage `keymap-set'
  now.
---
 doc/lispintro/emacs-lisp-intro.texi | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 49916235fbf9..b3b4141a3c5f 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -17358,11 +17358,22 @@ Keymaps
 (global-set-key "\C-x\C-b" 'buffer-menu)
 @end smallexample
 
-Mode-specific keymaps are bound using the @code{define-key} function,
+Mode-specific keymaps are bound using the @code{keymap-set} function,
 which takes a specific keymap as an argument, as well as the key and
-the command.  For example, my @file{.emacs} file contains the
-following expression to bind the @code{texinfo-insert-@@group} command
-to @kbd{C-c C-c g}:
+the command.  For example, the following expression binds the
+@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
+
+@smallexample
+@group
+(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
+@end group
+@end smallexample
+
+While you are encouraged to use @code{keymap-set}, you likely would
+encounter @code{define-key} in various places.  Historically, keymaps
+are bound using a lower-level function, @code{define-key}, which
+is now considered legacy.  The above key binding can be rewritten using
+@code{define-key} as:
 
 @smallexample
 @group
@@ -17396,9 +17407,9 @@ Keymaps
 write a function to insert a word; but I prefer key strokes consistent
 with other Texinfo mode key bindings.)
 
-You will see numerous @code{define-key} expressions in
-@file{loaddefs.el} as well as in the various mode libraries, such as
-@file{cc-mode.el} and @file{lisp-mode.el}.
+You will see numerous @code{keymap-set} and @code{define-key}
+expressions in @file{loaddefs.el} as well as in the various mode
+libraries, such as @file{cc-mode.el} and @file{lisp-mode.el}.
 
 @xref{Key Bindings, , Customizing Key Bindings, emacs, The GNU Emacs
 Manual}, and @ref{Keymaps, , Keymaps, elisp, The GNU Emacs Lisp
-- 
2.47.1





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Sat, 21 Dec 2024 08:08:02 GMT) Full text and rfc822 format available.

Message #16 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v2] Recommend `keymap-set' instead of
 `define-key' in emacs lisp intro
Date: Sat, 21 Dec 2024 00:06:53 -0800
On 2024-12-20 Fri 23:19 GMT-08, Eli Zaretskii <eliz <at> gnu.org> wrote:

>> From: Hong Xu <hong <at> topbug.net>
>> Date: Fri, 20 Dec 2024 13:42:29 -0800
>> 
>> -Mode-specific keymaps are bound using the @code{define-key} function,
>> +Mode-specific keymaps are bound using the @code{keymap-set} function,
>>  which takes a specific keymap as an argument, as well as the key and
>> -the command.  For example, my @file{.emacs} file contains the
>> -following expression to bind the @code{texinfo-insert-@@group} command
>> -to @kbd{C-c C-c g}:
>> +the command.  For example, the following expression binds the
>> +@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
>> +
>> +@smallexample
>> +@group
>> +(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
>> +@end group
>> +@end smallexample
>> +
>> +While you are encouraged to use @code{keymap-set}, you likely would
>> +encounter @code{define-key} in various places. @code{define-key} is an
>> +older function to create keymaps, and is now considered legacy.
>
> This should say that historically, Emacs used 'define-key', and
> therefore you are likely to see 'define-key' in various places etc.
> In addition "older function" is not really accurate: 'keymap-set'
> calls 'define-key' internally, so 'define-key' will not disappear from
> Emacs any time soon.  We just prefer using 'keymap-set' in Lisp
> programs because it is higher-level.  So instead of saying "older
> function", I think we should say "more low-level function".
>
> Also, please make sure to leave two spaces between sentences, per our
> conventions.
>
>>                                                             The
>> +above key map can be rewritten in @code{define-key} as:
>
> Not "key map", but "key binding".  The example doesn't show a complete
> key map, it only shows a single binding within a key map.  Since this
> is an introductory manual, we must be very accurate and clear in our
> text, to avoid confusing newcomers to Lisp, who are probably confused
> already to begin with...
>

I agree, please see my follow-up patch.

-- 
Thanks,
Hong




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Mon, 23 Dec 2024 20:43:02 GMT) Full text and rfc822 format available.

Message #19 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: 74999 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: [PATCH v3] Recommend `keymap-set' instead of `define-key' in
 emacs lisp intro
Date: Mon, 23 Dec 2024 12:42:34 -0800
References: <86y1098pvj.fsf <at> gnu.org> <20241221080552.259664-1-hong <at> topbug.net>
User-Agent: mu4e 1.12.8; emacs 29.4
Date: Mon, 23 Dec 2024 12:42:29 -0800

On 2024-12-21 Sat 00:03 GMT-08, Hong Xu <hong <at> topbug.net> wrote:

> * Since `define-key' is considered legacy and we encourage `keymap-set'
>   now.
> ---
>  doc/lispintro/emacs-lisp-intro.texi | 25 ++++++++++++++++++-------
>  1 file changed, 18 insertions(+), 7 deletions(-)
>
> <...>

In case you missed this, are you still interested in reviewing this patch?


-- 
Hong




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Tue, 24 Dec 2024 03:30:02 GMT) Full text and rfc822 format available.

Message #22 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: [PATCH v3] Recommend `keymap-set' instead of `define-key' in
 emacs lisp intro
Date: Tue, 24 Dec 2024 05:27:29 +0200
> From: Hong Xu <hong <at> topbug.net>
> Date: Mon, 23 Dec 2024 12:42:34 -0800
> 
> References: <86y1098pvj.fsf <at> gnu.org> <20241221080552.259664-1-hong <at> topbug.net>
> User-Agent: mu4e 1.12.8; emacs 29.4
> Date: Mon, 23 Dec 2024 12:42:29 -0800
> 
> On 2024-12-21 Sat 00:03 GMT-08, Hong Xu <hong <at> topbug.net> wrote:
> 
> > * Since `define-key' is considered legacy and we encourage `keymap-set'
> >   now.
> > ---
> >  doc/lispintro/emacs-lisp-intro.texi | 25 ++++++++++++++++++-------
> >  1 file changed, 18 insertions(+), 7 deletions(-)
> >
> > <...>
> 
> In case you missed this, are you still interested in reviewing this patch?

I didn't miss it.  It's in my queue.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Thu, 26 Dec 2024 08:21:01 GMT) Full text and rfc822 format available.

Message #25 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v3] Recommend `keymap-set' instead of
 `define-key' in emacs lisp intro
Date: Thu, 26 Dec 2024 10:20:11 +0200
> From: Hong Xu <hong <at> topbug.net>
> Date: Sat, 21 Dec 2024 00:03:54 -0800
> 
> * Since `define-key' is considered legacy and we encourage `keymap-set'
>   now.
> ---
>  doc/lispintro/emacs-lisp-intro.texi | 25 ++++++++++++++++++-------
>  1 file changed, 18 insertions(+), 7 deletions(-)

Thanks.  I tried to install this, but the git-commit hook rejected the
commit because Subject line is too long:

  Line longer than 78 characters in commit message
  Commit aborted; please see the file CONTRIBUTE

Please format the patch using "git format-patch", and please commit
the patch locally before you do so (assuming you have the hooks in
your local clone), to make sure these problems are corrected before
you send the patch here.

More generally, global-set-key, discussed earlier in this section, is
also obsolete, and we nowadays prefer keymap-global-set instead.  So,
if we want to modernize this part of the Emacs Lisp Intro manual, I
think we should replace all the key-binding examples and the
surrounding text in the manual to use the new keymap-* functions.  It
makes little sense to replace only define-key and leave the rest as
they were.

Would you like to submit a patch that takes care of these issues in a
more thorough manner?

> +While you are encouraged to use @code{keymap-set}, you likely would
> +encounter @code{define-key} in various places.  Historically, keymaps
> +are bound using a lower-level function, @code{define-key}, which
> +is now considered legacy.

These two sentences should be in reverse order: first tell that
historically we used define-key, then say that the reader is
encouraged to use keymap-set.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Thu, 26 Dec 2024 21:49:01 GMT) Full text and rfc822 format available.

Message #28 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: 74999 <at> debbugs.gnu.org
Subject: [PATCH v4] Use `keymap*-set' over `global-set-key'/`define-key' in
 elisp intro
Date: Thu, 26 Dec 2024 13:46:39 -0800
* doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
`global-set-key' and `define-key' are considered legacy, we encourage
`keymap-global-set' and `keymap-set' now.
---
 doc/lispintro/emacs-lisp-intro.texi | 119 +++++++++++++++++++---------
 1 file changed, 81 insertions(+), 38 deletions(-)

diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 49916235fbf9..daffd6386133 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -13810,7 +13810,7 @@ Whitespace Bug
 If you wish, you can also install this key binding by evaluating it:
 
 @smallexample
-(global-set-key "\C-c=" '@value{COUNT-WORDS})
+(keymap-global-set "C-c =" '@value{COUNT-WORDS})
 @end smallexample
 
 To conduct the first test, set mark and point to the beginning and end
@@ -14762,7 +14762,7 @@ count-words-in-defun
 Let's reuse @kbd{C-c =} as a convenient key binding:
 
 @smallexample
-(global-set-key "\C-c=" 'count-words-defun)
+(keymap-global-set "C-c =" 'count-words-defun)
 @end smallexample
 
 Now we can try out @code{count-words-defun}: install both
@@ -17229,7 +17229,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Compare windows
-(global-set-key "\C-cw" 'compare-windows)
+(keymap-global-set "C-c w" 'compare-windows)
 @end group
 @end smallexample
 
@@ -17242,20 +17242,18 @@ Key Bindings
 This also shows how to set a key globally, for all modes.
 
 @cindex Setting a key globally
-@cindex Global set key
+@cindex Keymap global set
 @cindex Key setting globally
-@findex global-set-key
-The command is @code{global-set-key}.  It is followed by the
-key binding.  In a @file{.emacs} file, the keybinding is written as
-shown: @code{\C-c} stands for Control-C, which means to press the
-control key and the @kbd{c} key at the same time.  The @code{w} means
-to press the @kbd{w} key.  The key binding is surrounded by double
-quotation marks.  In documentation, you would write this as
-@w{@kbd{C-c w}}.  (If you were binding a @key{META} key, such as
-@kbd{M-c}, rather than a @key{CTRL} key, you would write
-@w{@code{\M-c}} in your @file{.emacs} file.  @xref{Init Rebinding, ,
-Rebinding Keys in Your Init File, emacs, The GNU Emacs Manual}, for
-details.)
+@findex keymap-global-set
+The key setting command is @code{keymap-global-set}.  It is followed by
+the key binding.  In a @file{.emacs} file, the keybinding is written as
+shown: @code{C-c} stands for Control-C, which means to press the control
+key and the @kbd{c} key at the same time.  The @code{w} means to press
+the @kbd{w} key.  The key binding is surrounded by double quotation
+marks.  (If you were binding a @key{META} key, rather than a @key{CTRL}
+key, you would write @w{@code{M-c}} in your @file{.emacs} file.
+@xref{Init Rebinding, , Rebinding Keys in Your Init File, emacs, The GNU
+Emacs Manual}, for details.)
 
 The command invoked by the keys is @code{compare-windows}.  Note that
 @code{compare-windows} is preceded by a single-quote; otherwise, Emacs
@@ -17284,7 +17282,7 @@ Key Bindings
 @group
 ;;; Key binding for 'occur'
 ; I use occur a lot, so let's bind it to a key:
-(global-set-key "\C-co" 'occur)
+(keymap-global-set "C-c o" 'occur)
 @end group
 @end smallexample
 
@@ -17296,7 +17294,7 @@ Key Bindings
 Matching lines are shown in a buffer called @file{*Occur*}.
 That buffer serves as a menu to jump to occurrences.
 
-@findex global-unset-key
+@findex keymap-global-unset
 @cindex Unbinding key
 @cindex Key unbinding
 @need 1250
@@ -17306,7 +17304,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Unbind 'C-x f'
-(global-unset-key "\C-xf")
+(keymap-global-unset "C-x f")
 @end group
 @end smallexample
 
@@ -17324,7 +17322,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Rebind 'C-x C-b' for 'buffer-menu'
-(global-set-key "\C-x\C-b" 'buffer-menu)
+(keymap-global-set "C-x C-b" 'buffer-menu)
 @end group
 @end smallexample
 
@@ -17336,33 +17334,79 @@ Key Bindings
 command, which not only lists the buffers,
 but moves point into that window.
 
+@subsection Legacy Global Key Binding Commands
+
+@findex global-set-key
+@cindex Global set key
+Historically, keys are bound globally using a lower-level function,
+@code{global-set-key}, which is now considered legacy.  While you are
+encouraged to use @code{keymap-global-set}, you likely would encounter
+@code{global-set-key} in various places.  The first example can be
+rewritten using @code{global-set-key} as:
+
+@smallexample
+@group
+(global-set-key "\C-cw" 'compare-windows)
+@end group
+@end smallexample
+
+It is very similar to @code{keymap-global-set}, with the keybinding
+following a slightly different format.  Control-C is represented by
+@code{\C-c}, instead of @code{C-c}.  There is no space between key
+strokes, like @code{\C-c} and @code{w} in this example.  Despite the
+difference, in documentation, this is still written as @w{@kbd{C-c w}}
+for readability.
+
+@findex global-unset-key
+Historically, keys are unbound globally using a lower-function,
+@code{global-unset-key}, which is now considered legacy.  Its key
+binding format follows that of @code{global-set-key}.  The above key
+unbinding example can be rewritten as:
+@smallexample
+@group
+;;; Unbind 'C-x f'
+(global-unset-key "\C-xf")
+@end group
+@end smallexample
+
 @node Keymaps
 @section Keymaps
 @cindex Keymaps
 @cindex Rebinding keys
 
 Emacs uses @dfn{keymaps} to record which keys call which commands.
-When you use @code{global-set-key} to set the key binding for a single
-command in all parts of Emacs, you are specifying the key binding in
-@code{current-global-map}.
+When you use @code{keymap-global-set} to set the key binding for a
+single command in all parts of Emacs, you are specifying the key binding
+in @code{current-global-map}.
 
 Specific modes, such as C mode or Text mode, have their own keymaps;
 the mode-specific keymaps override the global map that is shared by
 all buffers.
 
-The @code{global-set-key} function binds, or rebinds, the global
+The @code{keymap-global-set} function binds, or rebinds, the global
 keymap.  For example, the following binds the key @kbd{C-x C-b} to the
 function @code{buffer-menu}:
 
 @smallexample
-(global-set-key "\C-x\C-b" 'buffer-menu)
+(keymap-global-set "C-x C-b" 'buffer-menu)
 @end smallexample
 
-Mode-specific keymaps are bound using the @code{define-key} function,
+Mode-specific keymaps are bound using the @code{keymap-set} function,
 which takes a specific keymap as an argument, as well as the key and
-the command.  For example, my @file{.emacs} file contains the
-following expression to bind the @code{texinfo-insert-@@group} command
-to @kbd{C-c C-c g}:
+the command.  For example, the following expression binds the
+@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
+
+@smallexample
+@group
+(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
+@end group
+@end smallexample
+
+Historically, keymaps are bound using a lower-level function,
+@code{define-key}, which is now considered legacy.  While you are
+encouraged to use @code{keymap-set}, you likely would encounter
+@code{define-key} in various places.  The above key binding can be
+rewritten using @code{define-key} as:
 
 @smallexample
 @group
@@ -17396,9 +17440,9 @@ Keymaps
 write a function to insert a word; but I prefer key strokes consistent
 with other Texinfo mode key bindings.)
 
-You will see numerous @code{define-key} expressions in
-@file{loaddefs.el} as well as in the various mode libraries, such as
-@file{cc-mode.el} and @file{lisp-mode.el}.
+You will see numerous @code{keymap-set} and @code{define-key}
+expressions in @file{loaddefs.el} as well as in the various mode
+libraries, such as @file{cc-mode.el} and @file{lisp-mode.el}.
 
 @xref{Key Bindings, , Customizing Key Bindings, emacs, The GNU Emacs
 Manual}, and @ref{Keymaps, , Keymaps, elisp, The GNU Emacs Lisp
@@ -17440,13 +17484,12 @@ Loading Files
 
 @need 1250
 To replace the key binding for the default
-@code{split-window-vertically}, you must also unset that key and bind
-the keys to @code{split-window-quietly}, like this:
+@code{split-window-vertically}, you must bind the keys to
+@code{split-window-quietly}, like this:
 
 @smallexample
 @group
-(global-unset-key "\C-x2")
-(global-set-key "\C-x2" 'split-window-quietly)
+(keymap-global-set "C-x 2" 'split-window-quietly)
 @end group
 @end smallexample
 
@@ -17608,7 +17651,7 @@ Simple Extension
 this:
 
 @smallexample
-(global-set-key [f6] 'line-to-top-of-window)
+(keymap-global-set "<f6>" 'line-to-top-of-window)
 @end smallexample
 
 For more information, see @ref{Init Rebinding, , Rebinding Keys in
@@ -18791,7 +18834,7 @@ the-the
 
 @group
 ;; Bind 'the-the' to  C-c \
-(global-set-key "\C-c\\" 'the-the)
+(keymap-global-set "C-c \\" 'the-the)
 @end group
 @end smallexample
 
-- 
2.47.1





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Thu, 26 Dec 2024 21:59:01 GMT) Full text and rfc822 format available.

Message #31 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v3] Recommend `keymap-set' instead of
 `define-key' in emacs lisp intro
Date: Thu, 26 Dec 2024 13:58:33 -0800
Thanks for reviewing. Please see my followup patch.

On 2024-12-26 Thu 00:20 GMT-08, Eli Zaretskii <eliz <at> gnu.org> wrote:

>> From: Hong Xu <hong <at> topbug.net>
>> Date: Sat, 21 Dec 2024 00:03:54 -0800
>> 
>> * Since `define-key' is considered legacy and we encourage `keymap-set'
>>   now.
>> ---
>>  doc/lispintro/emacs-lisp-intro.texi | 25 ++++++++++++++++++-------
>>  1 file changed, 18 insertions(+), 7 deletions(-)
>
> Thanks.  I tried to install this, but the git-commit hook rejected the
> commit because Subject line is too long:
>
>   Line longer than 78 characters in commit message
>   Commit aborted; please see the file CONTRIBUTE
>
> Please format the patch using "git format-patch", and please commit
> the patch locally before you do so (assuming you have the hooks in
> your local clone), to make sure these problems are corrected before
> you send the patch here.

I could apply these patches without line length complaints, and the
hooks were in effect. An inspection into the patch file also shows no
line is longer than 78 characters. Git is supposed to abandon the
"[Patch vN]" prefix when applying the patch.

> More generally, global-set-key, discussed earlier in this section, is
> also obsolete, and we nowadays prefer keymap-global-set instead.  So,
> if we want to modernize this part of the Emacs Lisp Intro manual, I
> think we should replace all the key-binding examples and the
> surrounding text in the manual to use the new keymap-* functions.  It
> makes little sense to replace only define-key and leave the rest as
> they were.
>
> Would you like to submit a patch that takes care of these issues in a
> more thorough manner?

Addressed.
>
>> +While you are encouraged to use @code{keymap-set}, you likely would
>> +encounter @code{define-key} in various places.  Historically, keymaps
>> +are bound using a lower-level function, @code{define-key}, which
>> +is now considered legacy.
>
> These two sentences should be in reverse order: first tell that
> historically we used define-key, then say that the reader is
> encouraged to use keymap-set.
>

Addressed.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Thu, 26 Dec 2024 22:06:01 GMT) Full text and rfc822 format available.

Message #34 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: 74999 <at> debbugs.gnu.org
Subject: Re: [PATCH v4] Use `keymap*-set' over `global-set-key'/`define-key'
 in elisp intro
Date: Thu, 26 Dec 2024 14:05:01 -0800
On 2024-12-26 Thu 13:46 GMT-08, Hong Xu <hong <at> topbug.net> wrote:

> * doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
> `global-set-key' and `define-key' are considered legacy, we encourage
> `keymap-global-set' and `keymap-set' now.
> ---
> <...>
>
> +@findex global-unset-key
> +Historically, keys are unbound globally using a lower-function,
> +@code{global-unset-key}, which is now considered legacy.  Its key
> +binding format follows that of @code{global-set-key}.  The above key
> +unbinding example can be rewritten as:
> +@smallexample
> +@group
> +;;; Unbind 'C-x f'
> +(global-unset-key "\C-xf")
> +@end group
> +@end smallexample
> +

I'm thinking about dropping this paragraph, because `global-unset-key'
isn't commonly seen, and there's no point to over fill an introduction
with less used functions.  Please advice.

-- 
Hong




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Fri, 27 Dec 2024 07:38:02 GMT) Full text and rfc822 format available.

Message #37 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v3] Recommend `keymap-set' instead of
 `define-key' in emacs lisp intro
Date: Fri, 27 Dec 2024 09:37:28 +0200
> From: Hong Xu <hong <at> topbug.net>
> Cc: 74999 <at> debbugs.gnu.org
> Date: Thu, 26 Dec 2024 13:58:33 -0800
> 
> > Thanks.  I tried to install this, but the git-commit hook rejected the
> > commit because Subject line is too long:
> >
> >   Line longer than 78 characters in commit message
> >   Commit aborted; please see the file CONTRIBUTE
> >
> > Please format the patch using "git format-patch", and please commit
> > the patch locally before you do so (assuming you have the hooks in
> > your local clone), to make sure these problems are corrected before
> > you send the patch here.
> 
> I could apply these patches without line length complaints, and the
> hooks were in effect. An inspection into the patch file also shows no
> line is longer than 78 characters. Git is supposed to abandon the
> "[Patch vN]" prefix when applying the patch.

I'm guessing the problem on my side is because you sent the patch as a
complete email message, where the heading line is presumed to be taken
from Subject.  To avoid these problems, please in the future send the
patches as attachments, to allow me to pass to "git am" only the
actual patch, not any of the other email headers.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Fri, 27 Dec 2024 07:45:01 GMT) Full text and rfc822 format available.

Message #40 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v4] Use `keymap*-set' over
 `global-set-key'/`define-key' in elisp intro
Date: Fri, 27 Dec 2024 09:44:39 +0200
> From: Hong Xu <hong <at> topbug.net>
> Date: Thu, 26 Dec 2024 14:05:01 -0800
> 
> On 2024-12-26 Thu 13:46 GMT-08, Hong Xu <hong <at> topbug.net> wrote:
> 
> > * doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
> > `global-set-key' and `define-key' are considered legacy, we encourage
> > `keymap-global-set' and `keymap-set' now.
> > ---
> > <...>
> >
> > +@findex global-unset-key
> > +Historically, keys are unbound globally using a lower-function,
> > +@code{global-unset-key}, which is now considered legacy.  Its key
> > +binding format follows that of @code{global-set-key}.  The above key
> > +unbinding example can be rewritten as:
> > +@smallexample
> > +@group
> > +;;; Unbind 'C-x f'
> > +(global-unset-key "\C-xf")
> > +@end group
> > +@end smallexample
> > +
> 
> I'm thinking about dropping this paragraph, because `global-unset-key'
> isn't commonly seen, and there's no point to over fill an introduction
> with less used functions.  Please advice.

I wouldn't remove it.  This manual is an extended tutorial of the
Emacs Lisp language, so it doesn't necessarily include only the
frequently-used functions.  We must trust the author of this manual,
who was a great expert in teaching Emacs Lisp, that his decision to
include this function had a good reason.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Sat, 28 Dec 2024 12:18:01 GMT) Full text and rfc822 format available.

Message #43 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v4] Use `keymap*-set' over
 `global-set-key'/`define-key' in elisp intro
Date: Sat, 28 Dec 2024 14:17:28 +0200
> From: Hong Xu <hong <at> topbug.net>
> Date: Thu, 26 Dec 2024 13:46:39 -0800
> 
> * doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
> `global-set-key' and `define-key' are considered legacy, we encourage
> `keymap-global-set' and `keymap-set' now.
> ---
>  doc/lispintro/emacs-lisp-intro.texi | 119 +++++++++++++++++++---------
>  1 file changed, 81 insertions(+), 38 deletions(-)

Thanks, I have a few minor comments:

>  @cindex Setting a key globally
> -@cindex Global set key
> +@cindex Keymap global set
>  @cindex Key setting globally
> -@findex global-set-key

Please add index entries for the new APIs, but do not remove the index
entries for old ones.  Readers could still need to look up the old
interfaces via index search.

> -@findex global-unset-key
> +@findex keymap-global-unset

Same here.

> +@subsection Legacy Global Key Binding Commands
> +
> +@findex global-set-key
> +@cindex Global set key
> +Historically, keys are bound globally using a lower-level function,
> +@code{global-set-key}, which is now considered legacy.  While you are
> +encouraged to use @code{keymap-global-set}, you likely would encounter
> +@code{global-set-key} in various places.  The first example can be
> +rewritten using @code{global-set-key} as:
> +
> +@smallexample
> +@group
> +(global-set-key "\C-cw" 'compare-windows)
> +@end group
> +@end smallexample

The text says "first example", but which example is that?  There are
no examples in this subsection.

> +Historically, keys are unbound globally using a lower-function,
> +@code{global-unset-key}, which is now considered legacy.  Its key
> +binding format follows that of @code{global-set-key}.  The above key
> +unbinding example can be rewritten as:

Same here: "the above key unbinding example" refers to an example in a
different subsection.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#74999; Package emacs. (Sat, 28 Dec 2024 19:57:01 GMT) Full text and rfc822 format available.

Message #46 received at 74999 <at> debbugs.gnu.org (full text, mbox):

From: Hong Xu <hong <at> topbug.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 74999 <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v4] Use `keymap*-set' over
 `global-set-key'/`define-key' in elisp intro
Date: Sat, 28 Dec 2024 11:56:05 -0800
[Message part 1 (text/plain, inline)]
On 2024-12-28 Sat 04:17 GMT-08, Eli Zaretskii <eliz <at> gnu.org> wrote:

>> From: Hong Xu <hong <at> topbug.net>
>> Date: Thu, 26 Dec 2024 13:46:39 -0800
>> 
>> * doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
>> `global-set-key' and `define-key' are considered legacy, we encourage
>> `keymap-global-set' and `keymap-set' now.
>> ---
>>  doc/lispintro/emacs-lisp-intro.texi | 119 +++++++++++++++++++---------
>>  1 file changed, 81 insertions(+), 38 deletions(-)
>
> Thanks, I have a few minor comments:
>
>>  @cindex Setting a key globally
>> -@cindex Global set key
>> +@cindex Keymap global set
>>  @cindex Key setting globally
>> -@findex global-set-key
>
> Please add index entries for the new APIs, but do not remove the index
> entries for old ones.  Readers could still need to look up the old
> interfaces via index search.
>
>> -@findex global-unset-key
>> +@findex keymap-global-unset
>
> Same here.

I moved these two indices to the legacy subsection, which is now the
place that describes these functions.

>
>> +@subsection Legacy Global Key Binding Commands
>> +
>> +@findex global-set-key
>> +@cindex Global set key
>> +Historically, keys are bound globally using a lower-level function,
>> +@code{global-set-key}, which is now considered legacy.  While you are
>> +encouraged to use @code{keymap-global-set}, you likely would encounter
>> +@code{global-set-key} in various places.  The first example can be
>> +rewritten using @code{global-set-key} as:
>> +
>> +@smallexample
>> +@group
>> +(global-set-key "\C-cw" 'compare-windows)
>> +@end group
>> +@end smallexample
>
> The text says "first example", but which example is that?  There are
> no examples in this subsection.
>
>> +Historically, keys are unbound globally using a lower-function,
>> +@code{global-unset-key}, which is now considered legacy.  Its key
>> +binding format follows that of @code{global-set-key}.  The above key
>> +unbinding example can be rewritten as:
>
> Same here: "the above key unbinding example" refers to an example in a
> different subsection.

The updated patch now adds an "in this section" qualifier. Please see
the attachment.

[v5-0001-Use-keymap-set-over-global-set-key-define-key-in-.patch (text/x-patch, inline)]
From b25a4cd7fedaec382b0d486493a1208276e618de Mon Sep 17 00:00:00 2001
From: Hong Xu <hong <at> topbug.net>
Date: Thu, 19 Dec 2024 14:33:35 -0800
Subject: [PATCH v5] Use `keymap*-set' over `global-set-key'/`define-key' in
 elisp intro

* doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
`global-set-key' and `define-key' are considered legacy, we encourage
`keymap-global-set' and `keymap-set' now.
---
 doc/lispintro/emacs-lisp-intro.texi | 120 +++++++++++++++++++---------
 1 file changed, 82 insertions(+), 38 deletions(-)

diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 49916235fbf9..863e06346edc 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -13810,7 +13810,7 @@ Whitespace Bug
 If you wish, you can also install this key binding by evaluating it:
 
 @smallexample
-(global-set-key "\C-c=" '@value{COUNT-WORDS})
+(keymap-global-set "C-c =" '@value{COUNT-WORDS})
 @end smallexample
 
 To conduct the first test, set mark and point to the beginning and end
@@ -14762,7 +14762,7 @@ count-words-in-defun
 Let's reuse @kbd{C-c =} as a convenient key binding:
 
 @smallexample
-(global-set-key "\C-c=" 'count-words-defun)
+(keymap-global-set "C-c =" 'count-words-defun)
 @end smallexample
 
 Now we can try out @code{count-words-defun}: install both
@@ -17229,7 +17229,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Compare windows
-(global-set-key "\C-cw" 'compare-windows)
+(keymap-global-set "C-c w" 'compare-windows)
 @end group
 @end smallexample
 
@@ -17242,20 +17242,18 @@ Key Bindings
 This also shows how to set a key globally, for all modes.
 
 @cindex Setting a key globally
-@cindex Global set key
+@cindex Keymap global set
 @cindex Key setting globally
-@findex global-set-key
-The command is @code{global-set-key}.  It is followed by the
-key binding.  In a @file{.emacs} file, the keybinding is written as
-shown: @code{\C-c} stands for Control-C, which means to press the
-control key and the @kbd{c} key at the same time.  The @code{w} means
-to press the @kbd{w} key.  The key binding is surrounded by double
-quotation marks.  In documentation, you would write this as
-@w{@kbd{C-c w}}.  (If you were binding a @key{META} key, such as
-@kbd{M-c}, rather than a @key{CTRL} key, you would write
-@w{@code{\M-c}} in your @file{.emacs} file.  @xref{Init Rebinding, ,
-Rebinding Keys in Your Init File, emacs, The GNU Emacs Manual}, for
-details.)
+@findex keymap-global-set
+The key setting command is @code{keymap-global-set}.  It is followed by
+the key binding.  In a @file{.emacs} file, the keybinding is written as
+shown: @code{C-c} stands for Control-C, which means to press the control
+key and the @kbd{c} key at the same time.  The @code{w} means to press
+the @kbd{w} key.  The key binding is surrounded by double quotation
+marks.  (If you were binding a @key{META} key, rather than a @key{CTRL}
+key, you would write @w{@code{M-c}} in your @file{.emacs} file.
+@xref{Init Rebinding, , Rebinding Keys in Your Init File, emacs, The GNU
+Emacs Manual}, for details.)
 
 The command invoked by the keys is @code{compare-windows}.  Note that
 @code{compare-windows} is preceded by a single-quote; otherwise, Emacs
@@ -17284,7 +17282,7 @@ Key Bindings
 @group
 ;;; Key binding for 'occur'
 ; I use occur a lot, so let's bind it to a key:
-(global-set-key "\C-co" 'occur)
+(keymap-global-set "C-c o" 'occur)
 @end group
 @end smallexample
 
@@ -17296,7 +17294,7 @@ Key Bindings
 Matching lines are shown in a buffer called @file{*Occur*}.
 That buffer serves as a menu to jump to occurrences.
 
-@findex global-unset-key
+@findex keymap-global-unset
 @cindex Unbinding key
 @cindex Key unbinding
 @need 1250
@@ -17306,7 +17304,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Unbind 'C-x f'
-(global-unset-key "\C-xf")
+(keymap-global-unset "C-x f")
 @end group
 @end smallexample
 
@@ -17324,7 +17322,7 @@ Key Bindings
 @smallexample
 @group
 ;;; Rebind 'C-x C-b' for 'buffer-menu'
-(global-set-key "\C-x\C-b" 'buffer-menu)
+(keymap-global-set "C-x C-b" 'buffer-menu)
 @end group
 @end smallexample
 
@@ -17336,33 +17334,80 @@ Key Bindings
 command, which not only lists the buffers,
 but moves point into that window.
 
+@subsection Legacy Global Key Binding Commands
+
+@findex global-set-key
+@cindex Global set key
+Historically, keys are bound globally using a lower-level function,
+@code{global-set-key}, which is now considered legacy.  While you are
+encouraged to use @code{keymap-global-set}, you likely would encounter
+@code{global-set-key} in various places.  The first example in this
+section can be rewritten using @code{global-set-key} as:
+
+@smallexample
+@group
+(global-set-key "\C-cw" 'compare-windows)
+@end group
+@end smallexample
+
+It is very similar to @code{keymap-global-set}, with the keybinding
+following a slightly different format.  Control-C is represented by
+@code{\C-c}, instead of @code{C-c}.  There is no space between key
+strokes, like @code{\C-c} and @code{w} in this example.  Despite the
+difference, in documentation, this is still written as @w{@kbd{C-c w}}
+for readability.
+
+@findex global-unset-key
+Historically, keys are unbound globally using a lower-function,
+@code{global-unset-key}, which is now considered legacy.  Its key
+binding format follows that of @code{global-set-key}.  The key unbinding
+example in this section can be rewritten as:
+
+@smallexample
+@group
+;;; Unbind 'C-x f'
+(global-unset-key "\C-xf")
+@end group
+@end smallexample
+
 @node Keymaps
 @section Keymaps
 @cindex Keymaps
 @cindex Rebinding keys
 
 Emacs uses @dfn{keymaps} to record which keys call which commands.
-When you use @code{global-set-key} to set the key binding for a single
-command in all parts of Emacs, you are specifying the key binding in
-@code{current-global-map}.
+When you use @code{keymap-global-set} to set the key binding for a
+single command in all parts of Emacs, you are specifying the key binding
+in @code{current-global-map}.
 
 Specific modes, such as C mode or Text mode, have their own keymaps;
 the mode-specific keymaps override the global map that is shared by
 all buffers.
 
-The @code{global-set-key} function binds, or rebinds, the global
+The @code{keymap-global-set} function binds, or rebinds, the global
 keymap.  For example, the following binds the key @kbd{C-x C-b} to the
 function @code{buffer-menu}:
 
 @smallexample
-(global-set-key "\C-x\C-b" 'buffer-menu)
+(keymap-global-set "C-x C-b" 'buffer-menu)
 @end smallexample
 
-Mode-specific keymaps are bound using the @code{define-key} function,
+Mode-specific keymaps are bound using the @code{keymap-set} function,
 which takes a specific keymap as an argument, as well as the key and
-the command.  For example, my @file{.emacs} file contains the
-following expression to bind the @code{texinfo-insert-@@group} command
-to @kbd{C-c C-c g}:
+the command.  For example, the following expression binds the
+@code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:
+
+@smallexample
+@group
+(keymap-set texinfo-mode-map "C-c C-c g" 'texinfo-insert-@@group)
+@end group
+@end smallexample
+
+Historically, keymaps are bound using a lower-level function,
+@code{define-key}, which is now considered legacy.  While you are
+encouraged to use @code{keymap-set}, you likely would encounter
+@code{define-key} in various places.  The above key binding can be
+rewritten using @code{define-key} as:
 
 @smallexample
 @group
@@ -17396,9 +17441,9 @@ Keymaps
 write a function to insert a word; but I prefer key strokes consistent
 with other Texinfo mode key bindings.)
 
-You will see numerous @code{define-key} expressions in
-@file{loaddefs.el} as well as in the various mode libraries, such as
-@file{cc-mode.el} and @file{lisp-mode.el}.
+You will see numerous @code{keymap-set} and @code{define-key}
+expressions in @file{loaddefs.el} as well as in the various mode
+libraries, such as @file{cc-mode.el} and @file{lisp-mode.el}.
 
 @xref{Key Bindings, , Customizing Key Bindings, emacs, The GNU Emacs
 Manual}, and @ref{Keymaps, , Keymaps, elisp, The GNU Emacs Lisp
@@ -17440,13 +17485,12 @@ Loading Files
 
 @need 1250
 To replace the key binding for the default
-@code{split-window-vertically}, you must also unset that key and bind
-the keys to @code{split-window-quietly}, like this:
+@code{split-window-vertically}, you must bind the keys to
+@code{split-window-quietly}, like this:
 
 @smallexample
 @group
-(global-unset-key "\C-x2")
-(global-set-key "\C-x2" 'split-window-quietly)
+(keymap-global-set "C-x 2" 'split-window-quietly)
 @end group
 @end smallexample
 
@@ -17608,7 +17652,7 @@ Simple Extension
 this:
 
 @smallexample
-(global-set-key [f6] 'line-to-top-of-window)
+(keymap-global-set "<f6>" 'line-to-top-of-window)
 @end smallexample
 
 For more information, see @ref{Init Rebinding, , Rebinding Keys in
@@ -18791,7 +18835,7 @@ the-the
 
 @group
 ;; Bind 'the-the' to  C-c \
-(global-set-key "\C-c\\" 'the-the)
+(keymap-global-set "C-c \\" 'the-the)
 @end group
 @end smallexample
 
-- 
2.47.1

[Message part 3 (text/plain, inline)]
-- 
Hong

Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Thu, 02 Jan 2025 01:27:02 GMT) Full text and rfc822 format available.

Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Sat, 04 Jan 2025 12:35:02 GMT) Full text and rfc822 format available.

Notification sent to Hong Xu <hong <at> topbug.net>:
bug acknowledged by developer. (Sat, 04 Jan 2025 12:35:03 GMT) Full text and rfc822 format available.

Message #53 received at 74999-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hong Xu <hong <at> topbug.net>
Cc: 74999-done <at> debbugs.gnu.org
Subject: Re: bug#74999: [PATCH v4] Use `keymap*-set' over
 `global-set-key'/`define-key' in elisp intro
Date: Sat, 04 Jan 2025 14:34:30 +0200
> From: Hong Xu <hong <at> topbug.net>
> Cc: 74999 <at> debbugs.gnu.org
> Date: Sat, 28 Dec 2024 11:56:05 -0800
> 
> On 2024-12-28 Sat 04:17 GMT-08, Eli Zaretskii <eliz <at> gnu.org> wrote:
> 
> >> From: Hong Xu <hong <at> topbug.net>
> >> Date: Thu, 26 Dec 2024 13:46:39 -0800
> >> 
> >> * doc/lispintro/emacs-lisp-intro.texi (Key Bindings): Since
> >> `global-set-key' and `define-key' are considered legacy, we encourage
> >> `keymap-global-set' and `keymap-set' now.
> >> ---
> >>  doc/lispintro/emacs-lisp-intro.texi | 119 +++++++++++++++++++---------
> >>  1 file changed, 81 insertions(+), 38 deletions(-)
> >
> > Thanks, I have a few minor comments:
> >
> >>  @cindex Setting a key globally
> >> -@cindex Global set key
> >> +@cindex Keymap global set
> >>  @cindex Key setting globally
> >> -@findex global-set-key
> >
> > Please add index entries for the new APIs, but do not remove the index
> > entries for old ones.  Readers could still need to look up the old
> > interfaces via index search.
> >
> >> -@findex global-unset-key
> >> +@findex keymap-global-unset
> >
> > Same here.
> 
> I moved these two indices to the legacy subsection, which is now the
> place that describes these functions.
> 
> >
> >> +@subsection Legacy Global Key Binding Commands
> >> +
> >> +@findex global-set-key
> >> +@cindex Global set key
> >> +Historically, keys are bound globally using a lower-level function,
> >> +@code{global-set-key}, which is now considered legacy.  While you are
> >> +encouraged to use @code{keymap-global-set}, you likely would encounter
> >> +@code{global-set-key} in various places.  The first example can be
> >> +rewritten using @code{global-set-key} as:
> >> +
> >> +@smallexample
> >> +@group
> >> +(global-set-key "\C-cw" 'compare-windows)
> >> +@end group
> >> +@end smallexample
> >
> > The text says "first example", but which example is that?  There are
> > no examples in this subsection.
> >
> >> +Historically, keys are unbound globally using a lower-function,
> >> +@code{global-unset-key}, which is now considered legacy.  Its key
> >> +binding format follows that of @code{global-set-key}.  The above key
> >> +unbinding example can be rewritten as:
> >
> > Same here: "the above key unbinding example" refers to an example in a
> > different subsection.
> 
> The updated patch now adds an "in this section" qualifier. Please see
> the attachment.

Thanks, installed on the emacs-30 branch, and closing the bug.




Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Sat, 04 Jan 2025 12:35:04 GMT) Full text and rfc822 format available.

Notification sent to Hong Xu <hong <at> topbug.net>:
bug acknowledged by developer. (Sat, 04 Jan 2025 12:35:04 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 02 Feb 2025 12:24:19 GMT) Full text and rfc822 format available.

This bug report was last modified 135 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.