From: Visuwesh <visuweshm@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: "समीर सिंह Sameer Singh" <lumarzeli30@gmail.com>, 58376@debbugs.gnu.org
Subject: bug#58376: [PATCH] Set the PARENTS argument for language environments
Date: Sun, 09 Oct 2022 21:00:24 +0530 [thread overview]
Message-ID: <87o7ulovzj.fsf@gmail.com> (raw)
In-Reply-To: <87sfjxox3r.fsf@gmail.com> (Visuwesh's message of "Sun, 09 Oct 2022 20:36:16 +0530")
[-- Attachment #1: Type: text/plain, Size: 613 bytes --]
[ஞாயிறு அக்டோபர் 09, 2022] Visuwesh wrote:
>> Attached patch puts the "Kharosthi" item in both Indian and Misc
>> submenus without overwriting.
>>
>>
>>
>> The problem is that when looping, the variables setup-map and
>> describe-map gets outdated and causes the overwrite. The solution I
>> came up with was to update them both to their default after each
>> iteration. This involved moving the keymap-setting forms to a
>> separate
>> function.
>
> Hmm, I seethat the function can be cleaned up further. I will do it
> after my dinner.
Please find attached.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-set-language-info-alist-when-multiple-PARENTS-ar.patch --]
[-- Type: text/x-diff, Size: 5339 bytes --]
From 6e219f98feb19489c82f9bbcc429241131b75c7a Mon Sep 17 00:00:00 2001
From: Visuwesh <visuweshm@gmail.com>
Date: Sun, 9 Oct 2022 20:59:50 +0530
Subject: [PATCH] Fix set-language-info-alist when multiple PARENTS are given
* lisp/international/mule-cmds.el (set-language-info-setup-keymap):
Function factored out from...
(set-language-info-alist): ...here. Do not mess up the keymaps when
multiple parents are given in PARENTS. (bug#58376)
---
lisp/international/mule-cmds.el | 84 ++++++++++++++++-----------------
1 file changed, 40 insertions(+), 44 deletions(-)
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 48e5c9aa1f..4ad0d1003b 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1208,6 +1208,16 @@ set-language-info-internal
(list 'const lang))
(sort (mapcar 'car language-info-alist) 'string<))))))
+(defun set-language-info-setup-keymap (lang-env alist describe-map setup-map)
+ "Setup menu items for LANG-ENV.
+See `set-language-info-alist' for details of other arguments."
+ (let ((doc (assq 'documentation alist)))
+ (when doc
+ (define-key-after describe-map (vector (intern lang-env))
+ (cons lang-env 'describe-specified-language-support))))
+ (define-key-after setup-map (vector (intern lang-env))
+ (cons lang-env 'setup-specified-language-environment)))
+
(defun set-language-info-alist (lang-env alist &optional parents)
"Store ALIST as the definition of language environment LANG-ENV.
ALIST is an alist of KEY and INFO values. See the documentation of
@@ -1222,51 +1232,37 @@ set-language-info-alist
(setq lang-env (symbol-name lang-env)))
((stringp lang-env)
(setq lang-env (purecopy lang-env))))
- (let ((describe-map describe-language-environment-map)
- (setup-map setup-language-environment-map))
- (if parents
- (let ((l parents)
- map parent-symbol parent prompt)
- (while l
- (if (symbolp (setq parent-symbol (car l)))
- (setq parent (symbol-name parent))
- (setq parent parent-symbol parent-symbol (intern parent)))
- (setq map (lookup-key describe-map (vector parent-symbol)))
- ;; This prompt string is for define-prefix-command, so
- ;; that the map it creates will be suitable for a menu.
- (or map (setq prompt (format "%s Environment" parent)))
- (if (not map)
- (progn
- (setq map (intern (format "describe-%s-environment-map"
- (downcase parent))))
- (define-prefix-command map nil prompt)
- (define-key-after describe-map (vector parent-symbol)
- (cons parent map))))
- (setq describe-map (symbol-value map))
- (setq map (lookup-key setup-map (vector parent-symbol)))
- (if (not map)
- (progn
- (setq map (intern (format "setup-%s-environment-map"
+ (if parents
+ (while parents
+ (let (describe-map setup-map parent-symbol parent prompt)
+ (if (symbolp (setq parent-symbol (car parents)))
+ (setq parent (symbol-name parent))
+ (setq parent parent-symbol parent-symbol (intern parent)))
+ (setq describe-map (lookup-key describe-language-environment-map (vector parent-symbol)))
+ ;; This prompt string is for define-prefix-command, so
+ ;; that the map it creates will be suitable for a menu.
+ (or describe-map (setq prompt (format "%s Environment" parent)))
+ (unless describe-map
+ (setq describe-map (intern (format "describe-%s-environment-map"
+ (downcase parent))))
+ (define-prefix-command describe-map nil prompt)
+ (define-key-after describe-language-environment-map (vector parent-symbol)
+ (cons parent describe-map)))
+ (setq setup-map (lookup-key setup-language-environment-map (vector parent-symbol)))
+ (unless setup-map
+ (setq setup-map (intern (format "setup-%s-environment-map"
(downcase parent))))
- (define-prefix-command map nil prompt)
- (define-key-after setup-map (vector parent-symbol)
- (cons parent map))))
- (setq setup-map (symbol-value map))
- (setq l (cdr l)))))
-
- ;; Set up menu items for this language env.
- (let ((doc (assq 'documentation alist)))
- (when doc
- (define-key-after describe-map (vector (intern lang-env))
- (cons lang-env 'describe-specified-language-support))))
- (define-key-after setup-map (vector (intern lang-env))
- (cons lang-env 'setup-specified-language-environment))
-
- (dolist (elt alist)
- (set-language-info-internal lang-env (car elt) (cdr elt)))
-
- (if (equal lang-env current-language-environment)
- (set-language-environment lang-env))))
+ (define-prefix-command setup-map nil prompt)
+ (define-key-after setup-language-environment-map (vector parent-symbol)
+ (cons parent setup-map)))
+ (setq parents (cdr parents))
+ (set-language-info-setup-keymap lang-env alist (symbol-value describe-map) (symbol-value setup-map))))
+ (set-language-info-setup-keymap lang-env alist
+ describe-language-environment-map setup-language-environment-map))
+ (dolist (elt alist)
+ (set-language-info-internal lang-env (car elt) (cdr elt)))
+ (if (equal lang-env current-language-environment)
+ (set-language-environment lang-env)))
(defun read-language-name (key prompt &optional default)
"Read a language environment name which has information for KEY.
--
2.37.2
next prev parent reply other threads:[~2022-10-09 15:30 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-08 11:12 bug#58376: [PATCH] Set the PARENTS argument for language environments समीर सिंह Sameer Singh
2022-10-08 11:15 ` समीर सिंह Sameer Singh
2022-10-08 14:46 ` Eli Zaretskii
2022-10-08 16:18 ` समीर सिंह Sameer Singh
2022-10-08 18:16 ` Eli Zaretskii
2022-10-08 19:16 ` समीर सिंह Sameer Singh
2022-10-09 8:29 ` Eli Zaretskii
2022-10-09 10:28 ` समीर सिंह Sameer Singh
2022-10-09 13:22 ` Eli Zaretskii
2022-10-09 13:59 ` समीर सिंह Sameer Singh
2022-10-09 14:23 ` Eli Zaretskii
2022-10-09 14:46 ` समीर सिंह Sameer Singh
2022-10-09 14:55 ` Eli Zaretskii
2022-10-09 14:50 ` Visuwesh
2022-10-09 15:06 ` Visuwesh
2022-10-09 15:30 ` Visuwesh [this message]
2022-10-10 14:06 ` समीर सिंह Sameer Singh
2022-10-10 14:32 ` Visuwesh
2022-10-10 14:38 ` समीर सिंह Sameer Singh
2022-10-10 15:59 ` Visuwesh
2022-10-10 18:38 ` समीर सिंह Sameer Singh
2022-10-30 8:22 ` समीर सिंह Sameer Singh
2022-10-30 8:43 ` Eli Zaretskii
2022-10-30 9:30 ` समीर सिंह Sameer Singh
2022-10-30 10:20 ` Eli Zaretskii
2022-10-30 10:31 ` समीर सिंह Sameer Singh
2022-10-30 11:18 ` Eli Zaretskii
2022-10-30 11:19 ` समीर सिंह Sameer Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87o7ulovzj.fsf@gmail.com \
--to=visuweshm@gmail.com \
--cc=58376@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=lumarzeli30@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.