[Openmcl-devel] Keybindings

Ron Garret ron at awun.net
Thu Jun 25 00:00:51 PDT 2009


On Jun 24, 2009, at 11:42 PM, Gary Byers wrote:

>
>
> On Wed, 24 Jun 2009, Ron Garret wrote:
>
>> Pressing TAB indents the current line, but not the current region (if
>> there's one selected.  If I do this:
>>
>> (hi:bind-key "Indent Region" #k"tab")
>>
>> then TAB indents the current region if one is selected, but not the
>> current line if one is not.
>>
>> Is there any way to get TAB to do both depending on whether or not
>> there is a selection?
>
> Sure: define a command that does both, depending on whether or not
> there's a selection, then bind #k"tab" to that command.
>

Woohoo!

(defcommand "Indent" (p)
   "Invokes function held by the Hemlock variable \"Indent Function\",
   moving point past region if called with argument."
   (if (region-active-p)
     (let ((region (current-region)))
       (with-mark ((start (region-start region) :left-inserting)
                   (end (region-end region) :left-inserting))
         (indent-region-for-commands (region start end))))
     (let ((point (current-point)))
       (with-mark ((mark point :left-inserting))
         (cond ((or (not p) (zerop p))
                (funcall (value indent-function) mark)
                (when (mark< point mark)
                  (move-mark point mark)))
               (t
                (if (plusp p)
                  (unless (line-offset point (1- p))
                    (buffer-end point))
                  (unless (line-offset mark (1+ p))
                    (buffer-start mark)))
                (indent-region-for-commands (region mark point))
                (find-attribute (line-start point) :whitespace  
#'zerop)))))))

rg




More information about the Openmcl-devel mailing list