Thanks.† It makes it really easy to re-use any existing menu options with custom keybindings.† There was a minor bug on the internal define of the new event shadowing the passed in evt.† As a result the get-time-stamp message was failing with an undefined object in the send.†† I renamed it menu-evt below.<br>
<br>† † † † † (define menu-evt<br>
 † † † † † † (new control-event%<br>
 † † † † † † † † †[event-type &#39;menu]<br>
 † † † † † † † † †[time-stamp<br>
 † † † † † † † † † (send evt get-time-stamp)])) ;; evt passed in<br>
 † † † † † (send item command menu-evt)))))))<br><br>
Thanks for extending the doc, I&#39;m re-reading the keybindings stuff in its entirety.<br><br><div class="gmail_quote">On Fri, May 11, 2012 at 8:14 AM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ah, good point. I&#39;ve added some example code to the docs that shows<br>
how to bind menu items. Here&#39;s the code.<br>
<br>
Robby<br>
<br>
#lang s-exp framework/keybinding-lang<br>
<br>
(define (menu-bind key menu-item)<br>
 †(keybinding<br>
 † key<br>
 † (Ž (ed evt)<br>
 † † (define canvas (send ed get-canvas))<br>
 † † (when canvas<br>
 † † † (define menu-bar (find-menu-bar canvas))<br>
 † † † (when menu-bar<br>
 † † † † (define item (find-item menu-bar menu-item))<br>
 † † † † (when item<br>
 † † † † † (define evt<br>
 † † † † † † (new control-event%<br>
 † † † † † † † † †[event-type &#39;menu]<br>
 † † † † † † † † †[time-stamp<br>
 † † † † † † † † † (send evt get-time-stamp)]))<br>
 † † † † † (send item command evt)))))))<br>
<br>
(define/contract (find-menu-bar c)<br>
 †(-&gt; (is-a?/c area&lt;%&gt;) (or/c #f (is-a?/c menu-bar%)))<br>
 †(let loop ([c c])<br>
 † †(cond<br>
 † † †[(is-a? c frame%) (send c get-menu-bar)]<br>
 † † †[(is-a? c area&lt;%&gt;) (loop (send c get-parent))]<br>
 † † †[else #f])))<br>
<br>
(define/contract (find-item menu-bar label)<br>
 †(-&gt; (is-a?/c menu-bar%)<br>
 † † †string?<br>
 † † †(or/c (is-a?/c selectable-menu-item&lt;%&gt;) #f))<br>
 †(let loop ([o menu-bar])<br>
 † †(cond<br>
 † † †[(is-a? o selectable-menu-item&lt;%&gt;)<br>
 † † † (and (equal? (send o get-plain-label) label)<br>
 † † † † † †o)]<br>
 † † †[(is-a? o menu-item-container&lt;%&gt;)<br>
 † † † (for/or ([i (in-list (send o get-items))])<br>
 † † † † (loop i))]<br>
 † † †[else #f])))<br>
<br>
(menu-bind &quot;c:a&quot; &quot;Run&quot;)<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Thu, May 10, 2012 at 8:22 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;m caught in a bit of Catch-22. † From the doc.<br>
&gt;<br>
&gt; If you are most familiar with Emacs-style key bindings (especially on<br>
&gt; windows or some linux installations where the control key is, by default,<br>
&gt; for the menu shortcuts), you should uncheck the†Enable keybindings in<br>
&gt; menus†preference. Many of the keybindings below are inspired by Emacs.<br>
&gt;<br>
&gt; So I&#39;ve disabled keybindings in menu and thereby lose crtl-r Run and crtl-i<br>
&gt; Reindent. †I&#39;d like to re-bind but I&#39;ve as of yet been unable to locate what<br>
&gt; functions Run and Reindent correspond to.<br>
&gt;<br>
&gt; I totally missed the online check syntax option, which sounds like a very<br>
&gt; good thing. †In fact I&#39;m still totally missing it. :) †I just rechecked the<br>
&gt; menus/preferences. †Where is this mythic option found?<br>
&gt;<br>
&gt; Thanks<br>
&gt;<br>
&gt;<br>
&gt; On Thu, May 10, 2012 at 8:49 PM, Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; FWIW, run and reindent are already menu-key based shortcuts (r and i<br>
&gt;&gt; respectively) so they should be available already (unless you&#39;re on<br>
&gt;&gt; windows and you&#39;ve disabled menu keyboard shortcuts). For reindent you<br>
&gt;&gt; can hit tab, and DrRacket re-indents the line you&#39;re on or the<br>
&gt;&gt; selection (if it is more than one line). For check syntax, I recommend<br>
&gt;&gt; you enable online check syntax and then you don&#39;t have to hit any key<br>
&gt;&gt; at all to get that to work.<br>
&gt;&gt;<br>
&gt;&gt; hth,<br>
&gt;&gt; Robby<br>
&gt;&gt;<br>
&gt;&gt; On Thu, May 10, 2012 at 6:38 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; I&#39;m attempting this weekend to make the leap from my beloved Emacs and<br>
&gt;&gt; &gt; Geiser to DrRacket. † †Was wondering if anyone has a cool set of custom<br>
&gt;&gt; &gt; keybindings they&#39;d like to share.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Some I&#39;d like to get my hands on are:<br>
&gt;&gt; &gt; 1. binding for reindent / reindent all.<br>
&gt;&gt; &gt; 2. binding for Check Syntax button equivalent.<br>
&gt;&gt; &gt; 3. binding for Run button equivalent.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Three below I just pieced together.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ;; insert Ž<br>
&gt;&gt; &gt; (keybinding &quot;c:\\&quot; (Ž (editor evt) (send editor insert &quot;Ž&quot;)))<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ;; close<br>
&gt;&gt; &gt; (keybinding &quot;c:q&quot; (Ž (editor evt)<br>
&gt;&gt; &gt; † † † † † † † † † † (send (send editor get-top-level-window)<br>
&gt;&gt; &gt; close-current-tab)))<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ;; open a new tab<br>
&gt;&gt; &gt; (keybinding &quot;c:t&quot; (Ž (editor evt) (send (send editor<br>
&gt;&gt; &gt; get-top-level-window)<br>
&gt;&gt; &gt; create-new-tab))<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ____________________<br>
&gt;&gt; &gt; †Racket Users list:<br>
&gt;&gt; &gt; †<a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>