From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id CfsDMPfGnGIQHgEAbAwnHQ (envelope-from ) for ; Sun, 05 Jun 2022 17:08:39 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id sMr3LffGnGJPXAEAG6o9tA (envelope-from ) for ; Sun, 05 Jun 2022 17:08:39 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id D32F739F41 for ; Sun, 5 Jun 2022 17:08:38 +0200 (CEST) Received: from localhost ([::1]:36608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nxrrq-0000lJ-0a for larch@yhetil.org; Sun, 05 Jun 2022 11:08:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37786) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nxrrA-0000k3-S2 for emacs-orgmode@gnu.org; Sun, 05 Jun 2022 11:07:57 -0400 Received: from mail-db8eur05olkn2051.outbound.protection.outlook.com ([40.92.89.51]:19229 helo=EUR05-DB8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nxrr8-00087L-2o for emacs-orgmode@gnu.org; Sun, 05 Jun 2022 11:07:56 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ihK0G0FxKManodiNfhQZd8HRLcgj7E2s2cuMNd0011VdlXy/gfkPmb8Jwx0tlhQBHG9GbTZh59kZxF0sBeFkliNQyPceqpUCxkJFqPZ8UfarEw7uUa93E+prMsAmSK1pgk2zn9Ypzt29zcRkL4OzG9Fnpn2cuHPcJ5hTV75fQCWzmR9MwXvrRpYc9DDQCn1yP4CgU4IweWeofoAh7+NZKvZdGjgMngAZa0OfwWL7SVo5qV9GWALx2f4ZLuH8x4JdZYgE/Qw6h+7KoH1LBUycZ6pqbadh1NZlw5Hl49jooEHpCk7euHBgUkj2rRZdjkvkdqxvma519p4K9E3sdRBWIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H0VmY2XvEEwMh1xvIAoCHZERDqCk3tg8NSM7uTVTvOg=; b=hWYACCBYzszRTON68VRW+7yhGmzIfkZtGq1GrU+tqBz8/Kjwb+/gevAWdBuztdfTUBWtqc+6oWkFQJoeEnZqWLSTxKkHiW1rZs/1Ih2cs5iilnTXWGI38Erc6o8H+1e7UCqutGkxDobGO2bXAjEXoDxzE1VLb2LD+d+XVBhylcdVv7GixpZHcNT/Vrtx96Q9mdqXJM2wPNmTMamKNoZ7dv5rs2X72LVRCC0igXIfsUXijpZtx1wkQpCdyi30ws732FNlaoaHhXDcolMCR7q1IjTapeKLdznuM00LA6hLXwitREsc3P953g566k4Ct9VI14tHf3Mgi2kGrPQYgSxYzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H0VmY2XvEEwMh1xvIAoCHZERDqCk3tg8NSM7uTVTvOg=; b=IWTyusY1LOSXzDepC4M66o6KHYJTW3Rtunju61D2d0/Ve3E4bHg+5GjbMNjVv5oVPauDwivD+36NuVjo2UkkxBfrrzYPZS49GwdFyc6mvXEB5k/0T6aW4EylblyOMmxiTrpLknCGTJfq9xf30K9+Lu6dXo26HJ3V+Q4NhuLweyHiAuZ33g5aGEnToFtFxcU+3sh3Pm0ajoI7r2WAPLwvCTo4qaxiC94GjXPJTqNstab5UagW/sPddZezgcTziVBGRmmcyiNGwZtGbKlrH5fkvWMtjVM+oFKSjvv0Wh9Ty4eCfqNJRiUozoZH1/6b7VQ42kRMWwk797FocOJfthP/KA== Received: from AM9PR09MB4977.eurprd09.prod.outlook.com (2603:10a6:20b:304::20) by PR2PR09MB3083.eurprd09.prod.outlook.com (2603:10a6:101:27::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.16; Sun, 5 Jun 2022 15:07:51 +0000 Received: from AM9PR09MB4977.eurprd09.prod.outlook.com ([fe80::48c7:3657:142f:a842]) by AM9PR09MB4977.eurprd09.prod.outlook.com ([fe80::48c7:3657:142f:a842%4]) with mapi id 15.20.5314.019; Sun, 5 Jun 2022 15:07:51 +0000 From: Arthur Miller To: Max Nikulin Cc: emacs-orgmode@gnu.org Subject: Re: Proposal: 'executable' org-capture-templaes References: <87mtf3tui1.fsf@localhost> <87pmjyco0x.fsf@localhost> <87fskrobiw.fsf@localhost> <87a6ay1enh.fsf@localhost> Date: Sun, 05 Jun 2022 17:07:49 +0200 In-Reply-To: (Max Nikulin's message of "Sun, 5 Jun 2022 14:36:05 +0700") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-TMN: [2ff0+r33jhTLGZTYUZVGwAlA4YuvJEg0] X-ClientProxiedBy: BE0P281CA0014.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:a::24) To AM9PR09MB4977.eurprd09.prod.outlook.com (2603:10a6:20b:304::20) X-Microsoft-Original-Message-ID: <87y1ybw3lm.fsf@live.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 906ea701-0045-4e60-9150-08da47052862 X-MS-TrafficTypeDiagnostic: PR2PR09MB3083:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9CQNRaxyIKPJ+RXmJWBzcdSqvZ+jghoDLAnIfySlDN94QDnO/tL7eQZJlnHlsGCF6CGTfGfMz13cwAy9YRwtcCcpvxohYjd5jmn1G0s7sxa1tNTTTyPZodB8ylYXCJoJF9fMvb0xAw7r7ku1V91gqtxKvr5KwXLfoTINSSZToGF4r7ETE7zdmK2VYqXZh/Fgv7cMx/lxS0Jn94UeOXrJDMHNY8yMaI5rSaR0eaD889updY1XkXIrOHs+TD+JplNlPteSQkmUdFyLD58fIJCbkvGlrS13zJf4F81paSEszqySnAHVWwEMo0y3ufXzXZV/Ru/p6fsNWxPnXiciQo+l6rZGfyzHOCPUWxRPfKZ44exakQnhS1ZCNlf8XOoqe6THZUVgxJssm/E1DhUJM77ncTtfGru9VqFTq3FwnGSmqEWHv7RMNPgOa8iOuLPvmNhUi60iRB/NSXMp3APoGEup+xXrQwxWOH0DXGZQb1QekhnsXeZfxBHwrolUytLvd37ADRs7wK01DxnzFLVDaPFox6Q8qpHfrrvxVj7LvMQ76rObsmB2zjiYR0R6mfN/VZwN7EK8ccEAmLttC17CweJ9ue4LoNnZYvuRqluET0zS3tiZOLPdsMyUrczVSb8pBZK+ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VVNOeDBXamdSNEU1UWdZZ1RlOXRvbTNkWkE0NlltYWJxK29HSUFBTlk0K3pO?= =?utf-8?B?NFlwOXI0VFVCejdkL2dqRXJZZ0oveGhITGFqUk41SFhoYWNNNkRZQjlWR2xp?= =?utf-8?B?TDYvWGM1MVJRYU5QSTJvZUhHK2pveVdMSXNkNmU2ZUZEOVU3dHBoQlVtVHNp?= =?utf-8?B?NXZuMzJsd3hXakRTVFhvWHFUaEFpZEZDeUxvOHN2S1VUMU5UVmJjVGlDS2R0?= =?utf-8?B?aUxwRGkrZEF1eHJDby9kTFRLRHNMdDhIbWNuV0ZOOGt2eGFmYWhJZndOWXYz?= =?utf-8?B?cWpXT2FrK0krNkxyS0pqSVRyckVXR3preHNMNEdLRk4zbTlLZHVQL3hycENy?= =?utf-8?B?MWtqekRzVUJ2OXVtM2xlU29TeUNkK0lmWnJSOU1NS2hHSnpJNDhMSmdJcFlY?= =?utf-8?B?cmRrWEcvOTlDRGl2RDdlNnN5VG1nNW1zVXREaGZDVmlyUndqN1BUbFdXcW54?= =?utf-8?B?S01qSXZ5a1NQbTFnUmFIaUhEamNUNER0QUpBWFF6QmRRekoxaFQzak1kMUZl?= =?utf-8?B?OEZVQS9zNFoyL3lrZCtQTmMvc0xNZk16VjlHSnhacUQvR1JVb0V2ZUhyaTF2?= =?utf-8?B?YjlGdTM0RGtBV0xVbldRZ25RU1dXS3NaZzg4RHpmbmhLVkRKTjI2aTlYak54?= =?utf-8?B?RTVJNnA4M1dnbmJEZjRFUngyeXdNMWZxeDVuS2pxM3Z3T2tKUFl0ZjR6RDlS?= =?utf-8?B?bERtZCsvYTdKbnJ1YW41dGppa1VZUHB0Q1M1M0J3bVFRRnZtMDlXMG1ITms3?= =?utf-8?B?cVJpa1VCZEQyNnlobW9KT3E3N2tRQzVaNk8xVVowQ2RWWXc1NXluampoR3Ix?= =?utf-8?B?eVljRnRrMjV4OHlJaHZSSXpPZWF6b0diaVBsUFpkMWkya2VaY2xGYUZFWnRm?= =?utf-8?B?RFpKVGFQUWo1MFNSWXRNNFJnbzNwYTcvdUxSSG5EV1BFY2I0clVBMWtvQmV0?= =?utf-8?B?RkM3WWN2a1llQnZENmdINkMrNGh5UzNuQ0Zya2FUZkFhS0x3Ti92aDFIbTJ4?= =?utf-8?B?bjNmUy9WcFJyZ1RydDB0cjgrU1Y2MWVISUNNOGd4RXdjd200SnNnRkJKQmpO?= =?utf-8?B?by9ET3BlQUlCOGs5MUFlM1VHcUNlVm9uQjY1cU41NXRyZFBLQ0lpQjJ2RGVY?= =?utf-8?B?ZWpTdlc3NFpjRS9UTnlZZkJUbWlxUklhb3FFdVM4QnZ5RXRYcDJ1WnlVTzJQ?= =?utf-8?B?VmluUFJvTU5SMTNNUU04a3VQb2tvajJ6dFJRSEE0bW83cmtIVE9ZanFXQkt4?= =?utf-8?B?cVl4TU53MmJoL0paM0tGbDZtUm1Cb1BOTVB1dHp4YUNOWDZUMGM3MzdiSC9H?= =?utf-8?B?bDZPWXRwSUd2a2tBcXgrMHU4YUlFYytjOUNaZ1E0akEyUUY3OFJ3NHpVbWlT?= =?utf-8?B?QWp3OUFvdTJDOG0xMktrdW5LS0l0MlFnMXZuUGxkNEZuTHpMTXMvcGlSVVBS?= =?utf-8?B?RWRTRm5XNFRPbUNtTlhUTDRwS29ZRVFKZUpXM2hSRjZIMm9hRjVFU20rZzdr?= =?utf-8?B?R21iVDAwQzF1dFZwT2ZBNGg2VGRSRHNQRDExKzRIVTVyN0dLNEVka1I4dHc4?= =?utf-8?B?TGdtdjB4Qmtic2xDd3U2OEdKaG8ydzFGYWhOeHBGV21pYkZzc0g3MnEvZFZ1?= =?utf-8?B?N0cyeHF0VnBVNmo4VkM2bHlVNlg0cjRzM3pwUDkvSno4YnRrKzVmcXdSZ0Va?= =?utf-8?B?TG1BeEVaSndNZlBPZFBXOExVcDNXS0daWndMNm5GWkpYQjVxOU00NHBrK0cy?= =?utf-8?B?Z2lBYVlZNjdCYit4OTQ2b1pLWXQ2aERGWnQwWmVaVGJRZjVmbENDSkFCN1JX?= =?utf-8?B?SWhEUndoUm5VRVVqREV2aC9haFZEY24zZ1RLeHFHbzFBa2YvREkzVUNCdVYx?= =?utf-8?B?OFNtaHQyLzl4cEU4c2VCRXg0Q3JFVTIzNHE2ZlJVZjV6U2o1ZTBZdkRUOGpW?= =?utf-8?Q?BTNTGwEVkgw=3D?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-64da6.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 906ea701-0045-4e60-9150-08da47052862 X-MS-Exchange-CrossTenant-AuthSource: AM9PR09MB4977.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2022 15:07:50.9486 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR09MB3083 Received-SPF: pass client-ip=40.92.89.51; envelope-from=arthur.miller@live.com; helo=EUR05-DB8-obe.outbound.protection.outlook.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-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-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1654441719; h=from:from:sender:sender: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:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=H0VmY2XvEEwMh1xvIAoCHZERDqCk3tg8NSM7uTVTvOg=; b=ua7vtfhmGboASsChATQ1U4voBXgO7mJRlvrn0yd0X40KEkv5VeuXjhZ75U75GBU2ZM1U2H lZlg2kKHMwRG9KhDVtBwMbVM7Jwjr5WF/4qsN/Oe5HTyROaJ3VqoXcLOMdPu/XZRAh8Khz jY/eN8ChXwtK2RASN6WX0UrrNex4zXD/TN8p0NrKBX1hbJdf+ffYGdKJIUgqUAE4uVY1dE cjVU3FcToGsVn3/picuzqqqDnnpmx6NRMOlBJMM2AYdRt5oGDRsxNZmX65WdDl8kFCcYJh ZmUl07cXb5yMCBUUNQc7Cg6ZuPpT4ts5udZREu00lCRN+Ihx+OffZewpv6AK8w== ARC-Seal: i=2; s=key1; d=yhetil.org; t=1654441719; a=rsa-sha256; cv=pass; b=iUdNrL/W2yRkyf7kSWh49CBjUkK5HCsjIfolPHXLuVgI492j6DwcKdFN/azoYRQt/j+k5a /VBni+UGPTc1Wztt1PyBKks3EUH5dsqoHcLzQ2UTUZ+ChrF18QkOTaFrh7tYc/iTY/OAo8 pLBePWGb/iKfrebpireeaho8rtnodYrmIixtblvlH2nsG6phBNcNuutE34q2mqnte7DWlA qVp3Kbxduo9LRpJGgYCA1+GhPl/5bInlOSrYFlzSG2b5Y2+2pyyUmLMmZ7vDxv8FfzRBDi 9COvh/siOb6WNxgGkFmfFbbOrC+UqAP8fOtdxJB0EyRVgGrSAZ8gwPDUwKVM3w== ARC-Authentication-Results: i=2; aspmx1.migadu.com; dkim=pass header.d=live.com header.s=selector1 header.b=IWTyusY1; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=pass (policy=none) header.from=live.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.51 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=live.com header.s=selector1 header.b=IWTyusY1; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=pass (policy=none) header.from=live.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: D32F739F41 X-Spam-Score: -3.51 X-Migadu-Scanner: scn1.migadu.com X-TUID: WzpFk+qhR63a Max Nikulin writes: > On 04/06/2022 22:35, Arthur Miller wrote: >> >> However before I continue, I am thinking of ditching the 'read-key' comp= letely >> and switching to "standard" Emacs way of implementing interactivity via = mode and >> mode-map. I am currently playing with such implementation, which to me a= ppears >> both simpler (code reduction) and more flexible, but it does change the = mental >> model of how clients of org-mks are used, for example org-capture. > > Frankly speaking, I am quite confused concerning what you are trying to d= o in > particular. At some moment I had an impression that you were going to fac= tor out > of `org-capture' the menu that is already a separate function `org-mks'. >From the beginning I relized I can easily create menus with org-capture, bu= just definiing org-templates, which are simply lists, and wanted to generalize t= he org-capture to create menus that can execute ordinary functions, which 'exe= c' keyword did. After input from Ihor I agree that it isn't the best way, and = was able to refactor org-mks to create a menu where I can execute any lisp form= , when it comes in a list like this : ("h" "hello-word" (message "Hello, World")), where third element is just a lisp form. I have something like th= is: #+begin_src emacs-lisp (defun demo1 () "Simple illustration to recreate org-capture menu (visually only)." (interactive) (let ((quick-menu-key-decorator-chars "[]") (return (quick-menu ;; table test-templates ;; description '(:label "*Quick Select*" :text "Select a capture template\n=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D") ;; more tables '(("C" "Customize org-capture-templates" (customize-variable 'org-capture-templates)) ("q" "Abort" (user-error "Abort")))))) (if (called-interactively-p 'interactive) (message "%S" return) return))) (defun demo3 () "Illustrate nested menus, unicode separator and alternative decorator." (interactive) (let ((quick-menu-key-decorator-chars "<>") (quick-menu-vertical-separator ?=E2=94=80)) (quick-menu ;; table '(("g" "Greetings") ("gh" "Hello, World!" (message "Hello, World!")) ("gb" "Bar" (message "Hello, Bar!"))) ;; description nil ;; more tables '(("f" "Functions") ("ff" "Find File" (call-interactively #'find-file)) ("fo" "Open File" (flet ((next-read-file-uses-dialog-p () t)) (call-interactively 'find-file)))) '(("q" "Abort" (user-error "Abort")))))) =20 "quick-menu" is my refactoring of org-mks, definition looks like this: (defun quick-menu (table &optional description &rest tables) "Select a member of an alist with multiple keys. TABLE is an alist which should contain entries where the car is a string. There should be two types of entries. 1. prefix descriptions like (\"a\" \"Description\") This indicates that `a' is a prefix key for multi-letter selection, and that there are entries following with keys like \"ab\", \"ax\"... 2. Select-able members must have more than two elements, with the first being the string of keys that lead to selecting it, and the second a short description string of the item.=20 The command will then make a temporary buffer listing all entries that can be selected with a single key, and all the single key prefixes. When you press the key for a single-letter entry, it is selected= . When you press a prefix key, the commands (and maybe further prefixes) under this key will be shown and offered for selection. DESCRIPTON is a property list containing following members: :text a string placed over the selection in the buffer. :label a string used for the selections buffer name. :prompt a string used when prompting for a key. :always when `t', this menu is shown; even descended into submenus :horizontal when `t', if multiple menus are present they are rendered fr= om left to right, otherwise from top to bottom. :key-decorator a two-character string used to decorate command characters. = When this string is specified, it will take precedence over the global variable `quick-menu-key-decorator-chars'. TABLES are additional menus in the same format as TABLE. If there are more then one menus, they will be separated by a separator line rendered with character as specified in `quick-menu-vertical-separator'") #+end_src I have paramterized decorator character for shortcut keys as they appear in= the buffer, org-capture uses "[]", as well as menu separator, which is currentl= y hard-coded in org-capture, and I am currently trying to implement horizonta= l layout, where menus are stacked from left to right. I also have a not so ni= ce bug when drawing nested menu that it leaves undesired space where menus not visible after descension into current are; I have to redraw the entire menu= but haven't yet implemented it so I don't want to post a demo yet. But before I= fix redrawing and implement horizontal layout, I would like to switch to the different model of interaction and use ordinary mode map idioms instead of blocking read key. Since I need to rework current prototype for the re-draw= ing part, I can as well rework it to skip read-key at the same time. > Interface is blocking for purpose. Capture has single-task workflow > currently. Yes, I am aware of that. That is why I ask if it would be acceptable to swi= tch away from non-blocking interface. I totally agree that capture is a single-= task workflow, however more generalized menu should allow for other applications= as well. We can still achieve single-task workflow with org-capture, by simply= not allowing more then one org-capture menu buffer at a time, it is just that i= t won't block entire Emacs. So one could have more than one application of quick-menu, where for example org-capture is one application, some imaingar= y greating-app would be a different application, etc. > Capture data are stored in global variables, so parallel captu= res may > cause problems. Likely it is assumed that a user quickly selects template= and > necessary data are added to the target document buffer. Exactly. It is important that org-capture is one capture at the time so pe= ople don't mess their note files, agenda files etc. > Unsure if some > intermediate persistent store would be an improvement. Not sure what you mean here, but I don't plan to change anything in org-cap= ture itself, it should still be one-task at the time. > The following complain is mainly related to selection of a window to show= the > menu, but it should have in mind that some people use Emacs as window man= ager > and menu should not hide windows related to current activity. > > Eric S Fraga. Re: Bug: org-no-popups disregards > display-buffer-fallback-action. Mon, 15 Nov 2021 09:57:46 > +0000. https://list.orgmode.org/87fsrxeo6d.fsf@ucl.ac.uk > > Likely nobody performed any steps toward `transient' as the interface, bu= t due > to such requests it would be nice to have possibility to switch between m= enu > implementations. I am not building some generalized framework, as I said in my first respone= to Ihor :-).=20