From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: Native compilation of Keyboard Macros Date: Sat, 17 Sep 2022 18:26:45 +0000 Message-ID: <87k061g8m2.fsf@posteo.net> References: <878rmj408c.fsf@posteo.net> <86wna1c2hl.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="756"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Stefan Monnier , emacs-devel@gnu.org, Andrea Corallo To: Juri Linkov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Sep 17 20:27:55 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oZcXi-000AcJ-C7 for ged-emacs-devel@m.gmane-mx.org; Sat, 17 Sep 2022 20:27:54 +0200 Original-Received: from localhost ([::1]:52718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oZcXh-0003j7-9t for ged-emacs-devel@m.gmane-mx.org; Sat, 17 Sep 2022 14:27:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:35874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oZcWl-00032n-H0 for emacs-devel@gnu.org; Sat, 17 Sep 2022 14:26:55 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]:60533) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oZcWi-0002XG-TX for emacs-devel@gnu.org; Sat, 17 Sep 2022 14:26:54 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id C1FFA240103 for ; Sat, 17 Sep 2022 20:26:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1663439210; bh=jKWM1UBvvqmQpfJ5QHR2DZ+lBWxz7pPIhy9mUowyMfM=; h=From:To:Cc:Subject:Autocrypt:Date:From; b=Mwak7dRJJ/BpnZesRvgh4/b7Xa8/NX1qDxdXvSJQpTcl+lczBxO/jzeWVrgo7mK3L 36qy+nVw9BmyCpYaV4wxPaNXcZl41J3QBzWUb2i41OUCNRvvbWqq7frXULfxqiQK7W gWuO5giaN+XTHw7ovvX78UNZn+GZOfcrpnQq0qp/tFtgZyAT7BJNwbEassYApgo9Yq NsCSBevrpg+skDKzRoSwRqi0kTSu+UupKcVXaP4PpxcoXJ1pjFID5EkI6FhtSOgECL 2Qud1lNEWvLFQB+i0NpQrHHQVniZX2wjn0wuY2Vlorcikad+C0T4HcJYK9IX7ZOV// 1VjX2sW15UbbA== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4MVKCX6PQ8z9rxN; Sat, 17 Sep 2022 20:26:46 +0200 (CEST) In-Reply-To: <86wna1c2hl.fsf@mail.linkov.net> (Juri Linkov's message of "Sat, 17 Sep 2022 20:52:38 +0300") Autocrypt: addr=philipk@posteo.net; prefer-encrypt=nopreference; keydata= mDMEYHHqUhYJKwYBBAHaRw8BAQdAp3GdmYJ6tm5McweY6dEvIYIiry+Oz9rU4MH6NHWK0Ee0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiQBBMWCAA4FiEEDM2H44ZoPt9Ms0eHtVrAHPRh1FwFAmBx6lICGwMFCwkIBwIGFQoJ CAsCBBYCAwECHgECF4AACgkQtVrAHPRh1FyTkgEAjlbGPxFchvMbxzAES3r8QLuZgCxeAXunM9gh io0ePtUBALVhh9G6wIoZhl0gUCbQpoN/UJHI08Gm1qDob5zDxnIHuDgEYHHqUhIKKwYBBAGXVQEF AQEHQNcRB+MUimTMqoxxMMUERpOR+Q4b1KgncDZkhrO2ql1tAwEIB4h4BBgWCAAgFiEEDM2H44Zo Pt9Ms0eHtVrAHPRh1FwFAmBx6lICGwwACgkQtVrAHPRh1Fw1JwD/Qo7kvtib8jy7puyWrSv0MeTS g8qIxgoRWJE/KKdkCLEA/jb9b9/g8nnX+UcwHf/4VfKsjExlnND3FrBviXUW6NcB Received-SPF: pass client-ip=185.67.36.66; envelope-from=philipk@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 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_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:295540 Archived-At: Juri Linkov writes: >> So, I think you should focus on the problem of turning a keyboard macro >> into code. We know it's impossible in general, so it has to be >> "user-visible" (i.e. the user specifically asks for it and is made aware >> that the result is a chunk of code which will not always run the same >> commands as the keyboard macro). >> >> You could have a "run kmacro and turn *this* execution into ELisp code". >> IIUC some people tried to do that already, but I can't remember where >> I saw that and my search-fu is weak right now. > > The last executed commands are already remembered at different levels, > so the hard task is to decide at what level to turn them to code: > > 1. at level of complex command execution, such as from the history > retrieved by `repeat-complex-command` (C-x ESC ESC), for example: > > (rgrep "macro" "* .*" "emacs/lisp/") > > 2. at level of commands corresponding to all typed keys, > such as retrieved by `view-lossage` (C-h l), > for example, for the same as above: > > M-x ;; execute-extended-command > r ;; self-insert-command > g ;; self-insert-command > r ;; self-insert-command > ;; minibuffer-complete > ;; minibuffer-complete-and-exit > m ;; self-insert-command > a ;; self-insert-command > c ;; self-insert-command > r ;; self-insert-command > o ;; self-insert-command > ;; exit-minibuffer > ;; exit-minibuffer > ;; minibuffer-complete-and-exit Intuitively I would expect the first level to make more sense, though I see that when considering commands like `self-insert-command' you couldn't just deduce all the command invocations and wrap them in a `progn' body. At the same time, what is there to compile on the second level? You still need to look up all the commands and invoke them. As Stefan said, it is perhaps necessary to either detect what commands can be safely converted into repeat-complex-command'-esque representations (and what commands can be assisted/transformed), and only optimise if that is possible.