From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.help Subject: RE: Customizing per-keymap key bindings through the customize interface? Date: Thu, 27 Jun 2013 06:57:41 -0700 (PDT) Message-ID: <8c49d765-2115-4db3-8507-b6f2c991d547@default> References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="__1372341461944161208abhmt119.oracle.com" X-Trace: ger.gmane.org 1372341492 3049 80.91.229.3 (27 Jun 2013 13:58:12 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 27 Jun 2013 13:58:12 +0000 (UTC) To: Klaus-Dieter Bauer , emacs help Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Jun 27 15:58:13 2013 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UsCi8-0007Wa-OY for geh-help-gnu-emacs@m.gmane.org; Thu, 27 Jun 2013 15:58:09 +0200 Original-Received: from localhost ([::1]:52929 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UsCi8-00049W-Fe for geh-help-gnu-emacs@m.gmane.org; Thu, 27 Jun 2013 09:58:08 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41040) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UsChr-00045T-WF for help-gnu-emacs@gnu.org; Thu, 27 Jun 2013 09:57:53 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UsChm-0003ud-3D for help-gnu-emacs@gnu.org; Thu, 27 Jun 2013 09:57:51 -0400 Original-Received: from userp1040.oracle.com ([156.151.31.81]:30407) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UsChl-0003uL-OE for help-gnu-emacs@gnu.org; Thu, 27 Jun 2013 09:57:46 -0400 Original-Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r5RDpOK8028130 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 27 Jun 2013 13:51:25 GMT Original-Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r5RDvgZT029107 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 27 Jun 2013 13:57:43 GMT Original-Received: from abhmt119.oracle.com (abhmt119.oracle.com [141.146.116.71]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r5RDvgwd029103; Thu, 27 Jun 2013 13:57:42 GMT In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.7 (607090) [OL 12.0.6668.5000 (x86)] X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 156.151.31.81 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:91773 Archived-At: --__1372341461944161208abhmt119.oracle.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > Is there currently some package available that allows managing custom > key bindings on a per-keymap-basis through the `customize` interface? Not really, AFAIK. But there might be some related discussion on emacs-devel or the Emacs bug list. > I got a bit annoyed recently by losing track of all the custom > keybindings I have made, so I wrote a function, that automatically > adds an entry in a menu in global-map for every custom keybinding. > Now I am intending to extend this to utilizing the custom interface for > creating keybindings on a per-mode basis. >=20 > While relatively easy to do, I'd prefer a commonly used solution, if > there is any. >=20 > PS: I'm still not sure whether such questions should go to emacs-help or > emacs-devel. Either is probably OK in this case. emacs-devel might be a bit better, since this would be a new development/feature. But with help-gnu-emacs you might get more info about existing 3rd-party features. You can also file Emacs enhancement requests, using `M-x report-emacs-bug'. FWIW, I sometimes provide user options that have key-binding values. Not a complete solution, but it can make things easier. For example, option `icicle-top-level-key-bindings' is an alist whose entries are of defcustom :type `icicle-key-definition', which means that they have the form (KEY COMMAND CONDITION), where KEY is either a key sequence (string or vector) to bind COMMAND to or a command to remap to COMMAND. COMMAND is bound according to the value of KEY, unless the result of evaluating CONDITION is nil. In Customize, to specify a key sequence, you choose `Key' in the `Value Menu', then enter a key description such as that returned by `C-h k'. For convenience, you can also insert a key in the key description by hitting `C-q' then the key. For example, to enter the key description `C-c M-k' you can use `C-q C-c C-q M-k'. Attached is what key bindings look like in Customize. In Lisp (e.g., to define the default value for a key-binding option), an unconditional key binding looks like this: ("\C-c=3D" icicle-imenu t) A conditional key binding looks like this: ([f10] lacarte-execute-menu-command (fboundp 'lacarte-execute-menu-command)) A conditional binding that remaps another command looks like this: (bmkp-tag-a-file icicle-tag-a-file (fboundp 'bmkp-tag-a-file)) KEY can also be expressed using `kbd', of course: `(,(kbd "C-c =3D") icicle-imenu t) or (list (kbd "C-c =3D") 'icicle-imenu t) This is the code that defines custom type `icicle-key-definition': (define-widget 'icicle-key-definition 'lazy "Key definition type for Icicle mode keys. A list of three components: KEY, COMMAND, CONDITION, that represents an `icicle-mode-map' binding of COMMAND according to KEY, if CONDITION evaluates to non-nil. KEY is either a key sequence (string or vector) or a command. COMMAND is a command. CONDITION is a sexp. If KEY is a command, then the binding represented is its remapping to COMMAND." :indent 1 :offset 0 :tag "" :type '(list (choice (key-sequence :tag "Key" :value [ignore]) ;; Use `symbolp' instead of `commandp', ;; in case the library defining the command is not loaded. (restricted-sexp :tag "Command to remap" :match-alternatives (symbolp) :value ignore)) ;; Use `symbolp' instead of `commandp'... (restricted-sexp :tag "Command" :match-alternatives (symbolp) :value ignore) (sexp :tag "Condition"))) The code is here: http://www.emacswiki.org/emacs-en/download/icicles-opt.el HTH. --__1372341461944161208abhmt119.oracle.com Content-Type: image/png; name="throw-key-customize-2.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="throw-key-customize-2.png" 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 --__1372341461944161208abhmt119.oracle.com Content-Type: image/png; name="throw-key-customize-1.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="throw-key-customize-1.png" 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 AAAAAElFTkSuQmCC --__1372341461944161208abhmt119.oracle.com--