X-Loop: help-debbugs@HIDDEN Subject: bug#73016: Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA Resent-From: Jeremy Bryant <jb@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Tue, 03 Sep 2024 22:21:02 +0000 Resent-Message-ID: <handler.73016.B.17254020196960 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 73016 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 73016 <at> debbugs.gnu.org, philipk@HIDDEN Cc: Tony Zorman <tonyzorman@HIDDEN> X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN, Philip Kaludercic <philipk@HIDDEN> Received: via spool by submit <at> debbugs.gnu.org id=B.17254020196960 (code B ref -1); Tue, 03 Sep 2024 22:21:02 +0000 Received: (at submit) by debbugs.gnu.org; 3 Sep 2024 22:20:19 +0000 Received: from localhost ([127.0.0.1]:32959 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1slbsp-0001oC-3P for submit <at> debbugs.gnu.org; Tue, 03 Sep 2024 18:20:19 -0400 Received: from lists.gnu.org ([209.51.188.17]:46970) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <jb@HIDDEN>) id 1slbsn-0001o3-85 for submit <at> debbugs.gnu.org; Tue, 03 Sep 2024 18:20:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <jb@HIDDEN>) id 1slbrm-0002FR-5l for bug-gnu-emacs@HIDDEN; Tue, 03 Sep 2024 18:19:14 -0400 Received: from out-189.mta0.migadu.com ([91.218.175.189]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <jb@HIDDEN>) id 1slbri-0000dD-Un for bug-gnu-emacs@HIDDEN; Tue, 03 Sep 2024 18:19:13 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeremybryant.net; s=key1; t=1725401943; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=sYwrECLLNzRBsWcK2vByEsRbruW1+puby50ghR4AQJs=; b=Y6Mu3uf1w0rMj8CrrJG6ZQ2/EdecCalQ6GYXJxACuogoZqk/K4KUcZ2C96BCFPEPD1ppeq SYpzo1yeMsv3bOLw1fl5eRAPeEznv1/xFdGL3rqs0cZo9ygVPJeJ74mJtLi1SLU/TEsrTU iRryHaJJw5LvjCT/ao522qXyz4VQcv/H6DwZ//ZxiDup994zNj0NjqcOq0Sl9W4o03Bnjx gBDJ10RCt+GnoBjXWsy0AarXnXJ1CLmQirDbSRK1z7g9wXg/LaHGLZezexW9156upG86cw 0AQDZrpfRNDp/3MHezlkoty08DA2QVHHQSxLWHpmz/vtpRO/2sp0JbwQ4z2IJA== From: Jeremy Bryant <jb@HIDDEN> Date: Tue, 03 Sep 2024 23:19:01 +0100 Message-ID: <875xrcfkiy.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Flow: FLOW_OUT Received-SPF: pass client-ip=91.218.175.189; envelope-from=jb@HIDDEN; helo=out-189.mta0.migadu.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -2.4 (--) --=-=-= Content-Type: text/plain Hi, kmonad is a keyboard configuration tool under MIT license. https://github.com/kmonad/kmonad There is an Emacs major mode to edit the configuration file, based on s-expressions. The mode is under GPLv3. https://github.com/kmonad/kbd-mode On behalf of the author, Tony Zorman, I would like to request consideration to include it in NON-GNU ELPA. The author is conscious that the following snippet should be improved and we are soliciting recommendations on how to improve it. ;; HACK (defadvice redisplay (after refresh-font-locking activate) (when (derived-mode-p 'kbd-mode) (font-lock-fontify-buffer)))) Furthermore if there are any code reviews or recommendations, I attach the current version. I can volunteer some time for some of the changes. --=-=-= Content-Type: application/emacs-lisp Content-Disposition: attachment; filename=kbd-mode.el Content-Transfer-Encoding: quoted-printable ;;; kbd-mode.el --- Font locking for kmonad's .kbd files -*- lexical-bindin= g: t -*- ;; Copyright 2020=E2=80=932022 slotThe ;; URL: https://github.com/kmonad/kbd-mode ;; Version: 0.0.1 ;; Package-Requires: ((emacs "24.3")) ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; This file adds basic font locking support for `.kbd' configuration ;; files. ;; ;; To use this file, move it to a directory within your `load-path' and ;; require it. For example --- assuming that this file was placed ;; within the `~/.config/emacs/elisp' directory: ;; ;; (add-to-list 'load-path "~/.config/emacs/elisp/") ;; (require 'kbd-mode) ;; ;; If you use `use-package', you can express the above as ;; ;; (use-package kbd-mode ;; :load-path "~/.config/emacs/elisp/") ;; ;; By default we highlight all keywords; you can change this by ;; customizing the `kbd-mode-' variables. For example, to disable the ;; highlighting of already defined macros (i.e. of "@macro-name"), you ;; can set `kbd-mode-show-macros' to `nil'. ;; ;; For keybindings, as well as commentary on the `kbd-mode-demo-mode' ;; minor mode, see the associated README.md file. ;;; Code: (require 'compile) (defgroup kbd nil "Major mode for editing `.kbd' files." :group 'languages) (defgroup kbd-demo nil "A minor mode to test your configuration." :group 'kbd) ;;;; Custom variables (defgroup kbd-highlight nil "Syntax highlighting for `kbd-mode'." :group 'kbd) (defcustom kbd-mode-kexpr '("defcfg" "defsrc" "defalias") "A K-Expression." :type '(repeat string) :group 'kbd-highlight) ;; HACK (defcustom kbd-mode-function-one '("deflayer") "Tokens that are treated as functions with one argument." :type '(repeat string) :group 'kbd-highlight) (defcustom kbd-mode-tokens '(;; input tokens "uinput-sink" "send-event-sink" "kext" ;; output tokens "device-file" "low-level-hook" "iokit-name") "Input and output tokens." :type '(repeat string) :group 'kbd-highlight) (defcustom kbd-mode-defcfg-options '("input" "output" "cmp-seq-delay" "cmp-seq" "init" "fallthrough" "allow-= cmd") "Options to give to `defcfg'." :type '(repeat string) :group 'kbd-highlight) (defcustom kbd-mode-button-modifiers '("around-next-timeout" "around-next-single" "around-next" "around" "tap-hold-next-release" "tap-hold-next" "tap-next-release" "tap-hold" "tap-macro-release" "tap-macro" "multi-tap" "tap-next" "layer-toggle" "layer-switch" "layer-add" "layer-rem" "layer-delay" "layer-next" "cmd-= button") "Button modifiers." :type '(repeat string) :group 'kbd-highlight) (defcustom kbd-mode-show-string '("uinput-sink" "device-file" "cmd-button") "Syntax highlight strings in S-expressions. When an S-expression begins with any of these keywords, highlight strings (delimited by double quotes) inside it." :type '(repeat string) :group 'kbd-highlight) (defcustom kbd-mode-show-macros t "Whether to syntax highlight macros inside layout definitions. Default: t" :type 'boolean :group 'kbd-highlight) (defcustom kbd-mode-magic-focus nil "Whether to enable magic focus. Whenever the `kbd-mode-demo-mode' buffer gets focused, automatically start try to start a new process for the config file. When switching back to the config file, kill that process. Default: nil" :type 'boolean :group 'kbd-demo) (defcustom kbd-mode-kill-kmonad nil "How to kill (or suspend) a running kmonad instance. This is used when invoking `kbd-mode-start-demo' and, in general, when entering `kbd-mode-demo-mode' because keyboards can't be grabbed twice." :type 'string :group 'kbd-demo) (defcustom kbd-mode-start-kmonad nil "How to restart (or resume) kmonad. If there was an active kmonad instance running, which was killed by `kbd-mode-kill-kmonad', then this (re)starts kmonad with the given command upon exiting `kbd-mode-demo-mode'." :type 'string :group 'kbd-demo) ;;;; Faces (defgroup kbd-highlight-faces nil "Faces used for highlighting in `kbd-mode'." :group 'kbd-highlight) (defface kbd-mode-kexpr-face '((t :inherit font-lock-keyword-face)) "Face for a K-Expression." :group 'kbd-highlight-faces) (defface kbd-mode-token-face '((t :inherit font-lock-function-name-face)) "Face for input and output tokens." :group 'kbd-highlight-faces) (defface kbd-mode-defcfg-option-face '((t :inherit font-lock-builtin-face)) "Face for options one may give to `defcfg'." :group 'kbd-highlight-faces) (defface kbd-mode-button-modifier-face '((t :inherit font-lock-function-name-face)) "Face for all the button modifiers." :group 'kbd-highlight-faces) (defface kbd-mode-variable-name-face '((t :inherit font-lock-variable-name-face)) "Face for a variables, i.e. layer names, macros in layers,..." :group 'kbd-highlight-faces) (defface kbd-mode-string-face '((t :inherit font-lock-string-face)) "Face for strings." :group 'kbd-highlight-faces) ;;;; Functions (defun kbd-mode--show-macros? (show-macros) "Decide whether to font-lock macros. If the argument SHOW-MACROS is non-nil, font-lock macros of the form `@MACRO-NAME' with `kbd-mode-variable-name-face'." (let ((macro-regexp '(("\\(:?\\(@[^[:space:]]+\\)\\)" (1 'kbd-mode-variable-name-face))))) (if show-macros (font-lock-add-keywords 'kbd-mode macro-regexp) (font-lock-remove-keywords 'kbd-mode macro-regexp)))) ;;; Vars (defvar kbd-mode-syntax-table (let ((st (make-syntax-table))) ;; Use ;; for regular comments and #| |# for line comments. (modify-syntax-entry ?\; ". 12b" st) (modify-syntax-entry ?\n "> b" st) (modify-syntax-entry ?\# ". 14" st) (modify-syntax-entry ?\| ". 23" st) ;; We don't need to highlight brackets, as they're only used inside ;; layouts. (modify-syntax-entry ?\[ "." st) (modify-syntax-entry ?\] "." st) ;; We highlight the necessary strings ourselves. (modify-syntax-entry ?\" "." st) st) "The basic syntax table for `kbd-mode'.") (defvar kbd-mode--font-lock-keywords (let ((kexpr-regexp (regexp-opt kbd-mode-kexpr 'wor= ds)) (token-regexp (regexp-opt kbd-mode-tokens 'wor= ds)) (defcfg-options-regexp (regexp-opt kbd-mode-defcfg-options 'wor= ds)) (button-modifiers-regexp (regexp-opt kbd-mode-button-modifiers 'wor= ds)) (function-one-regexp (concat "\\(?:\\(" (regexp-opt kbd-mode-function-one) "\\)\\([[:space:]]+[[:word:]]+\\)\\)")) ;; Only highlight these strings; configuration files may explicitly ;; use a " to emit a double quote, so we can't trust the default ;; string highlighting. (string-regexp (concat "\\(['\(]" (regexp-opt kbd-mode-show-string) "\\)\\(\\S)+\\)\)"))) `((,token-regexp (1 'kbd-mode-token-face )) (,kexpr-regexp (1 'kbd-mode-kexpr-face )) (,button-modifiers-regexp (1 'kbd-mode-button-modifier-face)) (,defcfg-options-regexp (1 'kbd-mode-defcfg-option-face )) (,function-one-regexp (1 'kbd-mode-kexpr-face ) (2 'kbd-mode-variable-name-face)) (,string-regexp ("\"[^}]*?\"" (progn (goto-char (match-beginning 0)) (match-end 0)) (goto-char (match-end 0)) (0 'kbd-mode-string-face t))))) "Keywords to be syntax highlighted.") ;;; Define Major Mode ;; Because the configuration language is in a lispy syntax, we can ;; inherit from any lisp mode in order to get good parenthesis handling ;; for free. (defvar kbd-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "C-c C-c") #'kbd-mode-start-demo) (define-key map (kbd "C-c C-z") #'kbd-mode-switch) map)) ;;;###autoload (define-derived-mode kbd-mode emacs-lisp-mode "Kbd" "Major mode for editing `.kbd' files. For details, see `https://github.com/kmonad/kmonad'." (set-syntax-table kbd-mode-syntax-table) (use-local-map kbd-mode-map) (font-lock-add-keywords 'kbd-mode kbd-mode--font-lock-keywords) (kbd-mode--show-macros? kbd-mode-show-macros) ;; HACK (defadvice redisplay (after refresh-font-locking activate) (when (derived-mode-p 'kbd-mode) (font-lock-fontify-buffer)))) ;; Associate the `.kbd' ending with `kbd-mode'. ;;;###autoload (add-to-list 'auto-mode-alist '("\\.kbd\\'" . kbd-mode)) ;;;; Demo Minor Mode (defvar kbd-mode-demo-file nil "Path to the users configuration file. This is used in `kbd-mode-demo-mode' for deciding what configuration to compile.") (defvar kbd-mode-had-kmonad? nil "Whether the user had a running kmonad instance. This controls whether kmonad will be restarted by mean of `kbd-mode-start-kmonad' after exiting `kbd-mode-demo-mode'.") (defvar kbd-mode-demo-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "C-c C-c") #'kbd-mode-stop-demo) (define-key map (kbd "C-c C-z") #'kbd-mode-switch) map)) ;;;###autoload (define-minor-mode kbd-mode-demo-mode "Toggle kmonad demo mode. This is a minor mode, in which users can test their configurations." :lighter " kbd-demo" :keymap kbd-mode-demo-mode-map (when kbd-mode-demo-mode (unless (kbd-mode--valid-config?) (kbd-mode--show-error))) ;; Handle toggle (when kbd-mode-magic-focus (cond (kbd-mode-demo-mode (add-hook 'window-selection-change-functions #'kbd-mode--toggle-= demo nil t) (add-hook 'focus-in-hook #'kbd-mode--create-kmonad-process nil t) (add-hook 'focus-out-hook #'kbd-mode--kill-demo-process nil t)) (t (remove-hook 'window-selection-change-functions #'kbd-mode--togg= le-demo t) (remove-hook 'focus-in-hook #'kbd-mode--create-kmonad-process t) (remove-hook 'focus-out-hook #'kbd-mode--kill-demo-process t))))) ;;;; Interactive Functions ;;;###autoload (defun kbd-mode-start-demo () "Try the current configuration in a demo buffer. Use `kbd-mode-stop-demo' to stop the demo. If the configuration file has errors, the demo will not start and an error buffer will be shown instead." (interactive) (setq kbd-mode-demo-file (kbd-mode--find-kbd-file (buffer-file-name (current-buffer)))) (if (not (kbd-mode--valid-config?)) (kbd-mode--show-error) (when (shell-command "ps -C kmonad") (setq kbd-mode-had-kmonad? t) (kbd-mode--kill-kmonad)) (kbd-mode--create-demo-buffer) (pop-to-buffer "*kmonad-demo*") (kbd-mode--create-kmonad-process) (kbd-mode-demo-mode t))) (defun kbd-mode-stop-demo () "Stop the currently running demo." (interactive) (with-current-buffer "*kmonad-demo*" (kbd-mode-demo-mode 0) (kill-buffer-and-window) (kbd-mode--kill-demo-process) (when kbd-mode-had-kmonad? (kbd-mode--start-kmonad)))) (defun kbd-mode-switch () "Switch between the demo window and the config file." (interactive) (select-window (get-buffer-window (if (and (equal (buffer-name) "*kmonad-demo*") kbd-mode-demo-mode) (get-file-buffer kbd-mode-demo-file) "*kmonad-demo*")))) ;;;; Helper Functions (defun kbd-mode--create-demo-buffer () "Create the *kmonad-demo* buffer." (unless (get-buffer "*kmonad-demo*") (display-buffer (get-buffer-create "*kmonad-demo*") '(display-buffer-at-bottom (window-height . 0.15))))) (defun kbd-mode--find-kbd-file (&optional file) "Find the config file. If the optional argument FILE is given, use it instead. Otherwise, prompt the user for a choice." (if (and file (string=3D (file-name-extension file) "kbd")) file (expand-file-name (read-file-name "Choose configuration file")))) (defun kbd-mode--valid-config? () "Check if the current configuration is valid." (let ((command (kbd-mode--get-config-validation-command))) (eq 0 (shell-command command)))) (defun kbd-mode--create-kmonad-process () "Start the kmonad demo process in a dedicated buffer." (when (get-buffer-process "*kmonad*") (kbd-mode--kill-demo-process)) (start-process "kmonad-emacs" "*kmonad*" "kmonad" kbd-mode-demo-file)) (defun kbd-mode--kill-demo-process () "Kill demo kmonad process, if possible." (when (get-buffer-process "*kmonad*") (kill-process "*kmonad*"))) (defun kbd-mode--kill-kmonad () "Kill (or suspend) a running kmonad instance. The command used to kill kmonad is given by the `kbd-mode-kill-kmonad' variable." (if kbd-mode-kill-kmonad (shell-command kbd-mode-kill-kmonad) (error "To kill the running kmonad instance, customize the `kbd-mode-ki= ll-kmonad' variable!"))) (defun kbd-mode--start-kmonad () "Start (or resume) a new kmonad process. The command used to start kmonad is given by the `kbd-mode-start-kmonad' variable." (if kbd-mode-kill-kmonad (call-process-shell-command ;; Force the command to be executed asynchronously. (if (eq (aref kbd-mode-start-kmonad (1- (length kbd-mode-start-kmonad))) ?&) kbd-mode-start-kmonad (concat kbd-mode-start-kmonad "&"))) (error "To restart kmonad, customize the `kbd-mode-start-kmonad' variab= le!"))) (defun kbd-mode--toggle-demo (&optional _window) "Toggle the kmonad demo process. When the users exits the demo window, kill the demo process and start a \"normal\" kmonad process instead. When re-entering the demo window, do the opposite; i.e., kill the running kmonad instance and spawn a demo process." (cond ((kbd-mode--was-demo?) (kbd-mode--kill-demo-process) (kbd-mode--start-kmonad)) ((kbd-mode--valid-config?) (kbd-mode--kill-kmonad) (kbd-mode--create-kmonad-process)) (t (kbd-mode--start-kmonad) (kbd-mode--show-error)))) (defun kbd-mode--was-demo? () "Was the previous buffer the kmonad demo buffer?" (equal (window-buffer (previous-window)) (get-buffer "*kmonad-demo*"))) (defun kbd-mode--show-error () "Show configuration errors in a compilation buffer." (when kbd-mode-demo-mode (quit-window 'kill "*kmonad-demo*")) (compile (kbd-mode--get-config-validation-command))) (defun kbd-mode--get-config-validation-command () "Get validation command for `kbd-mode-demo-file'." (concat "kmonad -d " kbd-mode-demo-file)) ;;;; Integration with `compilation-mode' (add-to-list 'compilation-error-regexp-alist 'kbd) (add-to-list 'compilation-error-regexp-alist-alist '(kbd "^kmonad: Parse error at \\([0-9]+\\):\\([0-9]+\\)" nil = 1 2)) (provide 'kbd-mode) ;;; kbd-mode.el ends here --=-=-=--
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Jeremy Bryant <jb@HIDDEN> Subject: bug#73016: Acknowledgement (Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA) Message-ID: <handler.73016.B.17254020196960.ack <at> debbugs.gnu.org> References: <875xrcfkiy.fsf@HIDDEN> X-Gnu-PR-Message: ack 73016 X-Gnu-PR-Package: emacs Reply-To: 73016 <at> debbugs.gnu.org Date: Tue, 03 Sep 2024 22:21:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-gnu-emacs@HIDDEN If you wish to submit further information on this problem, please send it to 73016 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 73016: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D73016 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#73016: Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA Resent-From: Philip Kaludercic <philipk@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Thu, 05 Sep 2024 09:56:02 +0000 Resent-Message-ID: <handler.73016.B73016.17255301135788 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 73016 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jeremy Bryant <jb@HIDDEN> Cc: Tony Zorman <tonyzorman@HIDDEN>, 73016 <at> debbugs.gnu.org Received: via spool by 73016-submit <at> debbugs.gnu.org id=B73016.17255301135788 (code B ref 73016); Thu, 05 Sep 2024 09:56:02 +0000 Received: (at 73016) by debbugs.gnu.org; 5 Sep 2024 09:55:13 +0000 Received: from localhost ([127.0.0.1]:36200 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1sm9Cq-0001VG-1Z for submit <at> debbugs.gnu.org; Thu, 05 Sep 2024 05:55:13 -0400 Received: from mout02.posteo.de ([185.67.36.66]:43013) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <philipk@HIDDEN>) id 1sm9Cn-0001Uz-06 for 73016 <at> debbugs.gnu.org; Thu, 05 Sep 2024 05:55:10 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id BE2BD240103 for <73016 <at> debbugs.gnu.org>; Thu, 5 Sep 2024 11:53:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1725530037; bh=EgGUrgLdXiCY/RMJy5wmTpNMWbLXB4lgwTaWCf0UuRM=; h=From:To:Cc:Subject:Autocrypt:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:Content-Transfer-Encoding:From; b=chBawEnTfknjS5RetVOak5RpvplfjPbOThY2XakJ7ui8/p5vjye5ixs5eM7km3iqb nKNprjeN41ltEL8VXusF07YJr4Km2dlKhsouHYC4/uRq9qJOrZ2UJ8vb4T3dhLQq4O /qpkZYU8TCGiWPsXZdAKTc5YlueWTIE3/bjGwmn1Sy8MFyzFjJeVJsKDqA9Yc9SzrN XwfUvPXP9VayFY/rnEKIARMJfZAxtKz1l+a5t2Zt6qaIVrTLL/Iu3imsCq8uIPI+7e /G8mU3SKy682oaj2GVLlveSamMo4AJG5oW8k3Lgic4mGP0L2IQnmIn5bNTZFPyW8As yu0R8Ulsceqnw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Wzvnx09X4z6twR; Thu, 5 Sep 2024 11:53:56 +0200 (CEST) From: Philip Kaludercic <philipk@HIDDEN> In-Reply-To: <875xrcfkiy.fsf@HIDDEN> (Jeremy Bryant's message of "Tue, 03 Sep 2024 23:19:01 +0100") References: <875xrcfkiy.fsf@HIDDEN> Autocrypt: addr=philipk@HIDDEN; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM OpenPGP: id=philipk@HIDDEN; url="https://keys.openpgp.org/vks/v1/by-email/philipk@HIDDEN"; preference=signencrypt Date: Thu, 05 Sep 2024 09:53:56 +0000 Message-ID: <87wmjqjuiz.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) Jeremy Bryant <jb@HIDDEN> writes: > Hi, > > kmonad is a keyboard configuration tool under MIT license. > https://github.com/kmonad/kmonad > > There is an Emacs major mode to edit the configuration file, based on > s-expressions. The mode is under GPLv3. > https://github.com/kmonad/kbd-mode I don't see a reason to add the package in principle. > On behalf of the author, Tony Zorman, I would like to request > consideration to include it in NON-GNU ELPA. Just for the sake of the protocol, is there a reason against adding the package to GNU ELPA? > The author is conscious that the following snippet should be improved > and we are soliciting recommendations on how to improve it. > ;; HACK > (defadvice redisplay (after refresh-font-locking activate) > (when (derived-mode-p 'kbd-mode) > (font-lock-fontify-buffer)))) I agree, we should get rid of that. But first, what is the intention? What breaks if we just remove this advice? > Furthermore if there are any code reviews or recommendations, I attach > the current version. > > I can volunteer some time for some of the changes. > > ;;; kbd-mode.el --- Font locking for kmonad's .kbd files -*- lexical-bind= ing: t -*- > > ;; Copyright 2020=E2=80=932022 slotThe > ;; URL: https://github.com/kmonad/kbd-mode > ;; Version: 0.0.1 > ;; Package-Requires: ((emacs "24.3")) > > ;; This file is free software; you can redistribute it and/or modify > ;; it under the terms of the GNU General Public License as published by > ;; the Free Software Foundation; either version 3, or (at your option) > ;; any later version. > ;; > ;; This file is distributed in the hope that it will be useful, > ;; but WITHOUT ANY WARRANTY; without even the implied warranty of > ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > ;; GNU General Public License for more details. > ;; > ;; You should have received a copy of the GNU General Public License > ;; along with this program. If not, see <http://www.gnu.org/licenses/>. > > ;;; Commentary: > > ;; This file adds basic font locking support for `.kbd' configuration > ;; files. > ;; > ;; To use this file, move it to a directory within your `load-path' and > ;; require it. For example --- assuming that this file was placed > ;; within the `~/.config/emacs/elisp' directory: > ;; > ;; (add-to-list 'load-path "~/.config/emacs/elisp/") > ;; (require 'kbd-mode) > ;; > ;; If you use `use-package', you can express the above as > ;; > ;; (use-package kbd-mode > ;; :load-path "~/.config/emacs/elisp/") Installation instructions are usually out-of-place in the commentary section. Perhaps add a `;;; Installation:` section instead, so that we keep it apart from the documentation that describe-package displays? > ;; > ;; By default we highlight all keywords; you can change this by > ;; customizing the `kbd-mode-' variables. For example, to disable the > ;; highlighting of already defined macros (i.e. of "@macro-name"), you > ;; can set `kbd-mode-show-macros' to `nil'. > ;; > ;; For keybindings, as well as commentary on the `kbd-mode-demo-mode' > ;; minor mode, see the associated README.md file. > > ;;; Code: > > (require 'compile) > > (defgroup kbd nil > "Major mode for editing `.kbd' files." > :group 'languages) > > (defgroup kbd-demo nil > "A minor mode to test your configuration." > :group 'kbd) > > ;;;; Custom variables > > (defgroup kbd-highlight nil > "Syntax highlighting for `kbd-mode'." > :group 'kbd) > > (defcustom kbd-mode-kexpr > '("defcfg" "defsrc" "defalias") > "A K-Expression." This documentation should be expanded on. > :type '(repeat string) > :group 'kbd-highlight) Where is this group defined? The applies below. > > ;; HACK > (defcustom kbd-mode-function-one > '("deflayer") > "Tokens that are treated as functions with one argument." > :type '(repeat string) > :group 'kbd-highlight) > > (defcustom kbd-mode-tokens > '(;; input tokens > "uinput-sink" "send-event-sink" "kext" > ;; output tokens > "device-file" "low-level-hook" "iokit-name") > "Input and output tokens." > :type '(repeat string) > :group 'kbd-highlight) > > (defcustom kbd-mode-defcfg-options > '("input" "output" "cmp-seq-delay" "cmp-seq" "init" "fallthrough" "allo= w-cmd") > "Options to give to `defcfg'." > :type '(repeat string) > :group 'kbd-highlight) > > (defcustom kbd-mode-button-modifiers > '("around-next-timeout" "around-next-single" "around-next" "around" > "tap-hold-next-release" "tap-hold-next" "tap-next-release" "tap-hold" > "tap-macro-release" "tap-macro" "multi-tap" "tap-next" "layer-toggle" > "layer-switch" "layer-add" "layer-rem" "layer-delay" "layer-next" "cm= d-button") > "Button modifiers." > :type '(repeat string) > :group 'kbd-highlight) > > (defcustom kbd-mode-show-string > '("uinput-sink" "device-file" "cmd-button") > "Syntax highlight strings in S-expressions. > When an S-expression begins with any of these keywords, highlight > strings (delimited by double quotes) inside it." > :type '(repeat string) > :group 'kbd-highlight) > > (defcustom kbd-mode-show-macros t > "Whether to syntax highlight macros inside layout definitions. > Default: t" Documenting the default is usually not necessary, as customise already remembers is. > :type 'boolean > :group 'kbd-highlight) > > (defcustom kbd-mode-magic-focus nil > "Whether to enable magic focus. > Whenever the `kbd-mode-demo-mode' buffer gets focused, > automatically start try to start a new process for the config > file. When switching back to the config file, kill that process. > > Default: nil" > :type 'boolean > :group 'kbd-demo) > > (defcustom kbd-mode-kill-kmonad nil > "How to kill (or suspend) a running kmonad instance. > This is used when invoking `kbd-mode-start-demo' and, in general, > when entering `kbd-mode-demo-mode' because keyboards can't be > grabbed twice." > :type 'string > :group 'kbd-demo) > > (defcustom kbd-mode-start-kmonad nil > "How to restart (or resume) kmonad. > If there was an active kmonad instance running, which was killed > by `kbd-mode-kill-kmonad', then this (re)starts kmonad with the > given command upon exiting `kbd-mode-demo-mode'." > :type 'string > :group 'kbd-demo) > > ;;;; Faces > > (defgroup kbd-highlight-faces nil > "Faces used for highlighting in `kbd-mode'." > :group 'kbd-highlight) > > (defface kbd-mode-kexpr-face > '((t :inherit font-lock-keyword-face)) > "Face for a K-Expression." > :group 'kbd-highlight-faces) > > (defface kbd-mode-token-face > '((t :inherit font-lock-function-name-face)) > "Face for input and output tokens." > :group 'kbd-highlight-faces) > > (defface kbd-mode-defcfg-option-face > '((t :inherit font-lock-builtin-face)) > "Face for options one may give to `defcfg'." > :group 'kbd-highlight-faces) > > (defface kbd-mode-button-modifier-face > '((t :inherit font-lock-function-name-face)) > "Face for all the button modifiers." > :group 'kbd-highlight-faces) > > (defface kbd-mode-variable-name-face > '((t :inherit font-lock-variable-name-face)) > "Face for a variables, i.e. layer names, macros in layers,..." > :group 'kbd-highlight-faces) > > (defface kbd-mode-string-face > '((t :inherit font-lock-string-face)) > "Face for strings." > :group 'kbd-highlight-faces) > > ;;;; Functions > > (defun kbd-mode--show-macros? (show-macros) A -p would be more conventional for Elisp. > "Decide whether to font-lock macros. > If the argument SHOW-MACROS is non-nil, font-lock macros of the > form `@MACRO-NAME' with `kbd-mode-variable-name-face'." > (let ((macro-regexp '(("\\(:?\\(@[^[:space:]]+\\)\\)" > (1 'kbd-mode-variable-name-face))))) > (if show-macros > (font-lock-add-keywords 'kbd-mode macro-regexp) > (font-lock-remove-keywords 'kbd-mode macro-regexp)))) > > ;;; Vars > > (defvar kbd-mode-syntax-table > (let ((st (make-syntax-table))) > ;; Use ;; for regular comments and #| |# for line comments. > (modify-syntax-entry ?\; ". 12b" st) > (modify-syntax-entry ?\n "> b" st) > (modify-syntax-entry ?\# ". 14" st) > (modify-syntax-entry ?\| ". 23" st) > ;; We don't need to highlight brackets, as they're only used inside > ;; layouts. > (modify-syntax-entry ?\[ "." st) > (modify-syntax-entry ?\] "." st) > ;; We highlight the necessary strings ourselves. > (modify-syntax-entry ?\" "." st) > st) > "The basic syntax table for `kbd-mode'.") > > (defvar kbd-mode--font-lock-keywords > (let ((kexpr-regexp (regexp-opt kbd-mode-kexpr 'w= ords)) > (token-regexp (regexp-opt kbd-mode-tokens 'w= ords)) > (defcfg-options-regexp (regexp-opt kbd-mode-defcfg-options 'w= ords)) > (button-modifiers-regexp (regexp-opt kbd-mode-button-modifiers 'w= ords)) > (function-one-regexp > (concat "\\(?:\\(" > (regexp-opt kbd-mode-function-one) > "\\)\\([[:space:]]+[[:word:]]+\\)\\)")) > ;; Only highlight these strings; configuration files may explicit= ly > ;; use a " to emit a double quote, so we can't trust the default > ;; string highlighting. > (string-regexp > (concat "\\(['\(]" > (regexp-opt kbd-mode-show-string) > "\\)\\(\\S)+\\)\)"))) > `((,token-regexp (1 'kbd-mode-token-face )) > (,kexpr-regexp (1 'kbd-mode-kexpr-face )) > (,button-modifiers-regexp (1 'kbd-mode-button-modifier-face)) > (,defcfg-options-regexp (1 'kbd-mode-defcfg-option-face )) > (,function-one-regexp > (1 'kbd-mode-kexpr-face ) > (2 'kbd-mode-variable-name-face)) > (,string-regexp > ("\"[^}]*?\"" > (progn (goto-char (match-beginning 0)) (match-end 0)) > (goto-char (match-end 0)) > (0 'kbd-mode-string-face t))))) > "Keywords to be syntax highlighted.") > > ;;; Define Major Mode > > ;; Because the configuration language is in a lispy syntax, we can > ;; inherit from any lisp mode in order to get good parenthesis handling > ;; for free. > > (defvar kbd-mode-map > (let ((map (make-sparse-keymap))) > (define-key map (kbd "C-c C-c") #'kbd-mode-start-demo) > (define-key map (kbd "C-c C-z") #'kbd-mode-switch) > map)) > > ;;;###autoload > (define-derived-mode kbd-mode emacs-lisp-mode "Kbd" > "Major mode for editing `.kbd' files. > > For details, see `https://github.com/kmonad/kmonad'." > (set-syntax-table kbd-mode-syntax-table) > (use-local-map kbd-mode-map) > (font-lock-add-keywords 'kbd-mode kbd-mode--font-lock-keywords) > (kbd-mode--show-macros? kbd-mode-show-macros) > ;; HACK > (defadvice redisplay (after refresh-font-locking activate) > (when (derived-mode-p 'kbd-mode) > (font-lock-fontify-buffer)))) I didn't realise that this was being evaluated every time the major mode is initialised... > > ;; Associate the `.kbd' ending with `kbd-mode'. > ;;;###autoload > (add-to-list 'auto-mode-alist '("\\.kbd\\'" . kbd-mode)) > > ;;;; Demo Minor Mode > > (defvar kbd-mode-demo-file nil > "Path to the users configuration file. > This is used in `kbd-mode-demo-mode' for deciding what > configuration to compile.") > > (defvar kbd-mode-had-kmonad? nil > "Whether the user had a running kmonad instance. > This controls whether kmonad will be restarted by mean of > `kbd-mode-start-kmonad' after exiting `kbd-mode-demo-mode'.") > > (defvar kbd-mode-demo-mode-map > (let ((map (make-sparse-keymap))) > (define-key map (kbd "C-c C-c") #'kbd-mode-stop-demo) > (define-key map (kbd "C-c C-z") #'kbd-mode-switch) > map)) > > ;;;###autoload > (define-minor-mode kbd-mode-demo-mode > "Toggle kmonad demo mode. > This is a minor mode, in which users can test their > configurations." > :lighter " kbd-demo" > :keymap kbd-mode-demo-mode-map This should be inferred. > > (when kbd-mode-demo-mode > (unless (kbd-mode--valid-config?) > (kbd-mode--show-error))) > > ;; Handle toggle > (when kbd-mode-magic-focus > (cond (kbd-mode-demo-mode > (add-hook 'window-selection-change-functions #'kbd-mode--toggl= e-demo nil t) > (add-hook 'focus-in-hook #'kbd-mode--create-kmonad-process nil= t) > (add-hook 'focus-out-hook #'kbd-mode--kill-demo-process nil t)) > (t > (remove-hook 'window-selection-change-functions #'kbd-mode--to= ggle-demo t) > (remove-hook 'focus-in-hook #'kbd-mode--create-kmonad-process = t) > (remove-hook 'focus-out-hook #'kbd-mode--kill-demo-process t))= ))) > > ;;;; Interactive Functions > > ;;;###autoload > (defun kbd-mode-start-demo () > "Try the current configuration in a demo buffer. > Use `kbd-mode-stop-demo' to stop the demo. If the configuration > file has errors, the demo will not start and an error buffer will > be shown instead." > (interactive) > (setq kbd-mode-demo-file > (kbd-mode--find-kbd-file (buffer-file-name (current-buffer)))) > (if (not (kbd-mode--valid-config?)) > (kbd-mode--show-error) > (when (shell-command "ps -C kmonad") Shell-command is usually used for interactive stuff. And I don't know what you are trying to test the return value for here. (shell-command "true") ;;=3D> 0 (shell-command "false") ;;=3D> 1 (shell-command "foo") ;;=3D> 127 As the documentation says: In Elisp, you will often be better served by calling =E2=80=98call-= process=E2=80=99 or =E2=80=98start-process=E2=80=99 directly, since they offer more con= trol and do not impose the use of a shell (with its need to quote arguments). > (setq kbd-mode-had-kmonad? t) > (kbd-mode--kill-kmonad)) > (kbd-mode--create-demo-buffer) > (pop-to-buffer "*kmonad-demo*") > (kbd-mode--create-kmonad-process) > (kbd-mode-demo-mode t))) > > (defun kbd-mode-stop-demo () > "Stop the currently running demo." > (interactive) > (with-current-buffer "*kmonad-demo*" > (kbd-mode-demo-mode 0) > (kill-buffer-and-window) > (kbd-mode--kill-demo-process) > (when kbd-mode-had-kmonad? > (kbd-mode--start-kmonad)))) > > (defun kbd-mode-switch () > "Switch between the demo window and the config file." > (interactive) > (select-window (get-buffer-window > (if (and (equal (buffer-name) "*kmonad-demo*") > kbd-mode-demo-mode) > (get-file-buffer kbd-mode-demo-file) > "*kmonad-demo*")))) > > ;;;; Helper Functions > > (defun kbd-mode--create-demo-buffer () > "Create the *kmonad-demo* buffer." > (unless (get-buffer "*kmonad-demo*") > (display-buffer (get-buffer-create "*kmonad-demo*") > '(display-buffer-at-bottom > (window-height . 0.15))))) > > (defun kbd-mode--find-kbd-file (&optional file) > "Find the config file. > If the optional argument FILE is given, use it instead. > Otherwise, prompt the user for a choice." > (if (and file (string=3D (file-name-extension file) "kbd")) > file > (expand-file-name (read-file-name "Choose configuration file")))) > > (defun kbd-mode--valid-config? () > "Check if the current configuration is valid." > (let ((command (kbd-mode--get-config-validation-command))) > (eq 0 (shell-command command)))) > > (defun kbd-mode--create-kmonad-process () > "Start the kmonad demo process in a dedicated buffer." > (when (get-buffer-process "*kmonad*") > (kbd-mode--kill-demo-process)) > (start-process "kmonad-emacs" "*kmonad*" "kmonad" kbd-mode-demo-file)) > > (defun kbd-mode--kill-demo-process () > "Kill demo kmonad process, if possible." > (when (get-buffer-process "*kmonad*") > (kill-process "*kmonad*"))) There might be a race condition here. > > (defun kbd-mode--kill-kmonad () > "Kill (or suspend) a running kmonad instance. > The command used to kill kmonad is given by the > `kbd-mode-kill-kmonad' variable." > (if kbd-mode-kill-kmonad > (shell-command kbd-mode-kill-kmonad) > (error "To kill the running kmonad instance, customize the `kbd-mode-= kill-kmonad' variable!"))) > > (defun kbd-mode--start-kmonad () > "Start (or resume) a new kmonad process. > The command used to start kmonad is given by the > `kbd-mode-start-kmonad' variable." > (if kbd-mode-kill-kmonad > (call-process-shell-command > ;; Force the command to be executed asynchronously. > (if (eq (aref kbd-mode-start-kmonad If you always know that you are comparing character codes, I'd use =3D to be more specific and trigger an error if something else occurs. > (1- (length kbd-mode-start-kmonad))) > ?&) > kbd-mode-start-kmonad > (concat kbd-mode-start-kmonad "&"))) > (error "To restart kmonad, customize the `kbd-mode-start-kmonad' vari= able!"))) > > (defun kbd-mode--toggle-demo (&optional _window) > "Toggle the kmonad demo process. > When the users exits the demo window, kill the demo process and > start a \"normal\" kmonad process instead. When re-entering the > demo window, do the opposite; i.e., kill the running kmonad > instance and spawn a demo process." > (cond ((kbd-mode--was-demo?) > (kbd-mode--kill-demo-process) > (kbd-mode--start-kmonad)) > ((kbd-mode--valid-config?) > (kbd-mode--kill-kmonad) > (kbd-mode--create-kmonad-process)) > (t > (kbd-mode--start-kmonad) > (kbd-mode--show-error)))) > > (defun kbd-mode--was-demo? () > "Was the previous buffer the kmonad demo buffer?" > (equal (window-buffer (previous-window)) eq should be enough here. > (get-buffer "*kmonad-demo*"))) > > (defun kbd-mode--show-error () > "Show configuration errors in a compilation buffer." > (when kbd-mode-demo-mode > (quit-window 'kill "*kmonad-demo*")) > (compile (kbd-mode--get-config-validation-command))) > > (defun kbd-mode--get-config-validation-command () > "Get validation command for `kbd-mode-demo-file'." > (concat "kmonad -d " kbd-mode-demo-file)) > > ;;;; Integration with `compilation-mode' > > (add-to-list 'compilation-error-regexp-alist 'kbd) > (add-to-list 'compilation-error-regexp-alist-alist > '(kbd "^kmonad: Parse error at \\([0-9]+\\):\\([0-9]+\\)" ni= l 1 2)) > > (provide 'kbd-mode) > > ;;; kbd-mode.el ends here All in all it looks fine, most of my superficial comments are nitpicks. --=20 Philip Kaludercic on siskin
X-Loop: help-debbugs@HIDDEN Subject: bug#73016: Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA Resent-From: Tony Zorman <tonyzorman@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 06 Sep 2024 11:50:02 +0000 Resent-Message-ID: <handler.73016.B73016.17256233876041 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 73016 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Philip Kaludercic <philipk@HIDDEN>, Jeremy Bryant <jb@HIDDEN> Cc: 73016 <at> debbugs.gnu.org Received: via spool by 73016-submit <at> debbugs.gnu.org id=B73016.17256233876041 (code B ref 73016); Fri, 06 Sep 2024 11:50:02 +0000 Received: (at 73016) by debbugs.gnu.org; 6 Sep 2024 11:49:47 +0000 Received: from localhost ([127.0.0.1]:52354 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1smXTG-0001ZM-BU for submit <at> debbugs.gnu.org; Fri, 06 Sep 2024 07:49:46 -0400 Received: from mout-p-102.mailbox.org ([80.241.56.152]:50350) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <tonyzorman@HIDDEN>) id 1smXTD-0001Ym-Ck for 73016 <at> debbugs.gnu.org; Fri, 06 Sep 2024 07:49:44 -0400 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4X0Y4j3sX2z9skX; Fri, 6 Sep 2024 12:53:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1725620037; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OU1hmn9kxBQL7ANh3+ZoVkBCyvLJ7VQFg+nxmdyr9A8=; b=G2/trzvtd8iny1oO/X5C6bsrDCgGUTbgzS0PSAEhf1ralBhpuXwr2v0qybZIEmks5a+zSB uPc1gtBWbBOdMgFOMUSyVgFJWpHaZnNtmhT/M3BB6WWgVYGw73pTiYGVUQutKfsPvs5PGW AfnGx4ADkftGIA3oWKLVvveW4ZSuJWsIKokiLUxgjnoJiJy0Vj6WdJbPapI/IF8bAkUfsq AnYB3jPxFF/lOf+ih5EeOJmIUuHnlFWSeq1Hts7EdlbqloCR+ZL9lfZJtfOv8raURMv5ey lZd6kgXar45jIEQrf1x0J78/qNaivUuO3e7bbfE072SVPq8b9RM97zQjEcWO8Q== From: Tony Zorman <tonyzorman@HIDDEN> In-Reply-To: <87wmjqjuiz.fsf@HIDDEN> References: <875xrcfkiy.fsf@HIDDEN> <87wmjqjuiz.fsf@HIDDEN> Date: Fri, 06 Sep 2024 12:53:53 +0200 Message-ID: <87r09x59z2.fsf@hyperspace> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-MBO-RS-META: 6fexioocjq96nnbkizxqx66fxwnzo3ug X-MBO-RS-ID: a623028260f8a805128 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) Hi, thanks to Jeremy for submitting this, and to Philip for reviewing! I'm travelling right now, so I'll keep this short; more to come in a few days I hope. =20 On Thu, Sep 05 2024 09:53, Philip Kaludercic wrote: > [=E2=80=A6 12 lines elided =E2=80=A6] > >> On behalf of the author, Tony Zorman, I would like to request >> consideration to include it in NON-GNU ELPA. > > Just for the sake of the protocol, is there a reason against adding the > package to GNU ELPA? There has been at least one non-trivial contribution to the package, as well as several smaller ones. While I have assigned copyright to the FSF for Emacs and ELPA related things, I don't know whether the same can be said of the other contributors. >> The author is conscious that the following snippet should be improved >> and we are soliciting recommendations on how to improve it. >> ;; HACK >> (defadvice redisplay (after refresh-font-locking activate) >> (when (derived-mode-p 'kbd-mode) >> (font-lock-fontify-buffer)))) > > I agree, we should get rid of that. But first, what is the intention? > What breaks if we just remove this advice? When specifying the keyboard layout, the configuration language accepts most special symbols verbatim (as in, one can just write @ to have that symbol bound to a key). This includes " for double quotes, meaning the highlighting of strings has to be taken care of be the mode=E2=80=94at leas= t, I think so. This produces inconsistent behaviour that I was never really a fan of, especially when moving things around. For example, going from=20 (f "string") to=20 (f "string") would "unhighlight" the string until one refreshes the syntax highlighting for the buffer via e.g. font-lock-update, or wait until this happens by itself. The advice is nothing more but a band-aid such that the latter happens more often. It may well be that I overlooked something about Emacs's way of going about string highlighting back when I wrote the mode, and so far I haven't had the drive to look back into this. Tony --=20 Tony Zorman | https://tony-zorman.com
X-Loop: help-debbugs@HIDDEN Subject: bug#73016: Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA Resent-From: Tony Zorman <tonyzorman@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Sat, 14 Sep 2024 08:44:01 +0000 Resent-Message-ID: <handler.73016.B73016.172630338825318 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 73016 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Philip Kaludercic <philipk@HIDDEN>, Jeremy Bryant <jb@HIDDEN> Cc: 73016 <at> debbugs.gnu.org Received: via spool by 73016-submit <at> debbugs.gnu.org id=B73016.172630338825318 (code B ref 73016); Sat, 14 Sep 2024 08:44:01 +0000 Received: (at 73016) by debbugs.gnu.org; 14 Sep 2024 08:43:08 +0000 Received: from localhost ([127.0.0.1]:44756 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1spON1-0006aI-OQ for submit <at> debbugs.gnu.org; Sat, 14 Sep 2024 04:43:08 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]:50364) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <tonyzorman@HIDDEN>) id 1spOMy-0006Zf-HK for 73016 <at> debbugs.gnu.org; Sat, 14 Sep 2024 04:43:06 -0400 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4X5Pn26Dwpz9tDX; Sat, 14 Sep 2024 10:42:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1726303334; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=mza1euw9e/3N5U8rlu1vISAVxSLE9qDBck4bDx6ZQP8=; b=UUMvRZ7/KcrbVPQ4Sf+4g4WsDlyxsXOpIcRW57Lra+lO7JgIyiOjQVS1WVs5VywI2R51wQ nESY/XYZknaRnOAxTM2grouuQoyzqqXv8xs7Tegca5mFbkmKJWTk5xAkhykY4RIKOty+5k 3yWku6xhUTYi2jcX8F0VNSaoyxstyXsa5na6TkLiiu/30L4afD8cMcT3qp2gr2fF01kneQ jbQ9z/aaGbH+fF622W70cqbPG7t/B3UlmN94LaulE6ueC7CnUMcjsxdXOcdsiK6JuQYZ3c dKUUPVWriLEahepwuSJRiNqiVHYIMis3UzXOa6xvJbkWI5bLf94sgaew8jSahw== From: Tony Zorman <tonyzorman@HIDDEN> In-Reply-To: <87wmjqjuiz.fsf@HIDDEN> References: <875xrcfkiy.fsf@HIDDEN> <87wmjqjuiz.fsf@HIDDEN> Date: Sat, 14 Sep 2024 10:42:13 +0200 Message-ID: <87cyl6bp96.fsf@hyperspace> MIME-Version: 1.0 Content-Type: text/plain X-MBO-RS-ID: 7d4cd1243c31d82d8b6 X-MBO-RS-META: t4woeycty11bke93hdnxdk6g1ssp41co X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) On Thu, Sep 05 2024 09:53, Philip Kaludercic wrote: >> :type '(repeat string) >> :group 'kbd-highlight) > > Where is this group defined? The applies below. It was the first expression after the ";;;; Custom variables" comment. I've moved it up to the other groups. >> (defun kbd-mode--kill-demo-process () >> "Kill demo kmonad process, if possible." >> (when (get-buffer-process "*kmonad*") >> (kill-process "*kmonad*"))) > > There might be a race condition here. Mh, can you expand on this? I don't think that the *kmonad* buffer is created in the vicinity of this code. Tony -- Tony Zorman | https://tony-zorman.com
X-Loop: help-debbugs@HIDDEN Subject: bug#73016: Potential inclusion of kbd-mode, part of kmonad, in Non-GNU ELPA Resent-From: Philip Kaludercic <philipk@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Sat, 14 Sep 2024 10:11:01 +0000 Resent-Message-ID: <handler.73016.B73016.172630863412387 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 73016 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tony Zorman <tonyzorman@HIDDEN> Cc: Jeremy Bryant <jb@HIDDEN>, 73016 <at> debbugs.gnu.org Received: via spool by 73016-submit <at> debbugs.gnu.org id=B73016.172630863412387 (code B ref 73016); Sat, 14 Sep 2024 10:11:01 +0000 Received: (at 73016) by debbugs.gnu.org; 14 Sep 2024 10:10:34 +0000 Received: from localhost ([127.0.0.1]:44903 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1spPje-0003Dj-1T for submit <at> debbugs.gnu.org; Sat, 14 Sep 2024 06:10:34 -0400 Received: from mout01.posteo.de ([185.67.36.65]:37617) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <philipk@HIDDEN>) id 1spPjb-0003DS-Ry for 73016 <at> debbugs.gnu.org; Sat, 14 Sep 2024 06:10:33 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 8FF42240028 for <73016 <at> debbugs.gnu.org>; Sat, 14 Sep 2024 12:10:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1726308615; bh=bmhZ0kWT97TSn9BbawNHSjH77mG6RsAjO1WUsD6qmWo=; h=From:To:Cc:Subject:Autocrypt:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:From; b=GxTH+gbLkMAo7lTzwVQHwpGUiRKkICJpJDEijOeREeOfRQm1EHBIYQPXxiNMoMCYY eG5+EfvYisLXVQ8nMtzcFe9XzKqDqIslQTWEhcukZHactPxMhzlaU2m7cCYhnb4RZ1 nGC2tAqdP19FF4tF8VIN/1COqnwpUL3ScTRqaTnNoR1GCaJf9xDLYFqQhGn7f8ZUee rP9EESJ6EIxn1adAFx1fO1o2+aDCYi72ZVlBhc0tlnU8b3sM1BjEz+UrWdPAcCQEjo mrP+a0dE3oGSPnOMWgG1DwZ3V4gIDuItrkxhuRroWEIV+J+N38WqQsYzICp8fCY9us UpWhUxrKLhD4w== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4X5RkZ3wKFz9rxP; Sat, 14 Sep 2024 12:10:14 +0200 (CEST) From: Philip Kaludercic <philipk@HIDDEN> In-Reply-To: <87cyl6bp96.fsf@hyperspace> (Tony Zorman's message of "Sat, 14 Sep 2024 10:42:13 +0200") References: <875xrcfkiy.fsf@HIDDEN> <87wmjqjuiz.fsf@HIDDEN> <87cyl6bp96.fsf@hyperspace> Autocrypt: addr=philipk@HIDDEN; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM OpenPGP: id=philipk@HIDDEN; url="https://keys.openpgp.org/vks/v1/by-email/philipk@HIDDEN"; preference=signencrypt Date: Sat, 14 Sep 2024 10:10:13 +0000 Message-ID: <871q1m4kca.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) Tony Zorman <tonyzorman@HIDDEN> writes: > On Thu, Sep 05 2024 09:53, Philip Kaludercic wrote: >>> :type '(repeat string) >>> :group 'kbd-highlight) >> >> Where is this group defined? The applies below. > > It was the first expression after the ";;;; Custom variables" comment. > I've moved it up to the other groups. 1+ >>> (defun kbd-mode--kill-demo-process () >>> "Kill demo kmonad process, if possible." >>> (when (get-buffer-process "*kmonad*") >>> (kill-process "*kmonad*"))) >> >> There might be a race condition here. > > Mh, can you expand on this? I don't think that the *kmonad* buffer is > created in the vicinity of this code. I believe I might have misread something, as I recall thinking about a `while'-loop. > Tony -- Philip Kaludercic on siskin
Received: (at control) by debbugs.gnu.org; 3 Nov 2024 06:05:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 03 01:05:27 2024 Received: from localhost ([127.0.0.1]:58203 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1t7Tjr-0001PX-M1 for submit <at> debbugs.gnu.org; Sun, 03 Nov 2024 01:05:27 -0500 Received: from mail-ej1-f43.google.com ([209.85.218.43]:48405) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>) id 1t7Tjp-0001PK-Ev for control <at> debbugs.gnu.org; Sun, 03 Nov 2024 01:05:25 -0500 Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-a86e9db75b9so491965566b.1 for <control <at> debbugs.gnu.org>; Sat, 02 Nov 2024 23:05:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730613865; x=1731218665; darn=debbugs.gnu.org; h=to:subject:message-id:date:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=A2N2BJ3+YKI8aQjfUq/tOYKUCoNCZ1SpaniSv0/Ks9I=; b=K1svKAKJnnGMUQYbHkA0j44IX8sqNwhCO+5ZdYYce1vI3DuV5b8T7CXHJklXkebHMm LG7nRfVBInSGoMvmmgLDTgm0NvSPvdAyQotoIeSFNfqKtKIoBttwuzdXCqj8vJkJqH3j Ys115fDpjBvyTsqGMv/N78/3b5Om8GF+PqLzvQJ7hLqAvr6D0w3DYUwSWL6a8V/mCewJ S9cMldSe55XBifS3VaWAIAxOM/MuNCCYRWOIuYFf6iZJxXUX31810MMPrVSMgEqpOCMs 9RvhuptU/4bPcS8BPpupb2t36aDU27KAc2UthozMavX9FpdWVA3fANIBbKVYvJ4Z+u0B Qdew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730613865; x=1731218665; h=to:subject:message-id:date:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=A2N2BJ3+YKI8aQjfUq/tOYKUCoNCZ1SpaniSv0/Ks9I=; b=bm64hiJPliZYhiUoa90+LQUJ5czNpIH1G7a6kZBZFado96ZBCanOYTNBcFagwtNuGW x/0yE/G1j1McIW68iRnqvB5nXZ9h1wYNHCOfjN2zPMBFvtQz935zRTjG3OCCxrdyO8ch +u1wpvCIybN5tnglm4J9G+BuQ+cPGvOzbkDZV67TVcj1vnEJbZadrvuWjvgtZYnEm7qw Uv/XdKsWzhQcXEzIpltZf0MTUFEnfpFQko2rfcCGZT2xSEFjgq088+JQTfZWbz2zn06F y2VR+XNSixGLyOD2wWSJv3ccSSdB9qKM1aWBt2LdKq6XtHhQhwevIwpeEUbH8rC0VaZ5 iGPA== X-Gm-Message-State: AOJu0Yw7h8dzgdKOQSeqWsC3LKMQkl30Ns9BOjGVDcIB5oMDYn5x4Qrr exygqSvTqwDq2vs4jMVlFCZYx9lB7ol9FEHvDdquX4qfujyzHkZVm4a/mnNLUHTvtLyCUuj6mJU 1RFSURJWtb6VA5U1Prho+hg1gff493Q== X-Google-Smtp-Source: AGHT+IF3zTXDzhQUUTrwkuB3nMPRJ3HVygMEIvMRCy4xKi+cuyE5f1vL1RZ75kX73h+cOk8/GFPWphpoN/V32ZcXhiQ= X-Received: by 2002:a17:907:2d0e:b0:a9a:2afc:e4ed with SMTP id a640c23a62f3a-a9e5092e22bmr1222728066b.32.1730613864672; Sat, 02 Nov 2024 23:04:24 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sat, 2 Nov 2024 23:04:24 -0700 From: Stefan Kangas <stefankangas@HIDDEN> MIME-Version: 1.0 Date: Sat, 2 Nov 2024 23:04:24 -0700 Message-ID: <CADwFkm=oakgMF9c1W0-y6Yj45O95ahPhQMQmsV4QDjRqf87+BQ@HIDDEN> Subject: control message for bug #73016 To: control <at> debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) severity 73016 wishlist quit
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.