From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Drew Adams" Newsgroups: gmane.emacs.devel Subject: RE: defcustom :type to use for a key sequence? Date: Thu, 15 Dec 2005 16:51:08 -0800 Message-ID: References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1134694408 19119 80.91.229.2 (16 Dec 2005 00:53:28 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 16 Dec 2005 00:53:28 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Dec 16 01:53:21 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1En3pP-0006fW-Aw for ged-emacs-devel@m.gmane.org; Fri, 16 Dec 2005 01:52:07 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1En3q3-00022N-Vo for ged-emacs-devel@m.gmane.org; Thu, 15 Dec 2005 19:52:48 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1En3pI-000229-UH for emacs-devel@gnu.org; Thu, 15 Dec 2005 19:52:01 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1En3pH-00021r-Lh for emacs-devel@gnu.org; Thu, 15 Dec 2005 19:52:00 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1En3pH-00021o-4y for emacs-devel@gnu.org; Thu, 15 Dec 2005 19:51:59 -0500 Original-Received: from [141.146.126.228] (helo=agminet01.oracle.com) by monty-python.gnu.org with esmtp (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.34) id 1En3rb-0006ry-P5 for emacs-devel@gnu.org; Thu, 15 Dec 2005 19:54:23 -0500 Original-Received: from rgmsgw300.us.oracle.com (rgmsgw300.us.oracle.com [138.1.186.49]) by agminet01.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id jBG19n2p003416 for ; Thu, 15 Dec 2005 19:09:49 -0600 Original-Received: from rgmsgw300.us.oracle.com (localhost [127.0.0.1]) by rgmsgw300.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id jBG0pELV016846 for ; Thu, 15 Dec 2005 17:51:14 -0700 Original-Received: from dradamslap (dhcp-amer-rmdc-csvpn-gw5-141-144-107-58.vpn.oracle.com [141.144.107.58]) by rgmsgw300.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with SMTP id jBG0pEMA016833 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Thu, 15 Dec 2005 17:51:14 -0700 Original-To: "Emacs-Devel" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) In-Reply-To: Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506 X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:47833 Archived-At: IMO, this is better (using a string type): (defcustom the-key "M-SPC" :type 'string) (define-key my-map (kbd the-key) 'the-cmd) Looks good, but how to, for instance, get the equivalent of each of these, which are not the same? (define-key my-map [S-tab] 'the-cmd) (define-key my-map [S-iso-lefttab] 'the-cmd) (define-key my-map [(shift ?\t)] 'the-cmd) I guess the last one would be done using S-TAB as input (so, `(kbd "S-TAB")'). (Is that correct?) But how would you input, say, the first one as a string? Would you input (so, `(kbd "")')? Or is it S- (so, `(kbd "S-")')? Or are those two different keys, both of which are different from S-TAB? Obviously, I'm not real clear on `kbd'. I don't find the Elisp manual too helpful on that either. If the external string (print) representation were used, as I think you suggest, then users would need to know the various string representations. That sounds like a good way to go. However, IMO, the presentation in the Elisp manual would need to be a bit better, if we start expecting users to use things like "" vs "S-TAB" to define bindings. Also, would the Emacs (not just Elisp) manual then also need to describe the string (print) representations? Maybe it's normal that only the Elisp manual describes key-binding syntax, but if we expect Customize users to specify key sequences using string (print) representations, then they will need to know the syntax. I don't know - I guess we could assume that such Customization would be for Elisp-savvy users (after all, we also allow :type `sexp'). In any case, even the Elisp manual doesn't explain the `kbd' syntax clearly, IMO. It gives a few simple examples (no menu items, for example), says that the syntax is "the syntax used in this manual" (whatever that is - where is that described?), and ends by sending you to node Edit Keyboard Macro(emacs) for the full syntax explanation ("same syntax that Edit Macro mode uses for editing keyboard macros"). However, I don't see any such syntax description at the referenced node, Edit Keyboard Macro. Is that perhaps the wrong xref? I'd like to see a good, clear description of how to specify any and all bindings with `kbd'. It also deserves a better place than the Info page "Keymap Terminology". This is about key-sequence syntax for use with `kbd'; it's not about keymap terminology. (Did I notice a thread here lately about the manual being updated in this regard? I'm looking at an old manual from July, so my comments here might be out-of-date.) It would be very useful to have a :type 'kbd that could DTRT re. :set etc. Yes. Although the name should be something more readable, such as :type 'key-sequence. It's bad enough that we use "key sequence" to stand for mouse and menu events too, but "kbd" emphasizes the _keyboard_ far too much. Also, there is no reason to use an abbreviation here. > (defcustom the-key [(meta ?\ )] "...") > (define-key my-map the-key 'the-cmd)) > > Suppose I have this: > > (defcustom the-key [(meta ?\ )] "...") > (define-key my-map the-key 'the-cmd)) > > A user might customize which key sequence is bound to > `the-cmd'. > > What :type is appropriate for the defcustom? I don't > see a type ready-made for key sequences. Just `string'? > Or is a `choice' of `string' and (what kind of?) > `vector' appropriate? How can the :type allow for any > key sequence (besides using just `sexp')?