From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Per Abrahamsen Newsgroups: gmane.emacs.devel Subject: Re: Customizing key bindings (was: Re: [CVS] f7, f8 bound..) Date: Wed, 04 Sep 2002 12:00:46 +0200 Organization: The Church of Emacs Sender: emacs-devel-admin@gnu.org Message-ID: References: <200208271621.g7RGLNm30516@rum.cs.yale.edu> <5xhehfe3aj.fsf@kfs2.cua.dk> <874rdfaytt.fsf@pot.cnuce.cnr.it> <5xvg5sh06u.fsf@kfs2.cua.dk> <20020830235528.GA13207@gnu.org> <87ofbji88u.fsf@emacswiki.org> <87sn0scb0b.fsf@emacswiki.org> <87bs7er99v.fsf@emacswiki.org> <877ki2r8nr.fsf@emacswiki.org> <87y9aipop2.fsf@emacswiki.org> NNTP-Posting-Host: localhost.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: main.gmane.org 1031133632 6488 127.0.0.1 (4 Sep 2002 10:00:32 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 4 Sep 2002 10:00:32 +0000 (UTC) Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 17mWxb-0001gW-00 for ; Wed, 04 Sep 2002 12:00:31 +0200 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.12 #1 (Debian)) id 17mXWk-0002wn-00 for ; Wed, 04 Sep 2002 12:36:50 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.10) id 17mWz9-0008C9-00; Wed, 04 Sep 2002 06:02:07 -0400 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.10) id 17mWy2-00085g-00 for emacs-devel@gnu.org; Wed, 04 Sep 2002 06:00:58 -0400 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10) id 17mWxz-00085E-00 for emacs-devel@gnu.org; Wed, 04 Sep 2002 06:00:57 -0400 Original-Received: from sheridan.dina.kvl.dk ([130.225.40.227]) by monty-python.gnu.org with esmtp (Exim 4.10) id 17mWxy-000854-00 for emacs-devel@gnu.org; Wed, 04 Sep 2002 06:00:55 -0400 Original-Received: from zuse.dina.kvl.dk (zuse.dina.kvl.dk [130.225.40.245]) by sheridan.dina.kvl.dk (8.9.3/8.9.3/Debian 8.9.3-21) with ESMTP id MAA07189 for ; Wed, 4 Sep 2002 12:00:53 +0200 Original-Received: (from abraham@localhost) by zuse.dina.kvl.dk (8.9.3+Sun/8.9.3) id MAA24259; Wed, 4 Sep 2002 12:00:47 +0200 (MEST) X-Authentication-Warning: zuse.dina.kvl.dk: abraham set sender to abraham@dina.kvl.dk using -f Original-To: emacs-devel@gnu.org X-Face: +kRV2]2q}lixHkE{U)mY#+6]{AH=yN~S9@IFiOa@X6?GM|8MBp/ In-Reply-To: <87y9aipop2.fsf@emacswiki.org> (Alex Schroeder's message of "Wed, 04 Sep 2002 02:45:45 +0200") Original-Lines: 58 User-Agent: Gnus/5.090007 (Oort Gnus v0.07) Emacs/21.1 (sparc-sun-solaris2.8) Errors-To: emacs-devel-admin@gnu.org X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.0.11 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Emacs development discussions. List-Unsubscribe: , List-Archive: Xref: main.gmane.org gmane.emacs.devel:7443 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:7443 Alex Schroeder writes: > Per, do you know the answer? I am too tired right now to keep at it. I forgot to define :match for the 'key-sequence' widget. I have included it below, together with a :validate for 'key-sequence-field'. But first some other comments: 1. We are modifying symbols, not a keymaps. Unfortunately, keymaps are mostly used directly, as values, rather than indirectly through symbols. I.e. If you do (use-local-map my-keymap) (setq my-keymap (make-sparse-keymap)) (define-key my-keymap [foo] 'bar) [foo] will not be bound on the current local keymap, but on the newly created keymap. I believe the easiest way to solve this is by changing Emacs to allow (use-local-map 'my-keymap) rather than changing cus-key.el to work on keymaps instead of variables. 2. You avoid the use of an extra keymap variable by instead storing the receipe for creating the keymap in a symbol property, thus making Stefan happy. However, it means all changes made from Lisp is lost whenever it is changed from customize. I think that is a poor trade-off, and would prefer an explicit variable for use from Lisp. (define-widget 'key-sequence 'group "Widget for entering key bindings." :tag "Read key sequence" :match 'key-sequence-match :value "" :value-create 'key-sequence-value-create :value-delete 'widget-children-value-delete :value-get 'widget-choice-value-get) (defun key-sequence-match (widget value) (stringp value)) (define-widget 'key-sequence-field 'string "Field for entering key bindings." :tag "Key sequence" :error "Not a well-formed key sequence" :validate 'key-sequence-field-validate :keymap key-sequence-widget-map) (defun key-sequence-widget-validate (widget value) (let ((value (widget-apply widget :value-get))) (condition-case (read-kbd-macro value) nil (error widget))))