<div dir="ltr">Hi all,<div><br></div><div>I have recently picked up Scheme and would like to customize the key bindings in DrScheme. Specifically, I find the default binding for commenting and uncommenting out to be cumbersome; on OSX it is esc;c:= and esc;c:semicolon.</div>
<div><br></div><div>What I would like to achieve is use one key to comment and uncomment, so it comments an uncommented line, and vice versa. Unfortunately I'm finding the documentation on key-binding a little sparse. Here's what I've been working at:</div>
<div><br></div><div><div><br></div><div><div>(define get-start-of-line</div><div>  (lambda (editor)</div><div>    (send editor get-character (send editor line-start-position </div><div>          (send editor position-line (send editor get-start-position))))))</div>
<div><br></div><div>(define is-line-commented?</div><div>  (lambda (editor)</div><div>    (cond</div><div>      ((eq? ";" </div><div>            (get-start-of-line editor) )#t)</div><div>      (else #f))))</div>
<div><br></div><div>(keybinding "d:/" (ë (editor evt) (if (is-line-commented? editor) </div><div>                                      (send editor uncomment-selection (send editor get-start-position))</div><div>
                                      (send editor comment-out-selection (send editor get-start-position))</div><div>                                      )))</div></div></div><div><br></div><div><br></div><div>I know it's not very well written; I've only just finished the recursion section of The Little Schemer. I was going to leave it here, then I had another look at the documentation and had another go:</div>
<div><br></div><div><div>(define get-start-of-line</div><div>  (lambda (editor)</div><div>    (send editor line-start-position </div><div>          (send editor position-line (send editor get-start-position)))))</div><div>
<br></div><div>(define get-end-of-line</div><div>  (lambda (editor)</div><div>    (send editor line-end-position </div><div>          (send editor position-line (send editor get-end-position)))))</div><div><br></div><div>
(define is-line-commented?</div><div>  (lambda (editor)</div><div>     (send editor find-string </div><div>           ";" 'forward (get-start-of-line editor) (get-end-of-line editor))))</div><div><br></div><div>
<br></div><div>(keybinding "d:/" (ë (editor evt) (if (is-line-commented? editor) </div><div>                                      (send editor uncomment-selection (send editor get-start-position))</div><div>                                      (send editor comment-out-selection (send editor get-start-position))</div>
<div>                                      )))</div></div><div><br></div><div><br></div><div>This one actually works, but of course it is clumsy and dumb; it doesn't work when the caret is at the start of each line, and doesn't know if the semi-colon is escaped. I'm thrilled anyway. :)</div>
<div><br></div><div><br></div><div>Colin</div></div>