<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
#lang s-exp framework/keybinding-lang<br>
<br>
(define (get-frame obj)<br>
  (cond<br>
    [(is-a? obj editor&lt;%&gt;)<br>
     (send (send obj get-canvas) get-top-level-window)]<br>
    [else<br>
     (send obj get-top-level-window)]))<br>
<br>
(keybinding &quot;c:n&quot; (λ (obj evt) (send (get-frame obj) open-in-new-tab #f)))<br></blockquote><div><br>that works! :) <br><br>For other people who might be interested in this, here are some others (on a frame%):<br>
(close-current-tab)<br>(on-tab-change from-tab to-tab)<br>(enable-evaluation)<br>(disable-evaluation)<br><br>(in PLT\collects\drscheme\private\unit.ss)<br>I guess the `on-tab-change&#39; could be used to implement more flexible tab switching.<br>
</div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">
&gt; I would especially like the &quot;c:s:semicolon&quot; to work...<br>
<br>
</div>I think you might just need the ?: prefix to make things work (see the<br>
docs for map-function for more on that). This is a messy area that<br>
needs to be cleaned up at some point, but one of the above should be<br>
made to work. I don&#39;t have a windows machine (or a french keyboard!)<br>
to try these things out so I&#39;m kind of stuck on this one.<br></blockquote><div><br>Well, there remains a weird behavior: <br>the &quot;?:c:s:semicolon&quot; works fine in a little editor (see the bottom of this email), <br>
but when I use it in &quot;mykeys.ss&quot; for DrScheme, it does not work!<br><br>Same for (the 3 symbols are on the same key on a french layout):<br>   [&quot;$&quot; ,(insert-string &quot;$$$&quot;)]<br>   [&quot;?:s:$&quot; ,(insert-string &quot;£££&quot;)]<br>
   [&quot;?:c:m:$&quot; ,(insert-string &quot;¤¤¤&quot;)]<br><br>These work in the little editor below, but not in DrScheme.<br>I suspect this is the same for many particular keys.<br>I don&#39;t know if this behavior is particular to french keyboard or to foreign ones, or if this occurs also on english keyboards (I guess not (?)).<br>
<br>I&#39;m using DrScheme 4.2.3, not the SVN one, maybe this is also because of the menus (whose shortcuts I have disabled)?<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div class="im"><br>
&gt; Also, reloading DrScheme for each test takes some time... isn&#39;t there a<br>
&gt; faster way to test keybindings?<br>
<br>
</div>In the general case, no. Your keybindings can (and from what I can<br>
tell, people&#39;s often do) rely on all kinds of parts of drscheme&#39;s<br>
implementation. And if that&#39;s not loaded it can&#39;t run.<br>
<br>
You can, however, develop the implementation of your keybindings in a<br>
separate file and then just require that file into your keybindings<br>
file. For example, if your keybinding only depends on the core gui<br>
library, you can use this to help you build it:<br>
<br>
#lang scheme/gui<br>
<br>
(define (my-keybinding)<br>
  (send t insert &quot;hello!&quot;))<br>
<br>
(define f (new frame% [label &quot;&quot;] [width 200] [height 200]))<br>
(define t (new text%))<br>
(define ec (new editor-canvas% [parent f] [editor t]))<br>
(define b (new button%<br>
               [label &quot;test keybinding&quot;]<br>
               [parent f]<br>
               [callback (λ x (my-keybinding))]))<br>
(send ec focus)<br>
(send f show #t)<br>
<div class="im"><br></div></blockquote><div><br>Here is a modified version of the code above to also test actual keybindings:<br><br><div style="margin-left: 40px;">#lang scheme/gui<br><br>(define (km-keybinding keymap key fun)<br>
  (if (string? fun)<br>      (send keymap map-function key fun)<br>      (let ([name (symbol-&gt;string (gensym))])<br>        (send keymap add-function name fun)<br>        (send keymap map-function key name))))<br><br>(define (insert-string str)<br>
  (lambda (editor event)<br>    (send editor insert str)))<br><br>(define f (new frame% [label &quot;Keybinding tests&quot;] [width 400] [height 200]))<br>(define t (new text%))<br>(define ec (new editor-canvas% [parent f] [editor t]))<br>
(define km (send t get-keymap))<br><br>; some tests (all positive) on a french keyboard layout:<br>(for-each <br> (λ(k-f)(apply km-keybinding km k-f))<br> `([&quot;c:semicolon&quot; ,(insert-string &quot;uncommenting&quot;)]<br>
   [&quot;?:c:s:semicolon&quot; ,(insert-string &quot;commenting out&quot;)] <br>   [&quot;c:_&quot; ,(insert-string &quot;λ&quot;)]<br>   [&quot;o&quot; ,(insert-string &quot;ooooo&quot;)]<br>   [&quot;$&quot; ,(insert-string &quot;$$$&quot;)]<br>

   [&quot;?:s:$&quot; ,(insert-string &quot;£££&quot;)]<br>
   [&quot;?:c:m:$&quot; ,(insert-string &quot;¤¤¤&quot;)]<br>   ))<br>   <br>(send ec focus)<br>(send f show #t)<br></div><br>There is probably a better way to do this, especially for the `km-keybinding&#39; function.<br>
<br>Thanks again for the help,<br>Laurent<br><br> </div></div>