Re: Emacs initialisation query
Lo, on Thursday, March 22, Oliver Elphick did write:
> "Richard C. Cobbe" wrote:
> >Lo, on Thursday, March 22, Oliver Elphick did write:
> >
> >> (If it matters, I'm using xemacs 21).
> >>
> >> I want to define a function key to run a macro.
> >>
> >> I can do it within a session:
> >>
> >> ESC x global-set-key RET <f9> eif-indent-buffer RET
> >>
> >> but I can't get it to work in the initialisation file ~/.emacs:
> >>
> >> (defalias 'eif-indent-buffer (read-kbd-macro
> >> "ESC x mark- whole- buffer RET ESC x eif- indent- region RET"))
> >> (global-set-key <f9> 'eif-indent-buffer)
> >>
> >>
> >> What should I put for <f9>? I've tried "f9", <f9>, "<f9>", (<f9>)
> >> and it doesn't like any of them. I can't see anything about it in
> >> the docs either.
> >
> >(global-set-key [f9] 'eif-indent-buffer)
> >
> >See the xemacs info page, `Key Sequences' node.
>
> In fact, that caused xemacs to hang for a long while, but your pointer to
> documentation led me to the correct answer, in the node "Programmatic
> Rebinding":
>
> (global-set-key 'f9 'eif-indent-buffer)
That's surprising. According to that node, 'f9 is an abbreviation for
'(f9), which is in turn an abbreviation for [(f9)]. My solution, [f9], is
also an abbreviation for [(f9)].
This is all the stranger because I have the following in my .emacs, and
they work just fine:
(global-set-key [delete] 'delete-char)
(global-set-key [kp-delete] 'delete-char)
(global-set-key [(control m)] 'newline-and-indent)
(global-set-key [(control x) (control g)] 'goto-line)
(global-set-key [(control x) (control k)] 'rcc-save-and-kill-current-buffer)
(global-set-key [f5] 'call-last-kbd-macro)
(global-set-key [f9] 'compile)
(global-set-key [f12] 'repeat-complex-command)
(global-set-key [home] 'beginning-of-buffer)
(global-set-key [end] 'end-of-buffer)
(global-set-key [kp-home] 'rcc-beginning-of-buffer-no-mark)
(global-set-key [kp-end] 'rcc-end-of-buffer-no-mark)
My only guess is that the behavior you noticed has something to do with the
fact that you're binding a key to a macro, whereas I'm binding all of my
keys to functions. I'd probably have written your particular situation
like this:
(defun rcc-eif-indent-buffer ()
"Indents the entire buffer according to Eiffel mode's indentation rules."
(interactive nil)
(eif-indent-region (point-min) (point-max)))
(global-set-key [f9] 'rcc-eif-indent-buffer)
This is a mite cleaner, and it has the advantage that it doesn't change
mark's location as it runs. Still, your solution is perfectly valid.
Glad you got it working,
Richard
Reply to: